diff --git a/modules/broker/features/pom.xml b/modules/broker/features/pom.xml deleted file mode 100644 index ae0a42fa..00000000 --- a/modules/broker/features/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - wso2iot-broker-features-parent - pom - WSO2 MB Features Parent - http://wso2.com/products/message-broker - WSO2 Message Broker Server Features Parent - - - - Apache License Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0 - - - - - product - service - - diff --git a/modules/broker/features/product/feature.properties b/modules/broker/features/product/feature.properties deleted file mode 100644 index 2bcfafeb..00000000 --- a/modules/broker/features/product/feature.properties +++ /dev/null @@ -1,217 +0,0 @@ -################################################################################ -# Copyright 2009 WSO2, Inc. (http://wso2.com) -# -# 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. -################################################################################ - -providerName=WSO2 Inc. - -########################## license properties ################################## -licenseURL=http://www.apache.org/licenses/LICENSE-2.0 - -license=\ - Apache License\n\ - Version 2.0, January 2004\n\ - http://www.apache.org/licenses/\n\ -\n\ - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\ -\n\ - 1. Definitions.\n\ -\n\ - "License" shall mean the terms and conditions for use, reproduction,\n\ - and distribution as defined by Sections 1 through 9 of this document.\n\ -\n\ - "Licensor" shall mean the copyright owner or entity authorized by\n\ - the copyright owner that is granting the License.\n\ -\n\ - "Legal Entity" shall mean the union of the acting entity and all\n\ - other entities that control, are controlled by, or are under common\n\ - control with that entity. For the purposes of this definition,\n\ - "control" means (i) the power, direct or indirect, to cause the\n\ - direction or management of such entity, whether by contract or\n\ - otherwise, or (ii) ownership of fifty percent (50%) or more of the\n\ - outstanding shares, or (iii) beneficial ownership of such entity.\n\ -\n\ - "You" (or "Your") shall mean an individual or Legal Entity\n\ - exercising permissions granted by this License.\n\ -\n\ - "Source" form shall mean the preferred form for making modifications,\n\ - including but not limited to software source code, documentation\n\ - source, and configuration files.\n\ -\n\ - "Object" form shall mean any form resulting from mechanical\n\ - transformation or translation of a Source form, including but\n\ - not limited to compiled object code, generated documentation,\n\ - and conversions to other media types.\n\ -\n\ - "Work" shall mean the work of authorship, whether in Source or\n\ - Object form, made available under the License, as indicated by a\n\ - copyright notice that is included in or attached to the work\n\ - (an example is provided in the Appendix below).\n\ -\n\ - "Derivative Works" shall mean any work, whether in Source or Object\n\ - form, that is based on (or derived from) the Work and for which the\n\ - editorial revisions, annotations, elaborations, or other modifications\n\ - represent, as a whole, an original work of authorship. For the purposes\n\ - of this License, Derivative Works shall not include works that remain\n\ - separable from, or merely link (or bind by name) to the interfaces of,\n\ - the Work and Derivative Works thereof.\n\ -\n\ - "Contribution" shall mean any work of authorship, including\n\ - the original version of the Work and any modifications or additions\n\ - to that Work or Derivative Works thereof, that is intentionally\n\ - submitted to Licensor for inclusion in the Work by the copyright owner\n\ - or by an individual or Legal Entity authorized to submit on behalf of\n\ - the copyright owner. For the purposes of this definition, "submitted"\n\ - means any form of electronic, verbal, or written communication sent\n\ - to the Licensor or its representatives, including but not limited to\n\ - communication on electronic mailing lists, source code control systems,\n\ - and issue tracking systems that are managed by, or on behalf of, the\n\ - Licensor for the purpose of discussing and improving the Work, but\n\ - excluding communication that is conspicuously marked or otherwise\n\ - designated in writing by the copyright owner as "Not a Contribution."\n\ -\n\ - "Contributor" shall mean Licensor and any individual or Legal Entity\n\ - on behalf of whom a Contribution has been received by Licensor and\n\ - subsequently incorporated within the Work.\n\ -\n\ - 2. Grant of Copyright License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - copyright license to reproduce, prepare Derivative Works of,\n\ - publicly display, publicly perform, sublicense, and distribute the\n\ - Work and such Derivative Works in Source or Object form.\n\ -\n\ - 3. Grant of Patent License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - (except as stated in this section) patent license to make, have made,\n\ - use, offer to sell, sell, import, and otherwise transfer the Work,\n\ - where such license applies only to those patent claims licensable\n\ - by such Contributor that are necessarily infringed by their\n\ - Contribution(s) alone or by combination of their Contribution(s)\n\ - with the Work to which such Contribution(s) was submitted. If You\n\ - institute patent litigation against any entity (including a\n\ - cross-claim or counterclaim in a lawsuit) alleging that the Work\n\ - or a Contribution incorporated within the Work constitutes direct\n\ - or contributory patent infringement, then any patent licenses\n\ - granted to You under this License for that Work shall terminate\n\ - as of the date such litigation is filed.\n\ -\n\ - 4. Redistribution. You may reproduce and distribute copies of the\n\ - Work or Derivative Works thereof in any medium, with or without\n\ - modifications, and in Source or Object form, provided that You\n\ - meet the following conditions:\n\ -\n\ - (a) You must give any other recipients of the Work or\n\ - Derivative Works a copy of this License; and\n\ -\n\ - (b) You must cause any modified files to carry prominent notices\n\ - stating that You changed the files; and\n\ -\n\ - (c) You must retain, in the Source form of any Derivative Works\n\ - that You distribute, all copyright, patent, trademark, and\n\ - attribution notices from the Source form of the Work,\n\ - excluding those notices that do not pertain to any part of\n\ - the Derivative Works; and\n\ -\n\ - (d) If the Work includes a "NOTICE" text file as part of its\n\ - distribution, then any Derivative Works that You distribute must\n\ - include a readable copy of the attribution notices contained\n\ - within such NOTICE file, excluding those notices that do not\n\ - pertain to any part of the Derivative Works, in at least one\n\ - of the following places: within a NOTICE text file distributed\n\ - as part of the Derivative Works; within the Source form or\n\ - documentation, if provided along with the Derivative Works; or,\n\ - within a display generated by the Derivative Works, if and\n\ - wherever such third-party notices normally appear. The contents\n\ - of the NOTICE file are for informational purposes only and\n\ - do not modify the License. You may add Your own attribution\n\ - notices within Derivative Works that You distribute, alongside\n\ - or as an addendum to the NOTICE text from the Work, provided\n\ - that such additional attribution notices cannot be construed\n\ - as modifying the License.\n\ -\n\ - You may add Your own copyright statement to Your modifications and\n\ - may provide additional or different license terms and conditions\n\ - for use, reproduction, or distribution of Your modifications, or\n\ - for any such Derivative Works as a whole, provided Your use,\n\ - reproduction, and distribution of the Work otherwise complies with\n\ - the conditions stated in this License.\n\ -\n\ - 5. Submission of Contributions. Unless You explicitly state otherwise,\n\ - any Contribution intentionally submitted for inclusion in the Work\n\ - by You to the Licensor shall be under the terms and conditions of\n\ - this License, without any additional terms or conditions.\n\ - Notwithstanding the above, nothing herein shall supersede or modify\n\ - the terms of any separate license agreement you may have executed\n\ - with Licensor regarding such Contributions.\n\ -\n\ - 6. Trademarks. This License does not grant permission to use the trade\n\ - names, trademarks, service marks, or product names of the Licensor,\n\ - except as required for reasonable and customary use in describing the\n\ - origin of the Work and reproducing the content of the NOTICE file.\n\ -\n\ - 7. Disclaimer of Warranty. Unless required by applicable law or\n\ - agreed to in writing, Licensor provides the Work (and each\n\ - Contributor provides its Contributions) on an "AS IS" BASIS,\n\ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n\ - implied, including, without limitation, any warranties or conditions\n\ - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n\ - PARTICULAR PURPOSE. You are solely responsible for determining the\n\ - appropriateness of using or redistributing the Work and assume any\n\ - risks associated with Your exercise of permissions under this License.\n\ -\n\ - 8. Limitation of Liability. In no event and under no legal theory,\n\ - whether in tort (including negligence), contract, or otherwise,\n\ - unless required by applicable law (such as deliberate and grossly\n\ - negligent acts) or agreed to in writing, shall any Contributor be\n\ - liable to You for damages, including any direct, indirect, special,\n\ - incidental, or consequential damages of any character arising as a\n\ - result of this License or out of the use or inability to use the\n\ - Work (including but not limited to damages for loss of goodwill,\n\ - work stoppage, computer failure or malfunction, or any and all\n\ - other commercial damages or losses), even if such Contributor\n\ - has been advised of the possibility of such damages.\n\ -\n\ - 9. Accepting Warranty or Additional Liability. While redistributing\n\ - the Work or Derivative Works thereof, You may choose to offer,\n\ - and charge a fee for, acceptance of support, warranty, indemnity,\n\ - or other liability obligations and/or rights consistent with this\n\ - License. However, in accepting such obligations, You may act only\n\ - on Your own behalf and on Your sole responsibility, not on behalf\n\ - of any other Contributor, and only if You agree to indemnify,\n\ - defend, and hold each Contributor harmless for any liability\n\ - incurred by, or claims asserted against, such Contributor by reason\n\ - of your accepting any such warranty or additional liability.\n\ -\n\ - END OF TERMS AND CONDITIONS\n - -######################### copyright properties ################################# -copyrightURL=TODO - -copyright=\ -Copyright 2012 WSO2, Inc. (http://wso2.com)\n\ -\n\ -Licensed under the Apache License, Version 2.0 (the "License");\n\ -you may not use this file except in compliance with the License.\n\ -You may obtain a copy of the License at\n\ -\n\ -http://www.apache.org/licenses/LICENSE-2.0\n\ -\n\ -Unless required by applicable law or agreed to in writing, software\n\ -distributed under the License is distributed on an "AS IS" BASIS,\n\ -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\ -See the License for the specific language governing permissions and\n\ -limitations under the License.\n - diff --git a/modules/broker/features/product/org.wso2.iot.broker.styles.feature/pom.xml b/modules/broker/features/product/org.wso2.iot.broker.styles.feature/pom.xml deleted file mode 100644 index c8b89c91..00000000 --- a/modules/broker/features/product/org.wso2.iot.broker.styles.feature/pom.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-product-features - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.iot.broker.styles.feature - pom - WSO2 MB - Styles Features - http://wso2.org - - - - org.wso2.iot - org.wso2.iot.broker.styles - - - - - - - org.wso2.maven - carbon-p2-plugin - ${carbon.p2.plugin.version} - - - p2-feature-generation - package - - p2-feature-gen - - - org.wso2.iot.broker.styles - ../feature.properties - - - org.wso2.carbon.p2.category.type:console - - org.eclipse.equinox.p2.type.group:false - - - - - org.wso2.iot:org.wso2.iot.broker.styles - - - org.wso2.carbon.core.ui:${carbon.kernel.version} - - - - - - - - - diff --git a/modules/broker/features/product/pom.xml b/modules/broker/features/product/pom.xml deleted file mode 100644 index 3b1f2873..00000000 --- a/modules/broker/features/product/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-features-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - wso2iot-broker-product-features - pom - WSO2 MB Features Aggregator Module - Features specific to the WSO2 MB - - - org.wso2.iot.broker.styles.feature - - - diff --git a/modules/broker/features/service/etc/feature.properties b/modules/broker/features/service/etc/feature.properties deleted file mode 100644 index 2bcfafeb..00000000 --- a/modules/broker/features/service/etc/feature.properties +++ /dev/null @@ -1,217 +0,0 @@ -################################################################################ -# Copyright 2009 WSO2, Inc. (http://wso2.com) -# -# 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. -################################################################################ - -providerName=WSO2 Inc. - -########################## license properties ################################## -licenseURL=http://www.apache.org/licenses/LICENSE-2.0 - -license=\ - Apache License\n\ - Version 2.0, January 2004\n\ - http://www.apache.org/licenses/\n\ -\n\ - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\ -\n\ - 1. Definitions.\n\ -\n\ - "License" shall mean the terms and conditions for use, reproduction,\n\ - and distribution as defined by Sections 1 through 9 of this document.\n\ -\n\ - "Licensor" shall mean the copyright owner or entity authorized by\n\ - the copyright owner that is granting the License.\n\ -\n\ - "Legal Entity" shall mean the union of the acting entity and all\n\ - other entities that control, are controlled by, or are under common\n\ - control with that entity. For the purposes of this definition,\n\ - "control" means (i) the power, direct or indirect, to cause the\n\ - direction or management of such entity, whether by contract or\n\ - otherwise, or (ii) ownership of fifty percent (50%) or more of the\n\ - outstanding shares, or (iii) beneficial ownership of such entity.\n\ -\n\ - "You" (or "Your") shall mean an individual or Legal Entity\n\ - exercising permissions granted by this License.\n\ -\n\ - "Source" form shall mean the preferred form for making modifications,\n\ - including but not limited to software source code, documentation\n\ - source, and configuration files.\n\ -\n\ - "Object" form shall mean any form resulting from mechanical\n\ - transformation or translation of a Source form, including but\n\ - not limited to compiled object code, generated documentation,\n\ - and conversions to other media types.\n\ -\n\ - "Work" shall mean the work of authorship, whether in Source or\n\ - Object form, made available under the License, as indicated by a\n\ - copyright notice that is included in or attached to the work\n\ - (an example is provided in the Appendix below).\n\ -\n\ - "Derivative Works" shall mean any work, whether in Source or Object\n\ - form, that is based on (or derived from) the Work and for which the\n\ - editorial revisions, annotations, elaborations, or other modifications\n\ - represent, as a whole, an original work of authorship. For the purposes\n\ - of this License, Derivative Works shall not include works that remain\n\ - separable from, or merely link (or bind by name) to the interfaces of,\n\ - the Work and Derivative Works thereof.\n\ -\n\ - "Contribution" shall mean any work of authorship, including\n\ - the original version of the Work and any modifications or additions\n\ - to that Work or Derivative Works thereof, that is intentionally\n\ - submitted to Licensor for inclusion in the Work by the copyright owner\n\ - or by an individual or Legal Entity authorized to submit on behalf of\n\ - the copyright owner. For the purposes of this definition, "submitted"\n\ - means any form of electronic, verbal, or written communication sent\n\ - to the Licensor or its representatives, including but not limited to\n\ - communication on electronic mailing lists, source code control systems,\n\ - and issue tracking systems that are managed by, or on behalf of, the\n\ - Licensor for the purpose of discussing and improving the Work, but\n\ - excluding communication that is conspicuously marked or otherwise\n\ - designated in writing by the copyright owner as "Not a Contribution."\n\ -\n\ - "Contributor" shall mean Licensor and any individual or Legal Entity\n\ - on behalf of whom a Contribution has been received by Licensor and\n\ - subsequently incorporated within the Work.\n\ -\n\ - 2. Grant of Copyright License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - copyright license to reproduce, prepare Derivative Works of,\n\ - publicly display, publicly perform, sublicense, and distribute the\n\ - Work and such Derivative Works in Source or Object form.\n\ -\n\ - 3. Grant of Patent License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - (except as stated in this section) patent license to make, have made,\n\ - use, offer to sell, sell, import, and otherwise transfer the Work,\n\ - where such license applies only to those patent claims licensable\n\ - by such Contributor that are necessarily infringed by their\n\ - Contribution(s) alone or by combination of their Contribution(s)\n\ - with the Work to which such Contribution(s) was submitted. If You\n\ - institute patent litigation against any entity (including a\n\ - cross-claim or counterclaim in a lawsuit) alleging that the Work\n\ - or a Contribution incorporated within the Work constitutes direct\n\ - or contributory patent infringement, then any patent licenses\n\ - granted to You under this License for that Work shall terminate\n\ - as of the date such litigation is filed.\n\ -\n\ - 4. Redistribution. You may reproduce and distribute copies of the\n\ - Work or Derivative Works thereof in any medium, with or without\n\ - modifications, and in Source or Object form, provided that You\n\ - meet the following conditions:\n\ -\n\ - (a) You must give any other recipients of the Work or\n\ - Derivative Works a copy of this License; and\n\ -\n\ - (b) You must cause any modified files to carry prominent notices\n\ - stating that You changed the files; and\n\ -\n\ - (c) You must retain, in the Source form of any Derivative Works\n\ - that You distribute, all copyright, patent, trademark, and\n\ - attribution notices from the Source form of the Work,\n\ - excluding those notices that do not pertain to any part of\n\ - the Derivative Works; and\n\ -\n\ - (d) If the Work includes a "NOTICE" text file as part of its\n\ - distribution, then any Derivative Works that You distribute must\n\ - include a readable copy of the attribution notices contained\n\ - within such NOTICE file, excluding those notices that do not\n\ - pertain to any part of the Derivative Works, in at least one\n\ - of the following places: within a NOTICE text file distributed\n\ - as part of the Derivative Works; within the Source form or\n\ - documentation, if provided along with the Derivative Works; or,\n\ - within a display generated by the Derivative Works, if and\n\ - wherever such third-party notices normally appear. The contents\n\ - of the NOTICE file are for informational purposes only and\n\ - do not modify the License. You may add Your own attribution\n\ - notices within Derivative Works that You distribute, alongside\n\ - or as an addendum to the NOTICE text from the Work, provided\n\ - that such additional attribution notices cannot be construed\n\ - as modifying the License.\n\ -\n\ - You may add Your own copyright statement to Your modifications and\n\ - may provide additional or different license terms and conditions\n\ - for use, reproduction, or distribution of Your modifications, or\n\ - for any such Derivative Works as a whole, provided Your use,\n\ - reproduction, and distribution of the Work otherwise complies with\n\ - the conditions stated in this License.\n\ -\n\ - 5. Submission of Contributions. Unless You explicitly state otherwise,\n\ - any Contribution intentionally submitted for inclusion in the Work\n\ - by You to the Licensor shall be under the terms and conditions of\n\ - this License, without any additional terms or conditions.\n\ - Notwithstanding the above, nothing herein shall supersede or modify\n\ - the terms of any separate license agreement you may have executed\n\ - with Licensor regarding such Contributions.\n\ -\n\ - 6. Trademarks. This License does not grant permission to use the trade\n\ - names, trademarks, service marks, or product names of the Licensor,\n\ - except as required for reasonable and customary use in describing the\n\ - origin of the Work and reproducing the content of the NOTICE file.\n\ -\n\ - 7. Disclaimer of Warranty. Unless required by applicable law or\n\ - agreed to in writing, Licensor provides the Work (and each\n\ - Contributor provides its Contributions) on an "AS IS" BASIS,\n\ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n\ - implied, including, without limitation, any warranties or conditions\n\ - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n\ - PARTICULAR PURPOSE. You are solely responsible for determining the\n\ - appropriateness of using or redistributing the Work and assume any\n\ - risks associated with Your exercise of permissions under this License.\n\ -\n\ - 8. Limitation of Liability. In no event and under no legal theory,\n\ - whether in tort (including negligence), contract, or otherwise,\n\ - unless required by applicable law (such as deliberate and grossly\n\ - negligent acts) or agreed to in writing, shall any Contributor be\n\ - liable to You for damages, including any direct, indirect, special,\n\ - incidental, or consequential damages of any character arising as a\n\ - result of this License or out of the use or inability to use the\n\ - Work (including but not limited to damages for loss of goodwill,\n\ - work stoppage, computer failure or malfunction, or any and all\n\ - other commercial damages or losses), even if such Contributor\n\ - has been advised of the possibility of such damages.\n\ -\n\ - 9. Accepting Warranty or Additional Liability. While redistributing\n\ - the Work or Derivative Works thereof, You may choose to offer,\n\ - and charge a fee for, acceptance of support, warranty, indemnity,\n\ - or other liability obligations and/or rights consistent with this\n\ - License. However, in accepting such obligations, You may act only\n\ - on Your own behalf and on Your sole responsibility, not on behalf\n\ - of any other Contributor, and only if You agree to indemnify,\n\ - defend, and hold each Contributor harmless for any liability\n\ - incurred by, or claims asserted against, such Contributor by reason\n\ - of your accepting any such warranty or additional liability.\n\ -\n\ - END OF TERMS AND CONDITIONS\n - -######################### copyright properties ################################# -copyrightURL=TODO - -copyright=\ -Copyright 2012 WSO2, Inc. (http://wso2.com)\n\ -\n\ -Licensed under the Apache License, Version 2.0 (the "License");\n\ -you may not use this file except in compliance with the License.\n\ -You may obtain a copy of the License at\n\ -\n\ -http://www.apache.org/licenses/LICENSE-2.0\n\ -\n\ -Unless required by applicable law or agreed to in writing, software\n\ -distributed under the License is distributed on an "AS IS" BASIS,\n\ -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\ -See the License for the specific language governing permissions and\n\ -limitations under the License.\n - diff --git a/modules/broker/features/service/org.wso2.stratos.mb.dashboard.ui.feature/pom.xml b/modules/broker/features/service/org.wso2.stratos.mb.dashboard.ui.feature/pom.xml deleted file mode 100644 index c4caf7f9..00000000 --- a/modules/broker/features/service/org.wso2.stratos.mb.dashboard.ui.feature/pom.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - org.wso2.iot - wso2stratos-mb-features - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.stratos.mb.dashboard.ui.feature - pom - WSO2 Stratos Message Broker - Dashboard UI Features - http://wso2.org - - - - org.wso2.iot - org.wso2.stratos.mb.dashboard.ui - - - org.wso2.carbon - org.wso2.carbon.ui.menu.stratos - - - - - - - org.wso2.maven - carbon-p2-plugin - ${carbon.p2.plugin.version} - - - p2-feature-generation - package - - p2-feature-gen - - - org.wso2.stratos.mb.dashboard.ui - ../etc/feature.properties - - - org.wso2.carbon.p2.category.type:console - - - - - org.wso2.iot:org.wso2.stratos.mb.dashboard.ui - org.wso2.carbon:org.wso2.carbon.ui.menu.stratos - - - - org.wso2.carbon.core.ui:${carbon.kernel.version} - - - - - - - - - - diff --git a/modules/broker/features/service/org.wso2.stratos.mb.login.ui.feature/pom.xml b/modules/broker/features/service/org.wso2.stratos.mb.login.ui.feature/pom.xml deleted file mode 100644 index 1e5f0c42..00000000 --- a/modules/broker/features/service/org.wso2.stratos.mb.login.ui.feature/pom.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - org.wso2.iot - wso2stratos-mb-features - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.stratos.mb.login.ui.feature - pom - WSO2 Stratos Message Broker - Deployment Features - http://wso2.org - - - - org.wso2.iot - org.wso2.stratos.mb.login.ui - - - - - - - org.wso2.maven - carbon-p2-plugin - ${carbon.p2.plugin.version} - - - p2-feature-generation - package - - p2-feature-gen - - - org.wso2.stratos.mb.login.ui - ../etc/feature.properties - - - org.wso2.carbon.p2.category.type:console - - - - org.wso2.iot:org.wso2.stratos.mb.login.ui - - - - - - - - - diff --git a/modules/broker/features/service/pom.xml b/modules/broker/features/service/pom.xml deleted file mode 100644 index 97212cc6..00000000 --- a/modules/broker/features/service/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-features-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - wso2stratos-mb-features - pom - WSO2 Stratos Message Broker - Features Aggregator Module - Features specific to the WSO2 Message Broker - - - org.wso2.stratos.mb.login.ui.feature - org.wso2.stratos.mb.dashboard.ui.feature - - - diff --git a/modules/broker/integration/pom.xml b/modules/broker/integration/pom.xml deleted file mode 100644 index 9f74b322..00000000 --- a/modules/broker/integration/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - wso2iot-broker-integration-tests - pom - WSO2 MB - Integration Tests - http://wso2.com/products/message-broker/ - WSO2 Message Broker Server Parent - - - tests-common/admin-clients - tests-common/integration-tests-utils - tests-common/platform-tests-utils - tests-integration - tests-ui-integration - tests-platform - - - - - org.testng - testng - - - commons-logging - commons-logging - - - org.wso2.andes.wso2 - andes - - - org.wso2.andes.wso2 - andes-client - - - org.wso2.carbon.messaging - org.wso2.carbon.andes.event.stub - - - org.wso2.carbon.messaging - org.wso2.carbon.andes.stub - - - - diff --git a/modules/broker/integration/tests-common/admin-clients/pom.xml b/modules/broker/integration/tests-common/admin-clients/pom.xml deleted file mode 100644 index 28b136fc..00000000 --- a/modules/broker/integration/tests-common/admin-clients/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - org.wso2.iot - wso2iot-broker-integration-tests - 1.0.0-SNAPSHOT - ../../pom.xml - - - 4.0.0 - WSO2 MB - Integration Test Common Module - org.wso2.iot.broker.integration.common.clients - jar - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - compile - - - org.wso2.carbon - org.wso2.carbon.utils - compile - - - org.apache.geronimo.specs.wso2 - geronimo-jms_1.1_spec - - - org.eclipse.paho - org.eclipse.paho.client.mqttv3 - - - commons-configuration - commons-configuration - compile - - - org.apache.commons - commons-lang3 - - - diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesClient.java deleted file mode 100644 index fe5d617d..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesClient.java +++ /dev/null @@ -1,352 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.clients; - - -import org.apache.log4j.Logger; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientOutputParser; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -/** - * This class represents the Andes Client which is used to publish/consume JMS messages. The JMS - * publishers and consumers are created within this class with the help of a configuration file. - * This class also provides functionality which can be used to evaluate JMS message publishers and - * consumers. - */ -public class AndesClient { - /** - * The logger used to log information, warnings, errors, etc. - */ - private static Logger log = Logger.getLogger(AndesClient.class); - - /** - * The delay between starting publishers or consumers - */ - private long startDelay = 0L; - - /** - * The consumers that are started concurrently - */ - List consumers = new ArrayList<>(); - - /** - * The publishers that are started concurrently - */ - List publishers = new ArrayList<>(); - - /** - * Creates a single consumer or publisher based on the configuration passed - * - * @param config The configuration. - * @param createConsumersAndProducers True if the client needs to create connections, sessions - * and respecting receivers or consumers. False otherwise. - * @throws JMSException Thrown when creating the JMS sessions, connection and receiver - * or sender based on consumer or producer. - * @throws NamingException Thrown when invalid lookup is used in the initial context. - */ - public AndesClient(AndesJMSClientConfiguration config, boolean createConsumersAndProducers) - throws NamingException, JMSException, AndesClientException, IOException { - this(config, 1, createConsumersAndProducers); - } - - /** - * The constructor used for creating multiple consumer or publishers based on the configuration - * passed. - * - * @param config The configuration. - * @param numberOfThreads The amount of publishers or consumers. This amount of - * threads will be started. - * @param createConsumersAndProducers True if the client needs to create connections, sessions - * and respective receivers or consumers. False otherwise. - * @throws JMSException Thrown when creating the JMS sessions, connection and receiver - * or sender based on consumer or producer. - * @throws NamingException Thrown when invalid lookup is used in the initial context. - * @throws AndesClientException Thrown when invalid number of threads are used. - */ - public AndesClient(AndesJMSClientConfiguration config, int numberOfThreads, - boolean createConsumersAndProducers) - throws IOException, JMSException, NamingException, AndesClientException { - if (0 < numberOfThreads) { - if (config instanceof AndesJMSConsumerClientConfiguration) { - AndesClientUtils.initializeReceivedMessagesPrintWriter(((AndesJMSConsumerClientConfiguration) config) - .getFilePathToWriteReceivedMessages()); - } - - if (config instanceof AndesJMSPublisherClientConfiguration) { - AndesClientUtils.initializePublishedPrintWriter(((AndesJMSPublisherClientConfiguration) config).getFilePathToWritePublishedMessages()); - } - - for (int i = 0; i < numberOfThreads; i++) { - if (config instanceof AndesJMSConsumerClientConfiguration) { - consumers - .add(new AndesJMSConsumer((AndesJMSConsumerClientConfiguration) config, createConsumersAndProducers)); - } else if (config instanceof AndesJMSPublisherClientConfiguration) { - publishers - .add(new AndesJMSPublisher((AndesJMSPublisherClientConfiguration) config, createConsumersAndProducers)); - } - } - } else { - throw new AndesClientException("The amount of subscribers cannot be less than 1. " + - "Value entered is " + Integer.toString(numberOfThreads)); - } - } - - /** - * Starts up the consumer(s) or publisher(s) to consume or publish messages. - * - * @throws JMSException Thrown when broker does not adhere to JMS functions. - * @throws IOException Thrown when trying to read contents from a file. - */ - public void startClient() throws AndesClientException, JMSException, IOException { - boolean isStartDelaySet = this.startDelay > 0L; - for (AndesJMSConsumer consumer : consumers) { - consumer.startClient(); - if (isStartDelaySet) { - AndesClientUtils.sleepForInterval(this.startDelay); - } - } - for (AndesJMSPublisher publisher : publishers) { - publisher.startClient(); - if (isStartDelaySet) { - AndesClientUtils.sleepForInterval(this.startDelay); - } - } - } - - /** - * Stops the client from publishing or consuming messages. - * - * @throws JMSException Thrown when closing the connections, session and receiver or sender - * based on a consumer and a publisher. - */ - public void stopClient() throws JMSException { - for (AndesJMSConsumer consumer : consumers) { - consumer.stopClient(); - } - for (AndesJMSPublisher publisher : publishers) { - publisher.stopClient(); - } - - log.info("TPS:" + this.getConsumerTPS() + " AverageLatency:" + this.getAverageLatency()); - } - - /** - * Gets the received messages for all consumers in the client. - * - * @return The total number of messages received for all consumers. - */ - public long getReceivedMessageCount() { - long allReceivedMessageCount = 0L; - for (AndesJMSConsumer consumer : consumers) { - allReceivedMessageCount = allReceivedMessageCount + consumer.getReceivedMessageCount().get(); - } - return allReceivedMessageCount; - } - - /** - * Gets the average transactions per second for consumer(s). - * - * @return The average TPS. - */ - public double getConsumerTPS() { - double tps = 0L; - for (AndesJMSConsumer consumer : consumers) { - tps = tps + consumer.getConsumerTPS(); - } - return tps / consumers.size(); - } - - /** - * Gets the average latency for consumer(s). - * - * @return The average latency. - */ - public double getAverageLatency() { - double averageLatency = 0L; - for (AndesJMSConsumer consumer : consumers) { - averageLatency = averageLatency + consumer.getAverageLatency(); - } - return averageLatency / consumers.size(); - } - - /** - * Gets the number of messages sent by the publisher(s). - * - * @return The number of messages. - */ - public long getSentMessageCount() { - long allSentMessageCount = 0L; - for (AndesJMSPublisher publisher : publishers) { - allSentMessageCount = allSentMessageCount + publisher.getSentMessageCount(); - } - return allSentMessageCount; - } - - /** - * Gets the average transactions per seconds for publisher(s). Suppressing "UnusedDeclaration" - * as the client acts as an service. - * Suppressing "UnusedDeclaration" as currently it is not being used within product-mb test - * cases. But the client can be exported so that any other use can use the client for publishing - * and subscribing messages. - * - * @return the average transactions per seconds. - */ - @SuppressWarnings("UnusedDeclaration") - public double getPublisherTPS() { - double tps = 0L; - for (AndesJMSPublisher publisher : publishers) { - tps = tps + publisher.getPublisherTPS(); - } - return tps / publishers.size(); - } - - /** - * Gets the duplicated messages received for a single consumer. This is not valid when is comes - * to multiple consumers. - * - * @return A map of message identifiers and message content. - * @throws IOException Thrown when the received messages file is either missing or corrupted. - */ - public Map checkIfMessagesAreDuplicated() - throws IOException { - if (!consumers.isEmpty()) { - AndesClientUtils.flushPrintWriters(); - AndesClientOutputParser andesClientOutputParser = - new AndesClientOutputParser(consumers.get(0).getConfig() - .getFilePathToWriteReceivedMessages()); - return andesClientOutputParser.getDuplicatedMessages(); - } else { - return null; - } - } - - /** - * Checks whether the received messages are in order for a single consumer. This is not valid - * when is comes to multiple consumers. - * - * @return true if messages are in order, false otherwise. - * @throws IOException Thrown when the received messages file is either missing or corrupted. - */ - public boolean checkIfMessagesAreInOrder() - throws IOException { - if (!consumers.isEmpty()) { - AndesClientOutputParser andesClientOutputParser = - new AndesClientOutputParser(consumers.get(0).getConfig() - .getFilePathToWriteReceivedMessages()); - return andesClientOutputParser.checkIfMessagesAreInOrder(); - } else { - return false; - } - } - - /** - * This method returns whether received messages are transacted for a single consumer. This is - * not valid when is comes to multiple consumers. - * - * @param operationOccurredIndex Index of the operated message most of the time last message. - * @return true if all messages are transacted, false otherwise. - */ - public boolean transactedOperation(long operationOccurredIndex) - throws IOException { - if (0 < consumers.size()) { - AndesClientOutputParser andesClientOutputParser = - new AndesClientOutputParser(consumers.get(0).getConfig() - .getFilePathToWriteReceivedMessages()); - return andesClientOutputParser.transactedOperations(operationOccurredIndex); - } else { - return false; - } - } - - /** - * This method will check whether received messages are ordered correctly for a single consumer - * when rollback. This is not valid when there are multiple consumers. - * - * @param messagesPerRollback number of messages per each rollback occurrence by subscriber. - * @return true if all messages are received in correct order after each rollback, - * false otherwise. - */ - public boolean checkIfTransactedRollbackPreservesOrder(long messagesPerRollback) - throws IOException { - if (0 < consumers.size()) { - AndesClientOutputParser andesClientOutputParser = - new AndesClientOutputParser(consumers.get(0).getConfig() - .getFilePathToWriteReceivedMessages()); - return andesClientOutputParser.checkIfTransactedRollbackPreservesOrder(messagesPerRollback); - } else { - return false; - } - } - - /** - * This method returns number of duplicate received messages for a single consumer. This is not - * valid when is comes to multiple consumers. - * - * @return The duplicate message count. - */ - public long getTotalNumberOfDuplicates() - throws IOException { - if (0 < consumers.size()) { - AndesClientOutputParser andesClientOutputParser = - new AndesClientOutputParser(consumers.get(0).getConfig() - .getFilePathToWriteReceivedMessages()); - return andesClientOutputParser.numberDuplicatedMessages(); - } else { - return -1L; - } - } - - /** - * Sets the starting delay when starting publishers or consumers. - * - * @param startDelay The starting delay - */ - public void setStartDelay(long startDelay) { - this.startDelay = startDelay; - } - - /** - * Gets the all the consumers created by the client. - * @return A {@link java.util.List} of - * {@link org.wso2.mb.integration.common.clients.AndesJMSConsumer}. - */ - public List getConsumers() { - return consumers; - } - - /** - * Gets the all the publisher created by the client. - * @return A {@link java.util.List} of - * {@link org.wso2.mb.integration.common.clients.AndesJMSPublisher}. - */ - public List getPublishers() { - return publishers; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSBase.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSBase.java deleted file mode 100644 index 5b541fd4..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSBase.java +++ /dev/null @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients; - -import org.wso2.mb.integration.common.clients.configurations.AndesJMSClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; - -import javax.jms.JMSException; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import java.io.IOException; -import java.util.Properties; - -/** - * The base class for JMS publishers and consumers. This class creates the initial context which - * is required in creating the publishers and consumers. - */ -public abstract class AndesJMSBase { - /** - * The configuration file used in creating the JMS publishers and consumers. - */ - protected final AndesJMSClientConfiguration jmsConfig; - - /** - * The initial context used for creating the publishers and consumers. - */ - private InitialContext initialContext; - - /** - * Creates the initial context. - * - * @param config The configuration. - * @throws NamingException - */ - protected AndesJMSBase(AndesJMSClientConfiguration config) throws NamingException { - this.jmsConfig = config; - - Properties properties = new Properties(); - properties.put(Context.INITIAL_CONTEXT_FACTORY, AndesClientConstants.ANDES_ICF); - properties.put(AndesClientConstants.CF_NAME_PREFIX + AndesClientConstants.CF_NAME, jmsConfig.getConnectionString()); - properties.put(jmsConfig.getExchangeType().getType() + "." + jmsConfig.getDestinationName(), jmsConfig.getDestinationName()); - - initialContext = new InitialContext(properties); - } - - /** - * Gets the initial context. - * - * @return The initial context. - */ - public InitialContext getInitialContext() { - return initialContext; - } - - /** - * Starts up the publisher or consumer. - * - * @throws JMSException - * @throws NamingException - * @throws IOException - */ - public abstract void startClient() - throws JMSException, NamingException, IOException, AndesClientException; - - /** - * Stops the publisher or consumer - * - * @throws JMSException - */ - public abstract void stopClient() throws JMSException, AndesClientException; - - /** - * Gets the configuration. - * - * @return The configuration. - */ - public abstract AndesJMSClientConfiguration getConfig(); -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSConsumer.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSConsumer.java deleted file mode 100644 index 6ccec430..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSConsumer.java +++ /dev/null @@ -1,635 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients; - -import org.apache.log4j.Logger; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSDeliveryStatus; - -import javax.jms.Connection; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.Queue; -import javax.jms.QueueConnection; -import javax.jms.QueueConnectionFactory; -import javax.jms.QueueReceiver; -import javax.jms.QueueSession; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.jms.Topic; -import javax.jms.TopicConnection; -import javax.jms.TopicConnectionFactory; -import javax.jms.TopicSession; -import javax.jms.TopicSubscriber; -import javax.naming.NamingException; -import java.io.IOException; -import java.util.concurrent.atomic.AtomicLong; - -/** - * The JMS message consumer used for creating a consumer, reading messages synchronously and also - * asynchronously. - */ -public class AndesJMSConsumer extends AndesJMSBase - implements Runnable, MessageListener { - /** - * The logger used in logging information, warnings, errors and etc. - */ - private static Logger log = Logger.getLogger(AndesJMSConsumer.class); - - /** - * The configuration for the consumer - */ - private final AndesJMSConsumerClientConfiguration consumerConfig; - - /** - * Timestamp for the first message consumed - */ - private long firstMessageConsumedTimestamp; - - /** - * Timestamp of the last message consumes - */ - private long lastMessageConsumedTimestamp; - - /** - * The amount of messages received by the the consumer - */ - private AtomicLong receivedMessageCount; - - /** - * The addition of the time differences between the timestamp at which it got published and the - * timestamp at which it got consumed for each message consumed. - */ - private long totalLatency; - - /** - * The JMS connection used to create the JMS sessions - */ - private Connection connection; - - /** - * The JMS session used to create the JMS receiver - */ - private Session session; - - /** - * The receiver used the consume the received messages - */ - private MessageConsumer receiver; - - /** - * Creates a new JMS consumer with a given configuration. - * - * @param config The configuration. - * @param createConsumer Creates the connection, session and receiver. - * @throws NamingException - * @throws JMSException - */ - public AndesJMSConsumer(AndesJMSConsumerClientConfiguration config, boolean createConsumer) - throws NamingException, JMSException { - super(config); - receivedMessageCount = new AtomicLong(0); - - // Sets the configuration - this.consumerConfig = config; - - if (createConsumer) { - if (ExchangeType.QUEUE == this.consumerConfig.getExchangeType()) { - this.createQueueConnection(); - - } else if (ExchangeType.TOPIC == this.consumerConfig.getExchangeType()) { - this.createTopicConnection(); - } - } - } - - /** - * Creates a topic connection, session and receiver. - * - * @throws NamingException - * @throws JMSException - */ - private void createTopicConnection() throws NamingException, JMSException { - // Creates a topic connection, sessions and receiver - TopicConnectionFactory connFactory = (TopicConnectionFactory) super.getInitialContext() - .lookup(AndesClientConstants.CF_NAME); - TopicConnection topicConnection = connFactory.createTopicConnection(); - topicConnection.setClientID(this.consumerConfig.getSubscriptionID()); - topicConnection.start(); - TopicSession topicSession; - // Sets acknowledgement mode - if (TopicSession.SESSION_TRANSACTED == this.consumerConfig.getAcknowledgeMode().getType()) { - topicSession = topicConnection - .createTopicSession(true, this.consumerConfig.getAcknowledgeMode().getType()); - } else { - topicSession = topicConnection - .createTopicSession(false, this.consumerConfig.getAcknowledgeMode().getType()); - } - - Topic topic = - (Topic) super.getInitialContext().lookup(this.consumerConfig.getDestinationName()); - - connection = topicConnection; - session = topicSession; - // If topic is durable - if (this.consumerConfig.isDurable()) { - // If selectors exists - if (null != this.consumerConfig.getSelectors()) { - receiver = topicSession.createDurableSubscriber(topic, this.consumerConfig - .getSubscriptionID(), this.consumerConfig.getSelectors(), false); - } else { - receiver = topicSession - .createDurableSubscriber(topic, this.consumerConfig.getSubscriptionID()); - } - } else { - // If selectors exists - if (null != this.consumerConfig.getSelectors()) { - receiver = topicSession - .createSubscriber(topic, this.consumerConfig.getSelectors(), false); - } else { - receiver = topicSession.createSubscriber(topic); - } - } - } - - /** - * Creates a queue connection, session and receiver. - * - * @throws NamingException - * @throws JMSException - */ - private void createQueueConnection() throws NamingException, JMSException { - // Creates a queue connection, sessions and receiver - QueueConnectionFactory connFactory = (QueueConnectionFactory) super.getInitialContext() - .lookup(AndesClientConstants.CF_NAME); - QueueConnection queueConnection = connFactory.createQueueConnection(); - queueConnection.start(); - QueueSession queueSession; - - // Sets acknowledgement mode - if (QueueSession.SESSION_TRANSACTED == this.consumerConfig.getAcknowledgeMode().getType()) { - queueSession = queueConnection - .createQueueSession(true, this.consumerConfig.getAcknowledgeMode().getType()); - } else { - queueSession = queueConnection - .createQueueSession(false, this.consumerConfig.getAcknowledgeMode().getType()); - } - - Queue queue = - (Queue) super.getInitialContext().lookup(this.consumerConfig.getDestinationName()); - connection = queueConnection; - session = queueSession; - - // If selectors exists - if (null != this.consumerConfig.getSelectors()) { - receiver = queueSession.createReceiver(queue, this.consumerConfig.getSelectors()); - } else { - receiver = queueSession.createReceiver(queue); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void startClient() throws AndesClientException, JMSException { - if (null != connection && null != session && null != receiver) { - log.info("Starting Consumer"); - if (this.consumerConfig.isAsync()) { - // Use an asynchronous message listener - receiver.setMessageListener(this); - } else { - // Uses a thread to listen to messages - Thread consumerThread = new Thread(this); - consumerThread.start(); - } - } else { - throw new AndesClientException("The connection, session and message receiver is not assigned."); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void stopClient(){ - /** - * Using a separate thread as stopping the consumer on "onMessage" thread is not allowed. - */ - new Thread(new Runnable() { - @Override - public void run() { - if (null != connection && null != session && null != receiver) { - try { - log.info("Closing Consumer"); - if (ExchangeType.TOPIC == consumerConfig.getExchangeType()) { - if (null != receiver) { - TopicSubscriber topicSubscriber = (TopicSubscriber) receiver; - topicSubscriber.close(); - } - - if (null != session) { - TopicSession topicSession = (TopicSession) session; - topicSession.close(); - } - - if (null != connection) { - TopicConnection topicConnection = (TopicConnection) connection; - topicConnection.close(); - } - } else if (ExchangeType.QUEUE == consumerConfig.getExchangeType()) { - if (null != receiver) { - QueueReceiver queueReceiver = (QueueReceiver) receiver; - queueReceiver.close(); - } - - if (null != session) { - QueueSession queueSession = (QueueSession) session; - queueSession.close(); - } - - if (null != connection) { - QueueConnection queueConnection = (QueueConnection) connection; - queueConnection.stop(); - queueConnection.close(); - } - } - - receiver = null; - session = null; - connection = null; - - log.info("Consumer Closed"); - - } catch (JMSException e) { - log.error("Error in stopping client.", e); - throw new RuntimeException("Error in stopping client.", e); - } - } - } - }).start(); - } - - public void stopClientSync(){ - if (null != connection && null != session && null != receiver) { - try { - log.info("Closing Consumer"); - if (ExchangeType.TOPIC == consumerConfig.getExchangeType()) { - if (null != receiver) { - TopicSubscriber topicSubscriber = (TopicSubscriber) receiver; - topicSubscriber.close(); - } - - if (null != session) { - TopicSession topicSession = (TopicSession) session; - topicSession.close(); - } - - if (null != connection) { - TopicConnection topicConnection = (TopicConnection) connection; - topicConnection.close(); - } - } else if (ExchangeType.QUEUE == consumerConfig.getExchangeType()) { - if (null != receiver) { - QueueReceiver queueReceiver = (QueueReceiver) receiver; - queueReceiver.close(); - } - - if (null != session) { - QueueSession queueSession = (QueueSession) session; - queueSession.close(); - } - - if (null != connection) { - QueueConnection queueConnection = (QueueConnection) connection; - queueConnection.stop(); - queueConnection.close(); - } - } - - receiver = null; - session = null; - connection = null; - - log.info("Consumer Closed"); - - } catch (JMSException e) { - log.error("Error in stopping client.", e); - throw new RuntimeException("Error in stopping client.", e); - } - } - } - - /** - * Un-Subscribes and closes a consumers. - * - * @param stopClient true if the client needs to stopped after un-subscribing, false otherwise. - * @throws JMSException - */ - public void unSubscribe(final boolean stopClient) throws JMSException { - /** - * Using a separate thread as un-subscribing the consumer on "onMessage" thread is not allowed. - */ - new Thread(new Runnable() { - @Override - public void run() { - if (null != connection && null != session && null != receiver) { - try { - log.info("Un-subscribing Subscriber"); - session.unsubscribe(consumerConfig.getSubscriptionID()); - log.info("Subscriber Un-Subscribed"); - if (stopClient) { - stopClient(); - } - - } catch (JMSException e) { - log.error("Error in removing subscription(un-subscribing).", e); - throw new RuntimeException("JMSException : Error in removing subscription(un-subscribing).", e); - } - } else { - AndesClientException andesClientException = - new AndesClientException("The connection, session and message receiver is not assigned."); - log.error("The connection, session and message receiver is not assigned.", andesClientException); - throw new RuntimeException("The connection, session and message receiver is not assigned.", andesClientException); - } - } - }).start(); - } - - /** - * {@inheritDoc} - */ - @Override - public void run() { - try { - boolean interrupted = false; - while (true) { - Message message = this.receiver.receive(); - - // We assume message receiving was interrupted if we receive null - if (null == message) { - interrupted = true; - break; - } else if ( processReceivedMessage(message)) { - break; - } - } - if (!interrupted) { - stopClientSync(); - } - } catch (JMSException e) { - log.error("Error while receiving messages ", e); - throw new RuntimeException("JMSException : Error while listening to messages", e); - } catch (IOException e) { - log.error("Error while writing message to file", e); - throw new RuntimeException("IOException : Error while writing message to file\"", e); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void onMessage(Message message) { - try { - boolean success = this.processReceivedMessage(message); - if(success) { - stopClient(); - } - } catch (JMSException e) { - log.error("Error while listening to messages", e); - throw new RuntimeException("Error while listening to messages", e); - } catch (IOException e) { - log.error("Error while writing message to file", e); - throw new RuntimeException("Error while listening to messages", e); - } - } - - /** - * Processes the received messages. The processing includes the following actions. 1. - * Calculation of transactions per second. 2. Calculation of average latency for messages. 3. - * Message detail logging 4. Writes messages to a file. 5. Writes statistics to a file. 6. - * Closing and un-subscribing of client. - * - * @param message The {@link javax.jms.Message} to publish. - * @return true if client is stopped or un-subscribed, false otherwise. - * @throws JMSException - * @throws IOException - */ - private boolean processReceivedMessage(Message message) - throws JMSException, IOException { - if (null != message) { - long threadID = Thread.currentThread().getId(); - // Calculating total latency - long currentTimeStamp = System.currentTimeMillis(); - this.totalLatency = this.totalLatency + (currentTimeStamp - message.getJMSTimestamp()); - // Setting timestamps for TPS calculation - if (0 == this.firstMessageConsumedTimestamp) { - this.firstMessageConsumedTimestamp = currentTimeStamp; - } - this.lastMessageConsumedTimestamp = currentTimeStamp; - - // Incrementing message received count - this.receivedMessageCount.incrementAndGet(); - JMSDeliveryStatus deliveryStatus; - // Gets whether the message is original or redelivered - if (message.getJMSRedelivered()) { - deliveryStatus = JMSDeliveryStatus.REDELIVERED; - } else { - deliveryStatus = JMSDeliveryStatus.ORIGINAL; - } - // Logging the received message - if (0 == this.receivedMessageCount.get() % this.consumerConfig - .getPrintsPerMessageCount()) { - log.info("[RECEIVE] ThreadID:" + threadID + " Destination(" + this.consumerConfig - .getExchangeType().getType() + "):" + - this.consumerConfig.getDestinationName() + " ReceivedMessageCount:" + - this.receivedMessageCount + " MessageToReceive:" + - this.consumerConfig - .getMaximumMessagesToReceived() + " Original/Redelivered:" + deliveryStatus - .getStatus()); - - } - // Writes the statistics - if (null != this.consumerConfig.getFilePathToWriteStatistics()) { - String statisticsString = Long.toString(currentTimeStamp) + "," + Double - .toString(this.getConsumerTPS()) + "," + Double - .toString(this.getAverageLatency()); - AndesClientUtils.writeStatisticsToFile(statisticsString, this.consumerConfig - .getFilePathToWriteStatistics()); - } - if (message instanceof TextMessage) { - TextMessage textMessage = (TextMessage) message; - // Writes the received messages - if (null != this.consumerConfig.getFilePathToWriteReceivedMessages()) { - AndesClientUtils - .writeReceivedMessagesToFile(textMessage.getText(), this.consumerConfig - .getFilePathToWriteReceivedMessages()); - } - } - - // Acknowledges messages - if (0 == this.receivedMessageCount.get() % this.consumerConfig - .getAcknowledgeAfterEachMessageCount()) { - if (Session.CLIENT_ACKNOWLEDGE == session.getAcknowledgeMode()) { - message.acknowledge(); - log.info("Acknowledging message : " + message.getJMSMessageID()); - } - } - - if (0 == this.receivedMessageCount.get() % consumerConfig - .getCommitAfterEachMessageCount()) { - // Committing session - session.commit(); - log.info("Committed session"); - } else if (0 == this.receivedMessageCount.get() % consumerConfig - .getRollbackAfterEachMessageCount()) { - // Roll-backing session - session.rollback(); - log.info("Roll-backed session"); - } - - if (this.receivedMessageCount.get() >= consumerConfig - .getUnSubscribeAfterEachMessageCount()) { - // Un-Subscribing consumer - unSubscribe(true); - // Waiting till consumer is un-subscribed so that no messages will be read. - AndesClientUtils.sleepForInterval(1000L); - return true; - } else if (this.receivedMessageCount.get() >= consumerConfig - .getMaximumMessagesToReceived()) { - return true; - } - - // Delaying reading of messages - if (0 < consumerConfig.getRunningDelay()) { - try { - Thread.sleep(consumerConfig.getRunningDelay()); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } - return false; - } - - /** - * Gets the received message count for the consumer. - * - * @return The received message count. - */ - public AtomicLong getReceivedMessageCount() { - return this.receivedMessageCount; - } - - /** - * Gets the consumer transactions per seconds. - * - * @return The consumer transactions per seconds. - */ - public double getConsumerTPS() { - if (0 == this.lastMessageConsumedTimestamp - this.firstMessageConsumedTimestamp) { - return this.receivedMessageCount.doubleValue() / (1D / 1000); - } else { - return this.receivedMessageCount - .doubleValue() / (((double) (this.lastMessageConsumedTimestamp - this.firstMessageConsumedTimestamp)) / 1000D); - } - } - - /** - * Gets the average latency for the consumer in receiving messages. - * - * @return The average latency. - */ - public double getAverageLatency() { - if (0 == this.receivedMessageCount.doubleValue()) { - log.warn("No messages were received to calculate average latency."); - return 0D; - } else { - return (((double) this.totalLatency) / 1000D) / this.receivedMessageCount.doubleValue(); - } - } - - /** - * {@inheritDoc} - */ - @Override - public AndesJMSConsumerClientConfiguration getConfig() { - return this.consumerConfig; - } - - /** - * Gets the JMS message consuming connection ({@link javax.jms.Connection}). - * - * @return A {@link javax.jms.Connection} - */ - public Connection getConnection() { - return this.connection; - } - - /** - * Sets the JMS message consuming connection ({@link javax.jms.Connection}). - * - * @param connection A {@link javax.jms.Connection}. - */ - public void setConnection(Connection connection) { - this.connection = connection; - } - - /** - * Gets the JMS message consuming session ({@link javax.jms.Session}). - * - * @return A {@link javax.jms.Session}. - */ - public Session getSession() { - return this.session; - } - - /** - * Sets the JMS message consuming session ({@link javax.jms.Session}). - * - * @param session A {@link javax.jms.Session}. - */ - public void setSession(Session session) { - this.session = session; - } - - /** - * Gets the JMS message consumer ({@link javax.jms.MessageConsumer}). - * - * @return A {@link javax.jms.MessageConsumer}. - */ - public MessageConsumer getReceiver() { - return this.receiver; - } - - /** - * Sets the JMS message consumer ({@link javax.jms.MessageConsumer}). - * - * @param receiver A {@link javax.jms.MessageConsumer}. - */ - public void setReceiver(MessageConsumer receiver) { - this.receiver = receiver; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSPublisher.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSPublisher.java deleted file mode 100644 index 305e8a89..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesJMSPublisher.java +++ /dev/null @@ -1,437 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients; - -import org.apache.log4j.Logger; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.JMSHeaderProperty; -import org.wso2.mb.integration.common.clients.configurations.JMSHeaderPropertyType; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.JMSMessageType; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.DeliveryMode; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.jms.TextMessage; -import javax.naming.NamingException; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.text.MessageFormat; -import java.util.List; - -/** - * The JMS message publisher used for creating a publisher and for publishing JMS messages. - */ -public class AndesJMSPublisher extends AndesJMSBase implements Runnable { - /** - * The logger used in logging information, warnings, errors and etc. - */ - private static Logger log = Logger.getLogger(AndesJMSPublisher.class); - - /** - * The configuration for the publisher - */ - private AndesJMSPublisherClientConfiguration publisherConfig; - - /** - * The amount of messages sent by the publisher - */ - private long sentMessageCount; - - /** - * The timestamp at which the first message was published - */ - private long firstMessagePublishTimestamp; - - /** - * The timestamp at which the last message was published - */ - private long lastMessagePublishTimestamp; - - /** - * The connection which is used to create the JMS session - */ - private Connection connection; - - /** - * The session which is used to create the JMS message producer - */ - private Session session; - - /** - * The message producer which produces/sends messages - */ - private MessageProducer sender; - - /** - * Message content which is needed to be published. The value will depend on the configuration. - */ - private String messageContentFromFile = null; - - /** - * Creates a new JMS publisher with a given configuration. - * - * @param config The configuration - * @param createPublisher Creates connection, session and sender. - * @throws NamingException - * @throws JMSException - */ - public AndesJMSPublisher(AndesJMSPublisherClientConfiguration config, boolean createPublisher) - throws NamingException, JMSException { - super(config); - - // Sets the configuration - this.publisherConfig = config; - - // Creates a JMS connection, sessions and sender - if (createPublisher) { - ConnectionFactory connFactory = (ConnectionFactory) super.getInitialContext() - .lookup(AndesClientConstants.CF_NAME); - connection = connFactory.createConnection(); - connection.start(); - if(config.isTransactionalSession()) { - this.session = connection.createSession(true, 0); - } else { - this.session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - } - - Destination destination = (Destination) super.getInitialContext() - .lookup(this.publisherConfig.getDestinationName()); - this.sender = this.session.createProducer(destination); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void startClient() throws AndesClientException, IOException { - if (null != connection && null != session && null != sender) { - //reading message content from file - if (null != this.publisherConfig.getReadMessagesFromFilePath()) { - this.getMessageContentFromFile(); - } - - Thread subscriberThread = new Thread(this); - subscriberThread.start(); - } else { - throw new AndesClientException("The connection, session and message sender is not assigned."); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void stopClient() throws JMSException { - if (null != connection && null != session && null != sender) { - long threadID = Thread.currentThread().getId(); - log.info("Closing publisher | ThreadID : " + threadID); - this.sender.close(); - this.session.close(); - this.connection.close(); - this.sender = null; - this.session = null; - this.connection = null; - log.info("Publisher closed | ThreadID : " + threadID); - } - } - - /** - * Reads message content from a file which is used as the message content to when publishing - * messages. - * - * @throws IOException - */ - public void getMessageContentFromFile() throws IOException { - if (null != this.publisherConfig.getReadMessagesFromFilePath()) { - BufferedReader br = new BufferedReader(new FileReader(this.publisherConfig - .getReadMessagesFromFilePath())); - try { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append('\n'); - line = br.readLine(); - } - - // Remove the last appended next line since there is no next line. - sb.replace(sb.length() - 1, sb.length() + 1, ""); - messageContentFromFile = sb.toString(); - } finally { - br.close(); - } - } - } - - /** - * {@inheritDoc} - */ - @Override - public void run() { - try { - Message message = null; - long threadID = Thread.currentThread().getId(); - while (this.sentMessageCount < this.publisherConfig.getNumberOfMessagesToSend()) { - // Creating a JMS message - if (JMSMessageType.TEXT == this.publisherConfig.getJMSMessageType()) { - if (null != this.publisherConfig.getReadMessagesFromFilePath()) { - message = this.session.createTextMessage(this.messageContentFromFile); - } else { - message = this.session.createTextMessage(MessageFormat - .format(AndesClientConstants.PUBLISH_MESSAGE_FORMAT, this.sentMessageCount, threadID)); - } - } else if (JMSMessageType.BYTE == this.publisherConfig.getJMSMessageType()) { - message = this.session.createBytesMessage(); - } else if (JMSMessageType.MAP == this.publisherConfig.getJMSMessageType()) { - MapMessage mapMessage = this.session.createMapMessage(); - if (null != this.publisherConfig.getReadMessagesFromFilePath()) { - String[] entries = this.messageContentFromFile.split(System.getProperty("line.separator")); - for (int i = 0; i < entries.length; i++) { - mapMessage.setString("key" + i, entries[i]); - } - } - message = mapMessage; - } else if (JMSMessageType.OBJECT == this.publisherConfig.getJMSMessageType()) { - message = this.session.createObjectMessage(); - } else if (JMSMessageType.STREAM == this.publisherConfig.getJMSMessageType()) { - message = this.session.createStreamMessage(); - } - - //set JMS message type - String jmsType = publisherConfig.getJMSType(); - if(message!= null && null != jmsType && !jmsType.isEmpty()) { - message.setJMSType(jmsType); - } - - //set JMS header properties - setMessageProperties(message); - - if (null != message) { - this.sender.send(message, DeliveryMode.PERSISTENT, 0, this.publisherConfig - .getJMSMessageExpiryTime()); - // need to commit if transactional - if(getConfig().isTransactionalSession()) { - session.commit(); - } - if (message instanceof TextMessage && null != this.publisherConfig.getFilePathToWritePublishedMessages()){ - AndesClientUtils.writePublishedMessagesToFile(((TextMessage) message) - .getText(), this.publisherConfig.getFilePathToWritePublishedMessages()); - } - - this.sentMessageCount++; - - // TPS calculation - long currentTimeStamp = System.currentTimeMillis(); - if (0 == this.firstMessagePublishTimestamp) { - this.firstMessagePublishTimestamp = currentTimeStamp; - } - - this.lastMessagePublishTimestamp = currentTimeStamp; - if (0 == this.sentMessageCount % this.publisherConfig - .getPrintsPerMessageCount()) { - // Logging the sent message details. - if (null != this.publisherConfig.getReadMessagesFromFilePath()) { - log.info("[SEND]" + " (FROM FILE) ThreadID:" + - threadID + " Destination(" + this.publisherConfig - .getExchangeType().getType() + "):" + - this.publisherConfig - .getDestinationName() + " SentMessageCount:" + - this.sentMessageCount + " CountToSend:" + - this.publisherConfig.getNumberOfMessagesToSend()); - } else { - log.info("[SEND]" + " (INBUILT MESSAGE) ThreadID:" + - threadID + " Destination(" + this.publisherConfig - .getExchangeType().getType() + "):" + - this.publisherConfig - .getDestinationName() + " SentMessageCount:" + - this.sentMessageCount + " CountToSend:" + - this.publisherConfig.getNumberOfMessagesToSend()); - } - } - // Writing statistics - if (null != this.publisherConfig.getFilePathToWriteStatistics()) { - String statisticsString = - ",,,," + Long.toString(currentTimeStamp) + "," + Double - .toString(this.getPublisherTPS()); - AndesClientUtils - .writeStatisticsToFile(statisticsString, this.publisherConfig - .getFilePathToWriteStatistics()); - } - - // Delaying the publishing of messages - if (0 < this.publisherConfig.getRunningDelay()) { - try { - Thread.sleep(this.publisherConfig.getRunningDelay()); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - } - } - } - } - - this.stopClient(); - } catch (JMSException e) { - throw new RuntimeException("Error while publishing messages", e); - } catch (IOException e) { - throw new RuntimeException("Error while writing statistics", e); - } - } - - /** - * Set JMS Headers to the message according to publisher configuration - * - * @param message message to set properties - */ - private void setMessageProperties(Message message) throws JMSException { - - List headerPropertyList = publisherConfig.getJMSHeaderProperties(); - - for (JMSHeaderProperty jmsHeaderProperty : headerPropertyList) { - JMSHeaderPropertyType type = jmsHeaderProperty.getType(); - String propertyKey = jmsHeaderProperty.getKey(); - Object propertyValue = jmsHeaderProperty.getValue(); - switch (type) { - case OBJECT: - message.setObjectProperty(propertyKey, propertyValue); - break; - case BYTE: - message.setByteProperty(propertyKey, (Byte) propertyValue); - break; - case BOOLEAN: - message.setBooleanProperty(propertyKey, (Boolean) propertyValue); - break; - case DOUBLE: - message.setDoubleProperty(propertyKey, (Double) propertyValue); - break; - case FLOAT: - message.setFloatProperty(propertyKey, (Float) propertyValue); - break; - case SHORT: - message.setShortProperty(propertyKey, (Short) propertyValue); - break; - case STRING: - message.setStringProperty(propertyKey, (String) propertyValue); - break; - case INTEGER: - message.setIntProperty(propertyKey, (Integer) propertyValue); - break; - case LONG: - message.setLongProperty(propertyKey, (Long) propertyValue); - break; - } - } - } - - /** - * Gets the published message count. - * - * @return The published message count. - */ - public long getSentMessageCount() { - return this.sentMessageCount; - } - - /** - * Gets the transactions per seconds for publisher. - * - * @return The transactions per second. - */ - public double getPublisherTPS() { - if (0 == this.lastMessagePublishTimestamp - this.firstMessagePublishTimestamp) { - return ((double) this.sentMessageCount) / (1D / 1000); - } else { - return ((double) this.sentMessageCount) / (((double) (this.lastMessagePublishTimestamp - this.firstMessagePublishTimestamp)) / 1000); - } - } - - /** - * {@inheritDoc} - */ - @Override - public AndesJMSPublisherClientConfiguration getConfig() { - return this.publisherConfig; - } - - /** - * Gets the JMS message sending connection ({@link javax.jms.Connection}). - * - * @return A {@link javax.jms.Connection} - */ - public Connection getConnection() { - return this.connection; - } - - /** - * Sets the JMS message sending connection ({@link javax.jms.Connection}). - * - * @param connection A {@link javax.jms.Connection}. - */ - public void setConnection(Connection connection) { - this.connection = connection; - } - - /** - * Gets the JMS message sending session ({@link javax.jms.Session}). - * - * @return A {@link javax.jms.Session}. - */ - public Session getSession() { - return this.session; - } - - /** - * Sets the JMS message sending session ({@link javax.jms.Session}). - * - * @param session A {@link javax.jms.Session}. - */ - public void setSession(Session session) { - this.session = session; - } - - /** - * Gets the JMS message producer ({@link javax.jms.MessageProducer}). - * - * @return A {@link javax.jms.MessageProducer}. - */ - public MessageProducer getSender() { - return this.sender; - } - - /** - * Sets the JMS message producer ({@link javax.jms.MessageProducer}). Suppressing - * "UnusedDeclaration" as the client acts as a service. - * - * @param sender A {@link javax.jms.MessageProducer}. - */ - @SuppressWarnings("UnusedDeclaration") - public void setSender(MessageProducer sender) { - this.sender = sender; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesMQTTClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesMQTTClient.java deleted file mode 100644 index 31dac2fa..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/AndesMQTTClient.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients; - -import org.eclipse.paho.client.mqttv3.MqttConnectOptions; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.eclipse.paho.client.mqttv3.persist.MqttDefaultFilePersistence; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -import java.io.File; -import java.util.List; - -/** - * Basic MQTT client which handles the operations around MQTT clients. - * - Handling fields - * - Handling message counts - *

- * Each MQTT client with different publish/subscribe mechanism should extend from this. - */ -public abstract class AndesMQTTClient implements Runnable { - - /** - * The MQTT callback handler which handles message arrival, delivery complete and connection loss requests. - */ - private final CallbackHandler callbackHandler; - - /** - * unique identifier for mqtt client - less than or equal to 23 characters - */ - protected final String mqttClientID; - - /** - * Connection options that are required to create a connection to a MQTT server - */ - protected final MqttConnectOptions connectionOptions; - - /** - * Message broker MQTT URL - */ - protected final String brokerUrl; - - /** - * The topic the messages needs to send to / received from - */ - protected final String topic; - - /** - * The quality of service to send/receive messages * - */ - protected final QualityOfService qos; - - /** - * MQTT retain parameter - * When retain enabled with published topic message, it should retained for future subscribers - * for the same topic. - */ - protected final boolean retain; - - /** - * Store messages until server fetches them. - * Need a random value on this path to ensure that the same persistence store is not used by two clients. - */ - protected final MqttDefaultFilePersistence dataStore = - new MqttDefaultFilePersistence(System.getProperty("java.io.tmpdir") + File.separator + Math.random()); - - /** - * Create a mqtt client initializing mqtt options. - * - * @param configuration MQTT configurations - * @param clientID The unique client Id - * @param topic Topic to subscribe/publish to - * @param qos The quality of service - * @param callbackHandler Callback Handler to handle receiving messages/message sending ack - */ - public AndesMQTTClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, CallbackHandler callbackHandler) { - - //Initializing the variables locally - this.brokerUrl = configuration.getBrokerURL(); - this.mqttClientID = clientID; - String password = configuration.getBrokerPassword(); - String userName = configuration.getBrokerUserName(); - this.topic = topic; - this.qos = qos; - this.retain = configuration.isRetain(); - - // Construct the connection options object that contains connection parameters - // such as cleanSession and LWT - connectionOptions = new MqttConnectOptions(); - connectionOptions.setCleanSession(configuration.isCleanSession()); - - if (null != password) { - connectionOptions.setPassword(password.toCharArray()); - } - if (null != userName) { - connectionOptions.setUserName(userName); - } - - // Set callback handler - this.callbackHandler = callbackHandler; - } - - /** - * Publish messages to mqtt server. - * - * @param payload Data to send - * @param noOfMessages Number of message to send - * @throws MqttException - */ - protected abstract void publish(byte[] payload, int noOfMessages) throws MqttException; - - /** - * Subscribe to the requested topic - * The {@link QualityOfService} specified is the maximum level that messages will be sent to the client at. - * For instance if QoS {@link QualityOfService#LEAST_ONCE} is specified, any messages originally published at QoS - * {@link QualityOfService#EXACTLY_ONCE} will be downgraded to {@link QualityOfService#MOST_ONCE} when delivering - * to the client but messages published at {@link QualityOfService#LEAST_ONCE} and {@link - * QualityOfService#MOST_ONCE} will be received at the same level they were published at. - * - * @throws MqttException - */ - public abstract void subscribe() throws MqttException; - - /** - * Subscribe to a given topic. - * - * @param topicName The topic to subscribe to - * @throws MqttException - */ - public abstract void subscribe(String topicName) throws MqttException; - - /** - * Un-subscribe from the topic. - * - * @throws MqttException - */ - public abstract void unsubscribe() throws MqttException; - - /** - * Un-subscribe from a given topic. - * - * @param topic The topic to un-subscribe from. - * @throws MqttException - */ - public abstract void unsubscribe(String topic) throws MqttException; - - /** - * Get the received message count from the callback handler to validate message receiving is successful. - * - * @return Received message count - */ - public int getReceivedMessageCount() { - int messageCount = 0; - if (null != callbackHandler) { - messageCount = callbackHandler.getReceivedMessageCount(); - } - - return messageCount; - } - - /** - * Get the sent message count from the callback handler to validate message sending is successful. - * - * @return The sent message count. - */ - public int getSentMessageCount() { - int messageCount = 0; - if (null != callbackHandler) { - messageCount = callbackHandler.getSentMessageCount(); - } - - return messageCount; - } - - /** - * Shutdown the mqtt client. Call this whenever the system exits, test cases are finished or disconnect hook is - * called. - * - * @throws MqttException - */ - public abstract void disconnect() throws MqttException; - - /** - * Connect a mqtt client to the server with given options. - * - * @throws MqttException - */ - public abstract void connect() throws MqttException; - - /** - * Get the mqtt client Id. Use this to print client Id into logs whenever necessary. - * - * @return MQTT client Id - */ - public String getMqttClientID() { - return mqttClientID; - } - - /** - * Use this to validate if connection to server is still active. - * - * @return Is MQTT client connected to the server - */ - public abstract boolean isConnected(); - - /** - * Get the topic name this MQTT client is connected to. - * - * @return The topic name - */ - public String getTopic() { - return topic; - } - - /** - * Get the MQTT callback handler for the client. - * - * @return The callback handler - */ - public CallbackHandler getCallbackHandler() { - return callbackHandler; - } - - /** - * Check if the subscriber is subscribed to a topic - * - * @return Is Subscribed - */ - public abstract boolean isSubscribed(); - - /** - * Get all the received messages through this client. - * Use this if want to validate message content. - * - * @return Received messages. - */ - public abstract List getReceivedMessages(); - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/ClientMode.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/ClientMode.java deleted file mode 100644 index d0cbbcc9..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/ClientMode.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients; - -/** - * The MQTT client mode to use. - */ -public enum ClientMode { - - /** - * All the server calls will be synchronous. The control will not be returned until the call is successful. - */ - BLOCKING, - - /** - * All the server calls are asynchronous. The control is immediately returned and the server call will be made - * asynchronously. - */ - ASYNC - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTClientConnectionConfiguration.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTClientConnectionConfiguration.java deleted file mode 100755 index cd16370b..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTClientConnectionConfiguration.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients; - -/** - * The configurations that needs to be passed to MQTT client. - */ -public class MQTTClientConnectionConfiguration { - - /** - * The protocol used by the broker. - * tcp, udp .etc - */ - private String brokerProtocol = null; - - /** - * Broker host address. - * eg :- 127.0.0.1 - */ - private String brokerHost = null; - - /** - * Broker working port. - * eg :- 1883 - */ - private String brokerPort = null; - - /** - * The password to connect to the broker. - */ - private String brokerPassword = null; - - /** - * The username to connect to the broker. - */ - private String brokerUserName = null; - - /** - * MQTT retain parameter - * - * When retain enabled with published topic message, it should retained for future subscribers - * for the same topic. - */ - private boolean retain = false; - - /** - * MQTT clean session parameter. - *

- * When a client is connected to a broker, and if it has been previously connected and that session information - * is available in the broker, clean session = true will discard previous session information. - */ - private boolean cleanSession = false; - - public boolean isCleanSession() { - return cleanSession; - } - - public void setCleanSession(boolean cleanSession) { - this.cleanSession = cleanSession; - } - - public boolean isRetain() { - return retain; - } - - public void setRetain(boolean retain) { - this.retain = retain; - } - - public String getBrokerProtocol() { - return brokerProtocol; - } - - public void setBrokerProtocol(String brokerProtocol) { - this.brokerProtocol = brokerProtocol; - } - - public String getBrokerHost() { - return brokerHost; - } - - public void setBrokerHost(String brokerHost) { - this.brokerHost = brokerHost; - } - - public String getBrokerPort() { - return brokerPort; - } - - public void setBrokerPort(String brokerPort) { - this.brokerPort = brokerPort; - } - - public String getBrokerPassword() { - return brokerPassword; - } - - public void setBrokerPassword(String brokerPassword) { - this.brokerPassword = brokerPassword; - } - - public String getBrokerUserName() { - return brokerUserName; - } - - public void setBrokerUserName(String brokerUserName) { - this.brokerUserName = brokerUserName; - } - - /** - * Generate the broker URL using the given configurations. - * - * @return The broker URL - */ - public String getBrokerURL() { - return brokerProtocol + "://" + brokerHost + ":" + brokerPort; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTClientEngine.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTClientEngine.java deleted file mode 100755 index 8e57a70c..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTClientEngine.java +++ /dev/null @@ -1,596 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients; - -import org.apache.commons.lang.RandomStringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.mb.integration.common.clients.operations.mqtt.async.MQTTAsyncPublisherClient; -import org.wso2.mb.integration.common.clients.operations.mqtt.async.MQTTAsyncSubscriberClient; -import org.wso2.mb.integration.common.clients.operations.mqtt.blocking.MQTTBlockingPublisherClient; -import org.wso2.mb.integration.common.clients.operations.mqtt.blocking.MQTTBlockingSubscriberClient; - -import javax.xml.xpath.XPathExpressionException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; - -/** - * Handle all MQTT operations for MQTT tests. - * Create a new instance of this per each test case. - */ -public class MQTTClientEngine { - - /** - * Keeps all the publishers created through the engine - */ - private final List publisherList = new ArrayList(); - - /** - * Keep all the subscribers created through the engine - */ - private final List subscriberList = new ArrayList(); - - /** - * Subscriber client thread executor, executes runnable subscribers - */ - private final ExecutorService clientControlSubscriptionThreads = Executors.newFixedThreadPool(10); - - /** - * Publisher client thread executor, executes runnable publishers - */ - private final ExecutorService clientControlPublisherThreads = Executors.newFixedThreadPool(10); - - private final Log log = LogFactory.getLog(MQTTClientEngine.class); - - private static final int MILLISECONDS_TO_A_SECOND = 1000; - - /** - * The executor service to invoke scheduled jobs - */ - private final ScheduledExecutorService scheduleExecutor = Executors.newScheduledThreadPool(1); - - /** - * Schedule which publishes send/receive TPS - */ - private ScheduledFuture tpsPublisherSchedule; - - /** - * The received message count there was when the previous TPS calculation happened - */ - private int previousReceivedMessageCount; - - /** - * The sent message count there was when the previous TPS calculation happened - */ - private int previousSentMessageCount; - - /** - * Initialises the client engine attaching a disconnect hook to close all the opened connection. - * Initialises TPS publishing mechanism. - */ - public MQTTClientEngine() { - startTPSPublisher(); - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - try { - shutdown(); - log.info("All mqtt clients have been disconnected."); - } catch (MqttException e) { - log.error("Error occurred invoking disconnect for " + this.getName(), e); - } - - } - }); - } - - /** - * Generate a unique client Id for MQTT clients. - * Randomize current timestamp. - * - * @return A unique Id - */ - public String generateClientID() { - String clientId = RandomStringUtils.random(MQTTConstants.CLIENT_ID_LENGTH, String.valueOf(System - .currentTimeMillis())); - log.info("ClientID generated : " + clientId); - return clientId; - } - - /** - * Create a MQTT subscriber. Use when a subscriber with specific MQTTClientConnectionConfiguration is required. - * - * @param configuration MQTT configurations for the subscriber - * @param topicName Topic to subscribe to - * @param qos Quality of Service - * @param saveMessages Save receiving messages - * @param clientMode Client connection mode - * @throws MqttException - */ - public void createSubscriberConnection(MQTTClientConnectionConfiguration configuration, - String topicName, QualityOfService qos, - boolean saveMessages, ClientMode clientMode) throws MqttException { - - AndesMQTTClient mqttClient; - - if (ClientMode.ASYNC == clientMode) { - mqttClient = new MQTTAsyncSubscriberClient(configuration, generateClientID(), topicName, qos, saveMessages); - subscriberList.add(mqttClient); - clientControlSubscriptionThreads.execute(mqttClient); - } else if (ClientMode.BLOCKING == clientMode) { - mqttClient = new MQTTBlockingSubscriberClient(configuration, generateClientID(), topicName, qos, - saveMessages); - subscriberList.add(mqttClient); - mqttClient.run(); - } else { - // Using else since only the above two scenarios are handled. If a new client mode is included, - // handle it before this - throw new MqttException(new Throwable("Unidentified clientMode : " + clientMode)); - } - - - waitForSubscribersToSubscribe(); - } - - /** - * Method which can be used to override the auto generated client ID for a specific subscriber. - * - * @param configuration MQTT configurations for the subscriber - * @param topicName Topic to subscribe to - * @param qos Quality of Service - * @param saveMessages Save receiving messages - * @param clientMode Client connection mode - * @param clientID Unique identifier for the client hosting the subscription - */ - public void createSubscriberConnection(MQTTClientConnectionConfiguration configuration, - String topicName, QualityOfService qos, - boolean saveMessages, ClientMode clientMode, String clientID) throws - MqttException { - - AndesMQTTClient mqttClient; - - if (ClientMode.ASYNC == clientMode) { - mqttClient = new MQTTAsyncSubscriberClient(configuration, clientID, topicName, qos, saveMessages); - subscriberList.add(mqttClient); - clientControlSubscriptionThreads.execute(mqttClient); - } else if (ClientMode.BLOCKING == clientMode) { - mqttClient = new MQTTBlockingSubscriberClient(configuration, clientID, topicName, qos, - saveMessages); - subscriberList.add(mqttClient); - mqttClient.run(); - } else { - // Using else since only the above two scenarios are handled. If a new client mode is included, - // handle it before this - throw new MqttException(new Throwable("Unidentified clientMode : " + clientMode)); - } - - - waitForSubscribersToSubscribe(); - } - - /** - * Create a given number of subscribers. - * - * @param topicName Topic to subscribe to - * @param qos Quality of Service - * @param noOfSubscribers Number of subscriber connections to create - * @param saveMessages Save receiving messages - * @param clientMode Client connection mode - * @throws MqttException - */ - public void createSubscriberConnection(String topicName, QualityOfService qos, int noOfSubscribers, - boolean saveMessages, ClientMode clientMode, - AutomationContext automationContext) - throws MqttException, XPathExpressionException { - MQTTClientConnectionConfiguration configurations = getConfigurations(automationContext); - for (int i = 0; i < noOfSubscribers; i++) { - createSubscriberConnection(configurations, topicName, qos, saveMessages, clientMode); - } - } - - - /** - * Create a given number of subscribers. - * - * @param topicName Topic to subscribe to - * @param qos Quality of Service - * @param noOfSubscribers Number of subscriber connections to create - * @param saveMessages Save receiving messages - * @param clientMode Client connection mode - * @param configuration Configuration to use - * @throws MqttException - */ - public void createSubscriberConnection(String topicName, QualityOfService qos, int noOfSubscribers, - boolean saveMessages, ClientMode clientMode, - MQTTClientConnectionConfiguration configuration) throws MqttException { - - for (int i = 0; i < noOfSubscribers; i++) { - createSubscriberConnection(configuration, topicName, qos, saveMessages, clientMode); - } - } - - - /** - * Wait until all the subscriber are subscribed to the topics and ready to receive messages. - * Before creating publishers, this should be called otherwise while subscribers are being subscribed publishers - * will start to publish and those messages will be lost. - */ - private void waitForSubscribersToSubscribe() { - while (!isAllSubscribersSubscribed()) { - try { - TimeUnit.SECONDS.sleep(1L); - } catch (InterruptedException e) { - log.error("Error waiting until subscribers subscribe to topics.", e); - } - log.info("Waiting for subscribers to create connection"); - } - } - - /** - * Check if all the subscribers are subscribed to the topics and ready to receive messages. - * - * @return Is all subscribers subscribed to their topics - */ - private boolean isAllSubscribersSubscribed() { - boolean subscribed = true; - for (AndesMQTTClient subscriberClient : subscriberList) { - if (!subscriberClient.isSubscribed()) { - subscribed = false; - break; - } - } - - return subscribed; - } - - /** - * Create a MQTT publisher. Use when a publisher with specific MQTTClientConnectionConfiguration is required. - * - * @param configuration MQTT MQTT configurations for the publisher - * @param topicName Topic to publish to - * @param qos Quality of Service - * @param payload Payload of the sending message - * @param noOfMessages Number of message to send - * @param clientMode Client connection mode - * @throws MqttException - */ - public void createPublisherConnection(MQTTClientConnectionConfiguration configuration, - String topicName, QualityOfService qos, byte[] payload, - int noOfMessages, ClientMode clientMode) throws MqttException { - - AndesMQTTClient mqttClient; - - if (ClientMode.ASYNC == clientMode) { - mqttClient = new MQTTAsyncPublisherClient(configuration, generateClientID(), topicName, qos, payload, - noOfMessages); - publisherList.add(mqttClient); - clientControlPublisherThreads.execute(mqttClient); - } else if (ClientMode.BLOCKING == clientMode) { - mqttClient = new MQTTBlockingPublisherClient(configuration, generateClientID(), topicName, qos, payload, - noOfMessages); - publisherList.add(mqttClient); - mqttClient.run(); - } else { - // Using else since only the above two scenarios are handled. If a new client mode is included, - // handle it before this - throw new MqttException(new Throwable("Unidentified ClientMode : " + clientMode)); - } - } - - - - /** - * Create a given number of publishers. - * - * @param topicName Topic to publish to - * @param qos Quality of Service - * @param payload Payload of the sending message - * @param noOfPublishers Number of publisher connections to create - * @param noOfMessages Number of message to send - * @param clientMode Client connection mode - * @throws MqttException - */ - public void createPublisherConnection(String topicName, QualityOfService qos, byte[] payload, - int noOfPublishers, int noOfMessages, ClientMode clientMode, - AutomationContext automationContext) - throws MqttException, XPathExpressionException { - createPublisherConnection(topicName, qos, payload, noOfPublishers, noOfMessages, clientMode, - getConfigurations(automationContext)); - } - - /** - * Create a given number of publishers. - * - * @param topicName Topic to publish to - * @param qos Quality of Service - * @param payload Payload of the sending message - * @param noOfPublishers Number of publisher connections to create - * @param noOfMessages Number of message to send - * @param clientMode Client connection mode - * @param configuration Configuration to use. - * @throws MqttException - */ - public void createPublisherConnection(String topicName, QualityOfService qos, byte[] payload, - int noOfPublishers, int noOfMessages, ClientMode clientMode, - MQTTClientConnectionConfiguration configuration) throws MqttException { - - for (int i = 0; i < noOfPublishers; i++) { - createPublisherConnection(configuration, topicName, qos, payload, noOfMessages, clientMode); - } - } - - - /** - * Retrieve default MQTT client configurations. Always retrieve configurations from this unless there is a - * specific requirement. - * - * @return Default MQTTClientConnectionConfigurations - */ - private MQTTClientConnectionConfiguration getDefaultConfigurations() { - MQTTClientConnectionConfiguration configuration = new MQTTClientConnectionConfiguration(); - - configuration.setBrokerHost(MQTTConstants.BROKER_HOST); - configuration.setBrokerProtocol(MQTTConstants.BROKER_PROTOCOL); - configuration.setBrokerPort(MQTTConstants.BROKER_PORT); - configuration.setBrokerPassword(MQTTConstants.BROKER_PASSWORD); - configuration.setBrokerUserName(MQTTConstants.BROKER_USER_NAME); - configuration.setCleanSession(true); - - return configuration; - } - - /** - * Retrieve default MQTT client configurations and change if there are configuration changes in - * automation xml. - * - * @return Default MQTTClientConnectionConfigurations - */ - public MQTTClientConnectionConfiguration getConfigurations(AutomationContext automationContext) - throws XPathExpressionException { - - MQTTClientConnectionConfiguration configuration = getDefaultConfigurations(); - - String brokerHost = automationContext.getInstance().getHosts().get("default"); - - if (!brokerHost.isEmpty()) { - configuration.setBrokerHost(brokerHost); - } - - if(!automationContext.getInstance().getPorts().get("mqtt").isEmpty()) { - configuration.setBrokerPort(automationContext.getInstance().getPorts().get("mqtt")); - } - - return configuration; - } - - - /** - * Get received messages from all subscriber clients. - * - * @return Received messages - */ - public List getReceivedMessages() { - List receivedMessages = new ArrayList(); - for (AndesMQTTClient subscriber : subscriberList) { - receivedMessages.addAll(subscriber.getReceivedMessages()); - } - - return receivedMessages; - } - - /** - * Get received message count from all subscribers. - * - * @return Received message count - */ - public int getReceivedMessageCount() { - int count = 0; - - for (AndesMQTTClient subscriber : subscriberList) { - count = count + subscriber.getReceivedMessageCount(); - } - - return count; - } - - /** - * Get sent message count from all publishers. - * - * @return Sent message count - */ - public int getSentMessageCount() { - int count = 0; - - for (AndesMQTTClient publisher : publisherList) { - count = count + publisher.getSentMessageCount(); - } - - return count; - } - - /** - * Get all the subscribers. - * Use if needed to directly handle subscribers. - * - * @return MQTTSubscriberClient list - */ - public List getSubscriberList() { - return subscriberList; - } - - /** - * Get all the publishers. - * Use if needed to directly handle publishers. - * - * @return MQTTPublisherClient list - */ - public List getPublisherList() { - return publisherList; - } - - /** - * Wait for subscribers to receive all the messages and disconnect all clients. - * Use in test cases before doing assertions so message send/receive will be completed before assertions. - * - * @see MQTTClientEngine#waitUntilAllMessageReceived() - * - * @throws MqttException - */ - public void waitUntilAllMessageReceivedAndShutdownClients() throws MqttException { - waitUntilAllMessageReceived(); - shutdown(); - } - - /** - * Wait for subscribers to receive all the messages that have been sent. - * Use in test cases before doing assertions so message send/receive will be completed before assertions - * but needs the clients to be connected for further cases. - *

- * Detect all the messages are received by checking message count in each 10 second iterations. - * If message count doesn't change in two consecutive rounds it will be decided that all the messages that the - * server has sent is received. - *

- * If no messages are received, will lookout for 20 seconds for message and return. - */ - public void waitUntilAllMessageReceived() { - int previousMessageCount = 0; - int currentMessageCount = -1; - - // Check each 10 second if new messages have been received, if not disconnect clients. - // If no message are received this will wait for 20 seconds before shutting down clients. - while (currentMessageCount != previousMessageCount) { - try { - TimeUnit.SECONDS.sleep(10); - } catch (InterruptedException e) { - log.error("Error waiting for receiving messages.", e); - } - previousMessageCount = currentMessageCount; - currentMessageCount = getReceivedMessageCount(); - } - } - - /** - * Wait for subscriber to receive given number of messages and exit. - * Use in test cases before doing assertions so message send/receive will be completed before - * assertions. - *

- * This method will exit regardless of the number of messages received if maximum wait time - * is reached. - * - * @param expectedNumberOfMessages expected number of messages to be received by subscriber. - * @param maxWaitTime maximum wait time in milliseconds before stop waiting for messages. - * @throws org.eclipse.paho.client.mqttv3.MqttException - */ - public void waitUntilExpectedNumberOfMessagesReceived(int expectedNumberOfMessages, - long maxWaitTime) throws MqttException { - - // max system wait time - long maxWaitSystemTime = System.currentTimeMillis() + maxWaitTime; - - // this loop will exit if system time is larger or equal than maximum system wait time. - while (System.currentTimeMillis() <= maxWaitSystemTime) { - try { - - TimeUnit.MILLISECONDS.sleep(2000L); - - } catch (InterruptedException e) { - log.error("Error waiting for receiving messages.", e); - } - - // if expected number of messages received by the subscriber it will break the loop. - // without waiting further. - if (expectedNumberOfMessages <= getReceivedMessageCount()) { - log.info("Expected message count received by subscriber."); - break; - } - - } - - } - - /** - * Calculate the TPS for the last (messageCount) messages. - * - * @param timeDiffMillis Time took in milliseconds to receive (messageCount) messages. - * @return Transactions Per Second - */ - private double calculateTPS(long timeDiffMillis, int messageCount) { - return ((double) messageCount) / ((double) timeDiffMillis / MILLISECONDS_TO_A_SECOND); - } - - /** - * Start publishing message send/receive TPS. - */ - private void startTPSPublisher() { - // scheduling each second will be too much details, but greater than 10 will be too less details, hence 5 - final int scheduleTimeInSeconds = 5; - tpsPublisherSchedule = scheduleExecutor.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - int currentReceivedMessageCount = getReceivedMessageCount(); - int currentSentMessageCount = getSentMessageCount(); - - if (currentReceivedMessageCount != previousReceivedMessageCount) { - double receiveTPS = calculateTPS(scheduleTimeInSeconds * MILLISECONDS_TO_A_SECOND, - currentReceivedMessageCount - previousReceivedMessageCount); - log.info("Message Receiving TPS for the last " + scheduleTimeInSeconds + " seconds : " + - receiveTPS); - - previousReceivedMessageCount = currentReceivedMessageCount; - } - - if (currentSentMessageCount != previousSentMessageCount) { - double sentTPS = calculateTPS(scheduleTimeInSeconds * MILLISECONDS_TO_A_SECOND, - currentSentMessageCount - previousSentMessageCount); - log.info("Message Sending TPS for the last " + scheduleTimeInSeconds + " seconds : " + sentTPS); - - previousSentMessageCount = currentSentMessageCount; - } - } - }, 0, scheduleTimeInSeconds, TimeUnit.SECONDS); - } - - /** - * Shutdown all the clients. - * Invoke when message send/receive is complete or shutdown hook is triggered. - * - * @throws MqttException - */ - public void shutdown() throws MqttException { - - for (AndesMQTTClient subscriberClient : subscriberList) { - subscriberClient.disconnect(); - } - - for (AndesMQTTClient publisherClient : publisherList) { - publisherClient.disconnect(); - } - - tpsPublisherSchedule.cancel(true); - scheduleExecutor.shutdown(); - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTConstants.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTConstants.java deleted file mode 100755 index 6d228da7..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/MQTTConstants.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients; - -/** - * Constants for MQTT tests. - */ -public class MQTTConstants { - - public static final String BROKER_PROTOCOL = "tcp"; - public static final String BROKER_HOST = "localhost"; - public static final String BROKER_PORT = "1883"; - public static final String BROKER_PASSWORD = "admin"; - public static final String BROKER_USER_NAME = "admin"; - - public static final byte[] TEMPLATE_PAYLOAD = "hello".getBytes(); - public static final byte[] EMPTY_PAYLOAD = "".getBytes(); - - /** - * Maximum length of a MQTT client Id defined by MQTT 3.1 specifications - */ - public static final int CLIENT_ID_LENGTH = 23; - - // Print message send/receive details on each 1000 messages - public static final int MESSAGE_PRINT_LIMIT = 1000; - - /*** - * Timeout for an MQTT client to connect to the broker. - */ - public static final long CLIENT_CONNECT_TIMEOUT = 1000; -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/QualityOfService.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/QualityOfService.java deleted file mode 100644 index ea8adf24..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/QualityOfService.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients; - -/** - * The quality of service levels in MQTT. - */ -public enum QualityOfService { - - /** - * The message is delivered at most once, or it may not be delivered at all. Its delivery across the network is - * not acknowledged. The message is not stored. The message could be lost if the client is disconnected, - * or if the server fails. QoS0 is the fastest mode of transfer. It is sometimes called "fire and forget". - */ - MOST_ONCE(0), - - /** - * The message is always delivered at least once. It might be delivered multiple times if there is a failure - * before an acknowledgment is received by the sender. The message must be stored locally at the sender, - * until the sender receives confirmation that the message has been published by the receiver. The message is - * stored in case the message must be sent again. - */ - LEAST_ONCE(1), - - /** - * The message is always delivered exactly once. The message must be stored locally at the sender, - * until the sender receives confirmation that the message has been published by the receiver. The message is - * stored in case the message must be sent again. QoS2 is the safest, but slowest mode of transfer. A more - * sophisticated handshaking and acknowledgement sequence is used than for QoS1 to ensure no duplication of - * messages occurs. - */ - EXACTLY_ONCE(2); - - private final int qos; - - /** - * Initialize with the given Quality of Service. - * - * @param qos The quality of service level - */ - private QualityOfService(int qos) { - this.qos = qos; - } - - /** - * Get the corresponding value for the given quality of service. - * Retrieve this value whenever quality of service level needs to feed into external libraries. - * - * @return The integer representation of this quality of service - */ - public int getValue() { - return qos; - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSClientConfiguration.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSClientConfiguration.java deleted file mode 100644 index ae2cae23..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSClientConfiguration.java +++ /dev/null @@ -1,526 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.clients.configurations; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; - -/** - * This class acts as a configuration class for the Andes Client. The class contains configuration - * that is common for both JMS publishers and consumer. The configuration mentioned are related to - * JMS only. - */ -public class AndesJMSClientConfiguration implements Cloneable { - - /** - * The destination name to be used when a configuration is not passed to the client. - */ - private static final String TEMP_DESTINATION_NAME = "temporaryDestination"; - - /** - * The AMQP transport port. - */ - private int port; - - /** - * The host name for the AMQP transport. - */ - private String hostName; - - /** - * The user name used when creating the AMQP connection string. Publishing/Consuming of JMS will - * be done under this username. - */ - private String userName; - - /** - * The password used when creating the AMQP connection string. - */ - private String password; - - /** - * The connection string used for publishing/consuming jms messages - */ - private String connectionString; - - /** - * The exchange type used to describe the destination type - */ - private ExchangeType exchangeType; - - /** - * The destination name for which messages are published/consumed - */ - private String destinationName; - - /** - * The amount of console logging for a certain message count - */ - private long printsPerMessageCount; - - /** - * A delay value which can be used to delay of publishing/consuming jms messages - */ - private long runningDelay; - - /** - * The file path to write statistics. Statistics include TPS, latency, etc. - */ - private String filePathToWriteStatistics; - - /** - * The query string for the amqp connection string. Used during SSL connections. - */ - private String queryStringForConnection = ""; - - /** - * The empty constructor which will create a queue related test case. - */ - public AndesJMSClientConfiguration() { - this(ExchangeType.QUEUE, TEMP_DESTINATION_NAME); - } - - /** - * Creates a connection string with the default username, password, hostname, port. Also sets - * the exchange type and destination name for publishing/consuming jms messages. - * - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSClientConfiguration(ExchangeType exchangeType, String destinationName) { - this(AndesClientConstants.DEFAULT_USERNAME, AndesClientConstants.DEFAULT_PASSWORD, - AndesClientConstants.DEFAULT_HOST_NAME, AndesClientConstants.DEFAULT_PORT, - exchangeType, destinationName); - } - - /** - * Creates a connection string with default username, password and a given host name, port. Also - * sets exchangeType and destination name used for publishing/consuming jms messages. - * - * @param hostName The host name used in the AMQP transport connection string. - * @param port The port used in the AMQP transport connection string. - * @param exchangeType The exchange type used for publishing/consuming jms messages. - * @param destinationName The destination name used for publishing/consuming jms messages. - */ - public AndesJMSClientConfiguration(String hostName, int port, ExchangeType exchangeType, - String destinationName) { - this(AndesClientConstants.DEFAULT_USERNAME, AndesClientConstants.DEFAULT_PASSWORD, hostName, - port, exchangeType, destinationName); - } - - /** - * Creates a connection string with default username, password, hostname and a given port. Also - * sets exchangeType and destination name used for publishing/consuming jms messages. - * - * @param port The port used in the AMQP transport connection string. - * @param exchangeType The exchange type used for publishing/consuming jms messages. - * @param destinationName The destination name used for publishing/consuming jms messages. - */ - public AndesJMSClientConfiguration(int port, ExchangeType exchangeType, - String destinationName) { - this(AndesClientConstants.DEFAULT_USERNAME, AndesClientConstants.DEFAULT_PASSWORD, - AndesClientConstants.DEFAULT_HOST_NAME, port, exchangeType, destinationName); - } - - /** - * Creates a connection string with a given username, password, exchange type - * and destination name. - * - * @param userName The username to be used in creating the connection string. - * @param password The password to be used in creating the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSClientConfiguration(String userName, String password,ExchangeType exchangeType, - String destinationName) { - this(userName, password, AndesClientConstants.DEFAULT_HOST_NAME, - AndesClientConstants.DEFAULT_PORT, exchangeType, destinationName); - } - - /** - * Creates a connection string with a given port, username, password, exchange type - * and destination name. - * - * @param userName The username to be used in creating the connection string. - * @param password The password to be used in creating the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSClientConfiguration(int port, String userName, String password,ExchangeType exchangeType, - String destinationName) { - this(userName, password, AndesClientConstants.DEFAULT_HOST_NAME, - port, exchangeType, destinationName); - } - - /** - * Creates a connection string with a given username, password, hostname, port, exchange type - * and destination name. - * - * @param userName The username to be used in creating the connection string. - * @param password The password to be used in creating the connection string. - * @param hostName The host name to be used in creating the connection string. - * @param port The AMQP transport port used in creating the connection string - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSClientConfiguration(String userName, String password, String hostName, - int port, ExchangeType exchangeType, - String destinationName) { - // Setting values for exchange type and destination name - this.exchangeType = exchangeType; - this.destinationName = destinationName; - - // Creating connection string - this.userName = userName; - this.password = password; - this.hostName = hostName; - this.port = port; - this.createConnectionString(); - - // Setting default values - this.printsPerMessageCount = 1L; - this.runningDelay = 0L; - } - - /** - * Creates a connection string using an xml file. - * - * @param xmlConfigFilePath The file path for the xml configuration file. - * @throws AndesClientConfigurationException - */ - public AndesJMSClientConfiguration(String xmlConfigFilePath) - throws AndesClientConfigurationException { - try { - XMLConfiguration config = new XMLConfiguration(xmlConfigFilePath); - - // Setting values for exchange type and destination name - this.exchangeType = ExchangeType.valueOf(config.getString("base.exchangeType", "QUEUE")); - this.destinationName = config.getString("base.destinationName", TEMP_DESTINATION_NAME); - - // Creating connection string - this.userName = - config.getString("base.userName", AndesClientConstants.DEFAULT_USERNAME); - this.password = - config.getString("base.password", AndesClientConstants.DEFAULT_PASSWORD); - this.hostName = - config.getString("base.hostName", AndesClientConstants.CARBON_VIRTUAL_HOST_NAME); - this.port = config.getInt("base.port", AndesClientConstants.DEFAULT_PORT); - this.queryStringForConnection = config.getString("base.queryStringForConnection", ""); - this.createConnectionString(); - - // Setting default values - this.printsPerMessageCount = config.getLong("base.printsPerMessageCount", 1L); - this.runningDelay = config.getLong("base.runningDelay", 0L); - } catch (ConfigurationException e) { - throw new AndesClientConfigurationException("Error in reading xml configuration file. Make sure the file exists.", e); - } catch (IllegalArgumentException e) { - throw new AndesClientConfigurationException("Invalid exchange type used. Use either 'QUEUE' or 'TOPIC'.", e); - } - } - - /** - * Copy constructor for the client. - * - * @param config The configuration file. - */ - public AndesJMSClientConfiguration( - AndesJMSClientConfiguration config) { - this.connectionString = config.getConnectionString(); - this.exchangeType = config.getExchangeType(); - this.destinationName = config.getDestinationName(); - this.printsPerMessageCount = config.getPrintsPerMessageCount(); - this.runningDelay = config.getRunningDelay(); - } - - /** - * Creates an SSL connection string with a given username, password, hostname, port, exchange - * type and destination name. - * - * @param userName The username to be used in creating the connection string. - * @param password The password to be used in creating the connection string. - * @param hostName The host name to be used in creating the connection string. - * @param port The AMQP transport port used in creating the connection string - * @param exchangeType The exchange type. - * @param destinationName The destination name. - * @param sslAlias The ssl alias to use in ssl connection. - * @param trustStorePath The file path for trust store to use in ssl connection. - * @param trustStorePassword The trust store password to use in ssl connection. - * @param keyStorePath The file path for key store to use in ssl connection. - * @param keyStorePassword The key store password to use in ssl connection. - */ - public AndesJMSClientConfiguration(String userName, String password, String hostName, int port, - ExchangeType exchangeType, String destinationName, - String sslAlias, - String trustStorePath, String trustStorePassword, - String keyStorePath, String keyStorePassword) { - // Setting values for exchange type and destination name - this.exchangeType = exchangeType; - this.destinationName = destinationName; - - // Creating connection string - this.userName = userName; - this.password = password; - this.hostName = hostName; - this.port = port; - if ((keyStorePath == null) || (keyStorePassword == null)) { - this.queryStringForConnection = "?ssl='true'" + - "&ssl_cert_alias='" + sslAlias + "'&trust_store='" + trustStorePath + - "'&trust_store_password='" + trustStorePassword + "'"; - } else { - this.queryStringForConnection = "?ssl='true'" + - "&ssl_cert_alias='" + sslAlias + "'&trust_store='" + trustStorePath + - "'&trust_store_password='" + - trustStorePassword + "'&key_store='" + keyStorePath + - "'&key_store_password='" + keyStorePassword + "'"; - } - this.createConnectionString(); - - // Setting default values - this.printsPerMessageCount = 1L; - this.runningDelay = 0L; - } - - /** - * Creates an AMQP connection string. - */ - private void createConnectionString() { - this.connectionString = "amqp://" + this.userName + ":" + this.password + "@" + - AndesClientConstants.CARBON_CLIENT_ID + "/" + - AndesClientConstants.CARBON_VIRTUAL_HOST_NAME + - "?brokerlist='tcp://" + - this.hostName + ":" + this.port + this.queryStringForConnection + "'"; - } - - /** - * Sets user name for the AMQP connection string - * - * @param userName The user name. - */ - public void setUserName(String userName) { - this.userName = userName; - this.createConnectionString(); - } - - /** - * Sets password for the AMQP connection string - * - * @param password The password - */ - public void setPassword(String password) { - this.password = password; - this.createConnectionString(); - } - - /** - * Sets host name for the AMQP connection string. - * Suppressing "UnusedDeclaration" warning as the client can be exported and used. - * - * @param hostName The host name - */ - @SuppressWarnings("UnusedDeclaration") - public void setHostName(String hostName) { - this.hostName = hostName; - this.createConnectionString(); - } - - /** - * Sets the AMQP connection string port. - * - * @param port the port. - */ - public void setPort(int port) { - this.port = port; - this.createConnectionString(); - } - - /** - * Gets the user name used in the AMQP connection string. - * - * @return The user name. - */ - public String getUserName() { - return this.userName; - } - - /** - * Gets the password used in the AMQP connection string. - * - * @return The password. - */ - public String getPassword() { - return this.password; - } - - /** - * Gets the host name used in the AMQP connection string. - * Suppressing "UnusedDeclaration" warning as the client can be exported and used. - * - * @return The host name. - */ - @SuppressWarnings("UnusedDeclaration") - public String getHostName() { - return this.hostName; - } - - /** - * Gets the port used in the AMQP connection string. - * - * @return The port name. - */ - public int getPort() { - return this.port; - } - - /** - * Gets the AMQP connection string. - * - * @return The connection string. - */ - public String getConnectionString() { - return connectionString; - } - - /** - * Sets the AMQP transport connection string. - * - * @param connectionString The connection string. - */ - public void setConnectionString(String connectionString) { - this.connectionString = connectionString; - } - - /** - * Gets the exchange type used for publishing/consuming jms messages. - * - * @return The exchange type - */ - public ExchangeType getExchangeType() { - return exchangeType; - } - - /** - * Sets the exchange type used for publishing/consuming jms messages Suppressing - * "UnusedDeclaration" as this is a configuration - * - * @param exchangeType The exchange type - */ - @SuppressWarnings("UnusedDeclaration") - public void setExchangeType(ExchangeType exchangeType) { - this.exchangeType = exchangeType; - } - - /** - * Gets the destination name for publishing/consuming jms messages. - * - * @return The destination name. - */ - public String getDestinationName() { - return destinationName; - } - - /** - * Sets the destination name for publishing/consuming jms messages. - * - * @param destinationName The destination name - */ - public void setDestinationName(String destinationName) { - this.destinationName = destinationName; - } - - /** - * Gets the number of console logging per message count - * - * @return The number of console logging per message count - */ - public long getPrintsPerMessageCount() { - return this.printsPerMessageCount; - } - - /** - * Sets the number of console logging per message count - * - * @param printsPerMessageCount The number of console logging per message count - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setPrintsPerMessageCount(long printsPerMessageCount) throws - AndesClientConfigurationException { - if (0 < printsPerMessageCount) { - this.printsPerMessageCount = printsPerMessageCount; - } else { - throw new AndesClientConfigurationException("Prints per message count cannot be less than one"); - } - } - - /** - * Gets the delay used in publishing/consuming messages in milliseconds. - * - * @return the delay used in publishing/consuming messages in milliseconds. - */ - public long getRunningDelay() { - return runningDelay; - } - - /** - * Sets the delay used in publishing/consuming messages in milliseconds. - * - * @param runningDelay The delay used in publishing/consuming messages in milliseconds. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setRunningDelay(long runningDelay) throws AndesClientConfigurationException { - if (0 <= runningDelay) { - this.runningDelay = runningDelay; - } else { - throw new AndesClientConfigurationException("Running delay cannot be less than 0"); - } - } - - /** - * Gets the file path to write statistics such as TPS, Average latency against Timestamp. - * - * @return The file path used for writing statistics. - */ - public String getFilePathToWriteStatistics() { - return filePathToWriteStatistics; - } - - /** - * Sets the file path to write statistics such as TPS, Average latency against Timestamp - * Suppressing "UnusedDeclaration" as this is a configuration - * - * @param filePathToPrintStatistics The file path used for writing statistics. - */ - @SuppressWarnings("UnusedDeclaration") - public void setFilePathToWriteStatistics(String filePathToPrintStatistics) { - this.filePathToWriteStatistics = filePathToPrintStatistics; - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return "ConnectionString=" + this.connectionString + "\n" + "ExchangeType=" + - this.exchangeType + "\n" + "PrintsPerMessageCount=" + this.printsPerMessageCount - +"\n" + "DestinationName=" + this.destinationName + - "\n" + "RunningDelay=" + this.runningDelay + "\n"; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSConsumerClientConfiguration.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSConsumerClientConfiguration.java deleted file mode 100644 index db1cce91..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSConsumerClientConfiguration.java +++ /dev/null @@ -1,551 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.configurations; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; -import org.apache.commons.lang.StringUtils; -import org.apache.log4j.Logger; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; - -/** - * This class represents the Andes client consumer configuration. The class contains properties - * related to JMS message consuming. - */ -public class AndesJMSConsumerClientConfiguration extends AndesJMSClientConfiguration { - /** - * The logger used in logging information, warnings, errors and etc. - */ - private static Logger log = Logger.getLogger(AndesJMSConsumerClientConfiguration.class); - - /** - * Message count at which the consumer un-subscribes. - */ - private long unSubscribeAfterEachMessageCount = Long.MAX_VALUE; - - /** - * Message count at which the session is rolled back. - */ - private long rollbackAfterEachMessageCount = Long.MAX_VALUE; - - /** - * Message count at which the session is committed. - */ - private long commitAfterEachMessageCount = Long.MAX_VALUE; - - /** - * Message count at which a message is acknowledge. - */ - private long acknowledgeAfterEachMessageCount = Long.MAX_VALUE; - - /** - * The file path to write received messages. - */ - private String filePathToWriteReceivedMessages = null; - - /** - * Maximum messages to receiver. - */ - private long maximumMessagesToReceived = Long.MAX_VALUE; - - /** - * Subscription ID for durable topics. - */ - private String subscriptionID = null; - - /** - * Whether the subscriber is durable. - */ - private boolean durable = false; - - /** - * The acknowledge mode for messages. - */ - private JMSAcknowledgeMode acknowledgeMode = JMSAcknowledgeMode.AUTO_ACKNOWLEDGE; - - /** - * Whether the consumer is asynchronously reading messages. Asynchronous message reading implies - * that it uses {@link javax.jms.MessageListener} to listen to receiving messages. Synchronous - * message reading will use a while loop inside a thread. - */ - private boolean async = false; - - /** - * JMS selectors string for filtering. - */ - private String selectors = null; - - /** - * Creates a consumer configuration with default values. - */ - public AndesJMSConsumerClientConfiguration() { - super(); - } - - /** - * Creates a consumer with a given exchange type and destination with default connection string. - * - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSConsumerClientConfiguration( - ExchangeType exchangeType, String destinationName) { - super(exchangeType, destinationName); - } - - /** - * Creates a consumer with a given host name, port for connection string and exchange type and - * destination name. - * - * @param hostName The host name for connection string. - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSConsumerClientConfiguration(String hostName, int port, - ExchangeType exchangeType, - String destinationName) { - super(hostName, port, exchangeType, destinationName); - } - - /** - * Creates a consumer with a given port for connection string and exchange type and - * destination name. - * - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSConsumerClientConfiguration( int port, - ExchangeType exchangeType, - String destinationName) { - super(port, exchangeType, destinationName); - } - - - /** - * Creates a consumer with a given username, password, for connection - * string and exchange type and destination name. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSConsumerClientConfiguration(String userName, String password, - ExchangeType exchangeType, - String destinationName) { - super(userName, password, exchangeType, destinationName); - } - - /** - * Creates a consumer with a given port, username, password, for connection - * string and exchange type and destination name. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSConsumerClientConfiguration(int port, String userName, String password, - ExchangeType exchangeType, - String destinationName) { - super(port, userName, password, exchangeType, destinationName); - } - - - /** - * Creates a consumer with a given user name, password, host name, port for connection - * string and exchange type and destination name. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param hostName The host name for the connection string. - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSConsumerClientConfiguration(String userName, String password, - String hostName, int port, - ExchangeType exchangeType, - String destinationName) { - super(userName, password, hostName, port, exchangeType, destinationName); - } - - /** - * Creates a configuration for a consumer using an xml file. - * - * @param xmlConfigFilePath The file path for the xml configuration file path. - * @throws AndesClientConfigurationException - */ - public AndesJMSConsumerClientConfiguration(String xmlConfigFilePath) - throws AndesClientConfigurationException { - super(xmlConfigFilePath); - try { - XMLConfiguration config = new XMLConfiguration(xmlConfigFilePath); - - this.unSubscribeAfterEachMessageCount = config.getLong("base.consumer.unSubscribeAfterEachMessageCount", Long.MAX_VALUE); - this.rollbackAfterEachMessageCount = config.getLong("base.consumer.rollbackAfterEachMessageCount", Long.MAX_VALUE); - this.commitAfterEachMessageCount = config.getLong("base.consumer.commitAfterEachMessageCount", Long.MAX_VALUE); - this.acknowledgeAfterEachMessageCount = config.getLong("base.consumer.acknowledgeAfterEachMessageCount", Long.MAX_VALUE); - this.filePathToWriteReceivedMessages = config.getString("base.consumer.filePathToWriteReceivedMessages", null); - this.maximumMessagesToReceived = config.getLong("base.consumer.maximumMessagesToReceived", Long.MAX_VALUE); - this.subscriptionID = config.getString("base.consumer.subscriptionID", null); - this.durable = config.getBoolean("base.consumer.durable", false); - this.async = config.getBoolean("base.consumer.async", true); - this.selectors = config.getString("base.consumer.selectors", null); - this.acknowledgeMode = JMSAcknowledgeMode.valueOf(config.getString("base.consumer.acknowledgeMode", "AUTO_ACKNOWLEDGE")); - } catch (ConfigurationException e) { - throw new AndesClientConfigurationException("Error in reading xml configuration file. Make sure the file exists.", e); - } catch (IllegalArgumentException e) { - throw new AndesClientConfigurationException("Invalid acknowledge mode used. Use a value either of the values : SESSION_TRANSACTED, AUTO_ACKNOWLEDGE, CLIENT_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE", e); - } - } - - /** - * The copy constructor for the JMS base class. This will copy all attributes defined in another - * configuration only for the base client. - * - * @param config The configuration to be copied. - */ - public AndesJMSConsumerClientConfiguration( - AndesJMSClientConfiguration config) { - super(config); - } - - /** - * Creates a JMS message consumer with a given AMQP transport connection string for SSL and a - * given exchange type and destination. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param hostName The host name for the connection string. - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - * @param sslAlias The ssl alias to use in ssl connection. - * @param trustStorePath The file path for trust store to use in ssl connection. - * @param trustStorePassword The trust store password to use in ssl connection. - * @param keyStorePath The file path for key store to use in ssl connection. - * @param keyStorePassword The key store password to use in ssl connection. - */ - public AndesJMSConsumerClientConfiguration(String userName, String password, String hostName, - int port, - ExchangeType exchangeType, String destinationName, - String sslAlias, String trustStorePath, - String trustStorePassword, String keyStorePath, - String keyStorePassword) { - super(userName, password, hostName, port, exchangeType, destinationName, sslAlias, - trustStorePath, trustStorePassword, keyStorePath, keyStorePassword); - - } - - /** - * Gets the message count to un-subscribe the consumer. - * - * @return The message count to un-subscribe the consumer. - */ - public long getUnSubscribeAfterEachMessageCount() { - return unSubscribeAfterEachMessageCount; - } - - /** - * Sets message count to un-subscribe the consumer. - * - * @param unSubscribeAfterEachMessageCount The message count to un-subscribe the consumer. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setUnSubscribeAfterEachMessageCount(long unSubscribeAfterEachMessageCount) - throws AndesClientConfigurationException { - if (0 < unSubscribeAfterEachMessageCount) { - this.unSubscribeAfterEachMessageCount = unSubscribeAfterEachMessageCount; - } else { - throw new AndesClientConfigurationException("Value cannot be less than 0"); - } - } - - /** - * Gets the message count at which the session should be rolled-back. - * - * @return The message count at which the session should be rolled-back. - */ - public long getRollbackAfterEachMessageCount() { - return rollbackAfterEachMessageCount; - } - - /** - * Sets message count at which the session should be rolled-back. - * - * @param rollbackAfterEachMessageCount The message count at which the session should be - * rolled-back. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setRollbackAfterEachMessageCount(long rollbackAfterEachMessageCount) - throws AndesClientConfigurationException { - if (0 < rollbackAfterEachMessageCount) { - this.rollbackAfterEachMessageCount = rollbackAfterEachMessageCount; - } else { - throw new AndesClientConfigurationException("Value cannot be less than 0"); - } - } - - /** - * Gets the message count at which the session should be committed. - * - * @return The message count at which the session should be committed. - */ - public long getCommitAfterEachMessageCount() { - return commitAfterEachMessageCount; - } - - /** - * Sets the message count at which the session should be committed. - * - * @param commitAfterEachMessageCount The message count at which the session should be - * committed. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setCommitAfterEachMessageCount(long commitAfterEachMessageCount) - throws AndesClientConfigurationException { - if (0 < commitAfterEachMessageCount) { - this.commitAfterEachMessageCount = commitAfterEachMessageCount; - } else { - throw new AndesClientConfigurationException("Value cannot be less than 0"); - } - } - - /** - * Gets the message count at which a message should be acknowledged after. - * - * @return The the message count at which a message should be acknowledged after. - */ - public long getAcknowledgeAfterEachMessageCount() { - return acknowledgeAfterEachMessageCount; - } - - /** - * Sets the message count at which a message should be acknowledged after. - * - * @param acknowledgeAfterEachMessageCount The the message count at which a message should be - * acknowledged after. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setAcknowledgeAfterEachMessageCount(long acknowledgeAfterEachMessageCount) - throws AndesClientConfigurationException { - if (0 < acknowledgeAfterEachMessageCount) { - this.acknowledgeAfterEachMessageCount = acknowledgeAfterEachMessageCount; - } else { - throw new AndesClientConfigurationException("Value cannot be less than 0"); - } - } - - /** - * Gets the file path where the received messages should be written to, - * - * @return The file path where the received messages should be written to, - */ - public String getFilePathToWriteReceivedMessages() { - return filePathToWriteReceivedMessages; - } - - /** - * Sets the file path where the received messages should be written to, - * - * @param filePathToWriteReceivedMessages The file path where the received messages should be - * written to, - */ - public void setFilePathToWriteReceivedMessages(String filePathToWriteReceivedMessages) { - this.filePathToWriteReceivedMessages = filePathToWriteReceivedMessages; - } - - /** - * Gets the maximum number of messages to received. - * - * @return The maximum number of messages to received. - */ - public long getMaximumMessagesToReceived() { - return this.maximumMessagesToReceived; - } - - /** - * Sets the maximum number of messages to received. - * - * @param maximumMessagesToReceived The maximum number of messages to received. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setMaximumMessagesToReceived(long maximumMessagesToReceived) - throws AndesClientConfigurationException { - if (0 < maximumMessagesToReceived) { - this.maximumMessagesToReceived = maximumMessagesToReceived; - } else { - throw new AndesClientConfigurationException("The maximum number of messages to receive " + - "cannot be less than 1"); - } - } - - /** - * Gets the subscription ID. - * - * @return The subscription ID. - */ - public String getSubscriptionID() { - return subscriptionID; - } - - /** - * Sets the subscription ID - * - * @param subscriptionID The subscription ID - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setSubscriptionID(String subscriptionID) throws AndesClientConfigurationException { - if (this.durable) { - if (StringUtils.isNotEmpty(subscriptionID)) { - this.subscriptionID = subscriptionID; - } else { - throw new AndesClientConfigurationException("Subscription ID cannot be null or empty " + - "for an durable topic"); - } - } else { - this.subscriptionID = subscriptionID; - log.warn("Setting subscription ID for non-durable topics. Subscription ID is not " + - "necessary for non-durable topics or queues"); - } - } - - /** - * Checks whether the subscriber/consumer is durable. - * - * @return true if subscriber/consumer is durable, false otherwise. - */ - public boolean isDurable() { - return durable; - } - - /** - * Sets values for a durable subscription - * - * @param durable True if subscription is durable, false otherwise. - * @param subscriptionID The subscription ID. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setDurable(boolean durable, String subscriptionID) throws - AndesClientConfigurationException { - if (durable) { - if (StringUtils.isNotEmpty(subscriptionID)) { - this.subscriptionID = subscriptionID; - } else { - throw new AndesClientConfigurationException("Subscription ID cannot be null or empty " + - "for an durable topic"); - } - } - - this.durable = durable; - } - - /** - * Gets acknowledge mode for messages. - * - * @return The acknowledge mode for messages. - */ - public JMSAcknowledgeMode getAcknowledgeMode() { - return acknowledgeMode; - } - - /** - * Sets acknowledge mode for messages. - * - * @param acknowledgeMode The acknowledge mode for messages. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setAcknowledgeMode(JMSAcknowledgeMode acknowledgeMode) - throws AndesClientConfigurationException { - this.acknowledgeMode = acknowledgeMode; - } - - /** - * Checks whether consumer is asynchronously reading messages. - * - * @return true if messages are read asynchronously, false otherwise. Asynchronously message - * reading implies that it uses {@link javax.jms.MessageListener} to listen to receiving - * messages. - */ - public boolean isAsync() { - return async; - } - - /** - * Sets the consumer to read message asynchronously. Asynchronously message - * reading implies that it uses {@link javax.jms.MessageListener} to listen to receiving - * messages. - * Suppressing "UnusedDeclaration" as this is a configuration - * - * @param async true if messages should be read asynchronously, false otherwise. - */ - @SuppressWarnings("UnusedDeclaration") - public void setAsync(boolean async) { - this.async = async; - } - - /** - * Gets the selectors query used by the consumer for filtering. - * - * @return The selectors query used by the consumer for filtering. - */ - public String getSelectors() { - return selectors; - } - - /** - * Sets the selectors query used by the consumer for filtering. - * - * @param selectors The selectors query used by the consumer for filtering. - */ - public void setSelectors(String selectors) { - this.selectors = selectors; - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return super.toString() + - "UnSubscribeAfterEachMessageCount=" + this.unSubscribeAfterEachMessageCount + "\n" + - "RollbackAfterEachMessageCount=" + this.rollbackAfterEachMessageCount + "\n" + - "CommitAfterEachMessageCount=" + this.commitAfterEachMessageCount + "\n" + - "AcknowledgeAfterEachMessageCount=" + this.acknowledgeAfterEachMessageCount + "\n" + - "FilePathToWriteReceivedMessages=" + this.filePathToWriteReceivedMessages + "\n" + - "MaximumMessagesToReceived=" + this.maximumMessagesToReceived + "\n" + - "SubscriptionID=" + this.subscriptionID + "\n" + - "Durable=" + this.durable + "\n" + - "AcknowledgeMode=" + this.acknowledgeMode + "\n" + - "Async=" + this.async + "\n" + - "Selectors=" + this.selectors + "\n"; - } - - /** - * {@inheritDoc} - */ - @Override - public AndesJMSConsumerClientConfiguration clone() throws CloneNotSupportedException { - return (AndesJMSConsumerClientConfiguration) super.clone(); - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSPublisherClientConfiguration.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSPublisherClientConfiguration.java deleted file mode 100644 index 1d559b72..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/AndesJMSPublisherClientConfiguration.java +++ /dev/null @@ -1,426 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.configurations; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSMessageType; - -import java.io.File; -import java.io.FileNotFoundException; -import java.util.ArrayList; -import java.util.List; - -/** - * This class represents the Andes client publisher configuration. The class contains properties - * related to JMS message publishing/sending. - */ -public class AndesJMSPublisherClientConfiguration extends AndesJMSClientConfiguration { - - /** - * File path to read a string content which would be used to as message content when publishing. - */ - private String readMessagesFromFilePath = null; - - /** - * JMS message type. Text will be used as default message type. - */ - private JMSMessageType jmsMessageType = JMSMessageType.TEXT; - - /** - * Number of messages to be sent by the publisher. - */ - private long numberOfMessagesToSend = 10L; - - /** - * The message expiry time. - */ - private long jmsMessageExpiryTime = 0L; - - /** - * File path to write messages that are being published - */ - private String filePathToWritePublishedMessages = null; - - /** - * Whether the session needs to be transactional or not. - */ - private boolean transactionalSession; - - /** - * List of JMS Header properties to set when publishing message - */ - private List JMSHeaderProperties; - - /** - * Holds JMSType property to set for JMS messages published - */ - private String JMSType; - - /** - * Creates a connection string with default properties. - */ - public AndesJMSPublisherClientConfiguration() { - super(); - } - - /** - * Creates a publisher with a given exchange type and destination with default connection - * string. - * - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSPublisherClientConfiguration( - ExchangeType exchangeType, String destinationName) { - super(exchangeType, destinationName); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a publisher with a given host name, port for connection string and exchange type and - * destination name. - * - * @param hostName The host name for connection string. - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSPublisherClientConfiguration(String hostName, int port, - ExchangeType exchangeType, - String destinationName) { - super(hostName, port, exchangeType, destinationName); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a publisher with a given host name, port for connection string and exchange type and - * destination name. - * - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSPublisherClientConfiguration(int port, - ExchangeType exchangeType, - String destinationName) { - super(port, exchangeType, destinationName); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a publisher with a given username, password, for connection - * string and exchange type and destination name. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSPublisherClientConfiguration(String userName, String password, - ExchangeType exchangeType, - String destinationName) { - super(userName, password, exchangeType, destinationName); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a publisher with a given port, username, password, for connection - * string and exchange type and destination name. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSPublisherClientConfiguration(int port, String userName, String password, - ExchangeType exchangeType, - String destinationName) { - super(port, userName, password, exchangeType, destinationName); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a publisher with a given user name, password, host name, password for connection - * string and exchange type and destination name. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param hostName The host name for the connection string. - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - */ - public AndesJMSPublisherClientConfiguration(String userName, String password, - String hostName, int port, - ExchangeType exchangeType, - String destinationName) { - super(userName, password, hostName, port, exchangeType, destinationName); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a configuration for a publisher using an xml file. - * - * @param xmlConfigFilePath The file path for the xml configuration file path. - * @throws AndesClientConfigurationException - */ - public AndesJMSPublisherClientConfiguration(String xmlConfigFilePath) - throws AndesClientConfigurationException { - super(xmlConfigFilePath); - try { - XMLConfiguration config = new XMLConfiguration(xmlConfigFilePath); - - numberOfMessagesToSend = config.getLong("base.publisher.numberOfMessagesToSend", 10L); - jmsMessageExpiryTime = config.getLong("base.publisher.jmsMessageExpiryTime", 0L); - readMessagesFromFilePath = config.getString("base.publisher.readMessagesFromFilePath", null); - jmsMessageType = JMSMessageType.valueOf(config.getString("base.publisher.jmsMessageType", "TEXT")); - filePathToWritePublishedMessages = config.getString("base.publisher.filePathToWritePublishedMessages", null); - JMSHeaderProperties = new ArrayList(5); - } catch (ConfigurationException e) { - throw new AndesClientConfigurationException("Error in reading xml configuration file. Make sure the file exists.", e); - } catch (IllegalArgumentException e) { - throw new AndesClientConfigurationException("Invalid message type used. Use either 'TEXT', 'BYTE', 'MAP', 'OBJECT' or 'STREAM'.", e); - } - } - - /** - * The copy constructor for the JMS base class. This will copy all attributes defined in another - * configuration only for the base client. - * - * @param config The configuration to be copied. - */ - public AndesJMSPublisherClientConfiguration( - AndesJMSClientConfiguration config) { - super(config); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Creates a JMS message publisher with a given AMQP transport connection string for SSL and a - * given exchange type and destination. - * - * @param userName The user name for the connection string. - * @param password The password for the connection string. - * @param hostName The host name for the connection string. - * @param port The port for the connection string. - * @param exchangeType The exchange type. - * @param destinationName The destination name. - * @param sslAlias The ssl alias to use in ssl connection. - * @param trustStorePath The file path for trust store to use in ssl connection. - * @param trustStorePassword The trust store password to use in ssl connection. - * @param keyStorePath The file path for key store to use in ssl connection. - * @param keyStorePassword The key store password to use in ssl connection. - */ - public AndesJMSPublisherClientConfiguration(String userName, String password, String hostName, - int port, - ExchangeType exchangeType, String destinationName, - String sslAlias, String trustStorePath, - String trustStorePassword, String keyStorePath, - String keyStorePassword) { - super(userName, password, hostName, port, exchangeType, destinationName, sslAlias, - trustStorePath, trustStorePassword, keyStorePath, keyStorePassword); - JMSHeaderProperties = new ArrayList(5); - } - - /** - * Gets the file path to read a string content which would be used to as message content when - * publishing. - * - * @return The file path. - */ - public String getReadMessagesFromFilePath() { - return readMessagesFromFilePath; - } - - /** - * Sets the file path to read a string content which would be used to as message content when - * publishing. - * - * @param readMessagesFromFilePath The file path. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws FileNotFoundException - */ - public void setReadMessagesFromFilePath(String readMessagesFromFilePath) - throws AndesClientConfigurationException, FileNotFoundException { - File messagesFilePath = new File(readMessagesFromFilePath); - if (messagesFilePath.exists() && !messagesFilePath.isDirectory()) { - this.readMessagesFromFilePath = readMessagesFromFilePath; - } else { - throw new FileNotFoundException("File is missing : " + messagesFilePath); - } - } - - /** - * Gets JMS message type. - * - * @return JMS message type. - */ - public JMSMessageType getJMSMessageType() { - return jmsMessageType; - } - - /** - * Set a header property to the messages published - * - * @param key key of the header - * @param value value of the header - * @param type type of the header (Boolean, Integer, Long etc) - */ - public void setJMSHeaderProperty(String key, Object value, JMSHeaderPropertyType type) { - JMSHeaderProperties.add(new JMSHeaderProperty(key, value, type)); - } - - /** - * Set JMS Type to be set for publishing messages - * @link https://docs.oracle.com/javaee/6/api/javax/jms/Message.html#setJMSType(java.lang.String) - * - * @param jmsType jmsType to set - */ - public void setJMSType(String jmsType) { - this.JMSType = jmsType; - } - - /** - * Get JMS type - * - * @return JMS type as a string - */ - public String getJMSType() { - return JMSType; - } - - /** - * Sets JMS message type. - * - * @param jmsMessageType JMS message type - */ - public void setJMSMessageType(JMSMessageType jmsMessageType) { - this.jmsMessageType = jmsMessageType; - } - - /** - * Gets the number of messages to be sent by the publisher. - * - * @return The number of messages. - */ - public long getNumberOfMessagesToSend() { - return numberOfMessagesToSend; - } - - /** - * Sets the number of messages to be sent by the publisher - * - * @param numberOfMessagesToSend The number of messages. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setNumberOfMessagesToSend(long numberOfMessagesToSend) - throws AndesClientConfigurationException { - if (0 < numberOfMessagesToSend) { - this.numberOfMessagesToSend = numberOfMessagesToSend; - } else { - throw new AndesClientConfigurationException("The number of messages to send cannot be less" + - " than 1"); - } - } - - /** - * Gets the file path where published messages are written. - * - * @return The file path. - */ - public String getFilePathToWritePublishedMessages() { - return filePathToWritePublishedMessages; - } - - /** - * Sets the file path to write messages that are being published by the client. - * Suppressing "UnusedDeclaration" warning as the client can be exported and used. - * - * @param filePathToWritePublishedMessages The file path - */ - @SuppressWarnings("UnusedDeclaration") - public void setFilePathToWritePublishedMessages(String filePathToWritePublishedMessages) { - this.filePathToWritePublishedMessages = filePathToWritePublishedMessages; - } - - /** - * Gets the messages expiry time. - * - * @return The message expiry time. - */ - public long getJMSMessageExpiryTime() { - return jmsMessageExpiryTime; - } - - /** - * Sets the message expiry time. - * - * @param jmsMessageExpiryTime The message expiry time. - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - */ - public void setJMSMessageExpiryTime(long jmsMessageExpiryTime) throws - AndesClientConfigurationException { - if (0 <= jmsMessageExpiryTime) { - this.jmsMessageExpiryTime = jmsMessageExpiryTime; - } else { - throw new AndesClientConfigurationException("Message expiry time cannot be less than 0"); - } - } - - /** - * {@inheritDoc} - */ - @Override - public String toString() { - return super.toString() + - "ReadMessagesFromFilePath=" + this.readMessagesFromFilePath + "\n" + - "JmsMessageType=" + this.jmsMessageType + "\n" + - "NumberOfMessagesToSend=" + this.numberOfMessagesToSend + "\n" + - "JmsMessageExpiryTime=" + this.jmsMessageExpiryTime + "\n"; - } - - /** - * {@inheritDoc} - */ - @Override - public AndesJMSPublisherClientConfiguration clone() throws CloneNotSupportedException { - return (AndesJMSPublisherClientConfiguration) super.clone(); - } - - /** - * Whether the session needs to be transactional or not. - */ - public boolean isTransactionalSession() { - return transactionalSession; - } - - /** - * Set the session transactional. This is for publishers - * @param transactionalSession true if session needs to be transactional and false otherwise - */ - public void setTransactionalSession(boolean transactionalSession) { - this.transactionalSession = transactionalSession; - } - - public List getJMSHeaderProperties() { - return JMSHeaderProperties; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/JMSHeaderProperty.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/JMSHeaderProperty.java deleted file mode 100644 index a25b66f0..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/JMSHeaderProperty.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - * / - */ - -package org.wso2.mb.integration.common.clients.configurations; - -/** - * This class represents configuration of a JMS Header property. JMS sender reads them and set - * when sending a JMS message to the provider - */ -public class JMSHeaderProperty { - - private String key; - - private Object value; - - private JMSHeaderPropertyType type; - - /** - * Create a new JMSHeaderProperty. - * - * @param key key of the header to be set to message - * @param value value of the header to be set to message - * @param type type of the header to be set to message - */ - public JMSHeaderProperty(String key, Object value, JMSHeaderPropertyType type) { - this.key = key; - this.value = value; - this.type = type; - } - - /** - * Get Key of the header property - * - * @return key as a string - */ - public String getKey() { - return key; - } - - /** - * Get value of the header property - * - * @return value as a Object - */ - public Object getValue() { - return value; - } - - /** - * Get property of the header property. Long, String, Integer etc - * - * @return Property type - */ - public JMSHeaderPropertyType getType() { - return type; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/JMSHeaderPropertyType.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/JMSHeaderPropertyType.java deleted file mode 100644 index 98586f97..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/configurations/JMSHeaderPropertyType.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - * / - */ - -package org.wso2.mb.integration.common.clients.configurations; - -/** - * Keeps the type of the JMS header property. According to JMS spec headers of different types - * can be set - */ -public enum JMSHeaderPropertyType { - - OBJECT, - - SHORT, - - STRING, - - INTEGER, - - LONG, - - BOOLEAN, - - BYTE, - - DOUBLE, - - FLOAT -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/exceptions/AndesClientConfigurationException.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/exceptions/AndesClientConfigurationException.java deleted file mode 100644 index de23840d..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/exceptions/AndesClientConfigurationException.java +++ /dev/null @@ -1,73 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.exceptions; - -/** - * Exception class for andes client configuration. - */ -public class AndesClientConfigurationException extends Exception { - - /** - * Error message for exception - */ - public String errorMessage; - - /** - * Creates Andes configuration exception - */ - public AndesClientConfigurationException() { - } - - /** - * Creates Andes configuration exception with error message - * - * @param message Error message - */ - public AndesClientConfigurationException(String message) { - super(message); - errorMessage = message; - } - - /** - * Creates Andes configuration exception with error message and throwable - * - * @param message Error message - * @param cause The throwable - */ - public AndesClientConfigurationException(String message, Throwable cause) { - super(message, cause); - errorMessage = message; - } - - /** - * Creates Andes configuration exception with throwable. - * - * @param cause The throwable - */ - public AndesClientConfigurationException(Throwable cause) { - super(cause); - } - - /** - * {@inheritDoc} - */ - @Override - public String getMessage() { - return errorMessage; - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/exceptions/AndesClientException.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/exceptions/AndesClientException.java deleted file mode 100644 index 47350125..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/exceptions/AndesClientException.java +++ /dev/null @@ -1,55 +0,0 @@ -package org.wso2.mb.integration.common.clients.exceptions; - -/** - * Exception class for andes client. - */ -public class AndesClientException extends Exception { - /** - * Error message for exception - */ - public String errorMessage; - - /** - * Creates Andes exception - */ - public AndesClientException() { - } - - /** - * Creates Andes exception with error message - * - * @param message Error message - */ - public AndesClientException(String message) { - super(message); - errorMessage = message; - } - - /** - * Creates Andes exception with error message and throwable - * - * @param message Error message - * @param cause The throwable - */ - public AndesClientException(String message, Throwable cause) { - super(message, cause); - errorMessage = message; - } - - /** - * Creates Andes exception with throwable. - * - * @param cause The throwable - */ - public AndesClientException(Throwable cause) { - super(cause); - } - - /** - * {@inheritDoc} - */ - @Override - public String getMessage() { - return errorMessage; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/AndesAdminClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/AndesAdminClient.java deleted file mode 100644 index b021f9d9..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/AndesAdminClient.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.clients; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.andes.stub.AndesAdminServiceStub; -import org.wso2.carbon.andes.stub.admin.types.Message; -import org.wso2.carbon.andes.stub.admin.types.Queue; -import org.wso2.carbon.andes.stub.admin.types.QueueRolePermission; -import org.wso2.mb.integration.common.clients.operations.clients.utils.AuthenticateStubUtil; - -import java.rmi.RemoteException; - -/** - * Andes Admin Client is a client which is used to contact the Andes Admin services - */ -public class AndesAdminClient { - String backendUrl = null; - String sessionCookie = null; - AndesAdminServiceStub stub = null; - public static final String PUBLISHER_ROLE = "publisher"; - - /** - * Initializes Andes Admin Client - * - * @param backendUrl the backend url - * @param sessionCookie the session cookie string - * @throws AxisFault - */ - public AndesAdminClient(String backendUrl, String sessionCookie) throws AxisFault { - - this.backendUrl = backendUrl + "AndesAdminService"; - this.sessionCookie = sessionCookie; - stub = new AndesAdminServiceStub(this.backendUrl); - AuthenticateStubUtil.authenticateStub(sessionCookie, stub); - } - - /** - * Creates a new queue - * - * @param queue new queue name - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - public void createQueue(String queue) - throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - // Add permission to be able to publish - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(PUBLISHER_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - stub.addQueueAndAssignPermission(queue, new QueueRolePermission[]{queueRolePermission}); - } - - /** - * Gets messages in a queue - * - * @param queue the queue name - * @param startingIndex starting index of the messages to be returned - * @param maximumMessageCount maximum number of messages to return - * @return an array of messages - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - public Message[] browseQueue(String queue, int startingIndex, int maximumMessageCount) - throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - return stub.browseQueue(queue, startingIndex, maximumMessageCount); - } - - /** - * Deletes a queue - * - * @param queue the queue name - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - public void deleteQueue(String queue) - throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - stub.deleteQueue(queue); - } - - /** - * Deletes all messages in a queue - * - * @param queue the name of the queue - * @throws RemoteException - */ - public void purgeQueue(String queue) - throws RemoteException, AndesAdminServiceBrokerManagerAdminException { - stub.purgeMessagesOfQueue(queue); - } - - /** - * Get queue object by queue name - * - * @param name the name of the queue - * @return a queue - * @throws RemoteException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - public Queue getQueueByName(String name) - throws RemoteException, AndesAdminServiceBrokerManagerAdminException { - return stub.getQueueByName(name); - } - - /** - * Updating permissions for a queue. Permissions may include publish, consume etc - * - * @param queueName queue name - * @param permissions new permissions - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - public void updatePermissionForQueue(String queueName, QueueRolePermission permissions) - throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - stub.updatePermission(queueName, new QueueRolePermission[]{permissions}); - } - - /** - * Adding session cookie to service client options - * - * @param client the service client - * @throws AxisFault - */ - private void configureCookie(ServiceClient client) throws AxisFault { - if (sessionCookie != null) { - Options option = client.getOptions(); - option.setManageSession(true); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, - sessionCookie); - } - } - - /** - * Get dead letter channel queue - * - * @return queue - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws java.rmi.RemoteException - */ - public Queue getDlcQueue() throws AndesAdminServiceBrokerManagerAdminException, - java.rmi.RemoteException { - return stub.getDLCQueue(); - } - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/TopicAdminClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/TopicAdminClient.java deleted file mode 100644 index d4268b9f..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/TopicAdminClient.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.clients; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.wso2.carbon.andes.event.stub.core.TopicNode; -import org.wso2.carbon.andes.event.stub.core.TopicRolePermission; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceStub; - -import java.rmi.RemoteException; - -/** - * Topic Admin Client is a client which is used to contact the Topic Admin services - */ -public class TopicAdminClient { - - String backendUrl = null; - String SessionCookie = null; - AndesEventAdminServiceStub stub = null; - - /** - * Initializes Topic Admin Client - * - * @param backendUrl the backend url - * @param sessionCookie the session cookie string - * @throws AxisFault - */ - public TopicAdminClient(String backendUrl, String sessionCookie) throws AxisFault { - - this.backendUrl = backendUrl + "AndesEventAdminService.AndesEventAdminServiceHttpsSoap12Endpoint"; - this.SessionCookie = sessionCookie; - stub = new AndesEventAdminServiceStub(this.backendUrl); - configureCookie(stub._getServiceClient()); - - } - - /** - * Adds a new topic - * - * @param newTopicName new topic name - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - public void addTopic(String newTopicName) - throws AndesEventAdminServiceEventAdminException, RemoteException { - stub.addTopic(newTopicName); - } - - /** - * Removes a topic - * - * @param topicName topic name - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - public void removeTopic(String topicName) - throws AndesEventAdminServiceEventAdminException, RemoteException { - stub.removeTopic(topicName); - } - - /** - * Get topic node by topic name - * - * @param topicName the topic name - * @return a topic node - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - public TopicNode getTopicByName(String topicName) - throws AndesEventAdminServiceEventAdminException, RemoteException { - TopicNode[] topicNodes = stub.getAllTopics().getChildren(); - if (topicNodes != null && topicNodes.length > 0) { - for (TopicNode topicNode : topicNodes) { - if (topicNode.getTopicName().equalsIgnoreCase(topicName)) { - return topicNode; - } - } - } - - return null; - } - - /** - * Updating permissions for a topic. Permissions may include publish, consume etc - * - * @param topicName topic name - * @param permissions new permissions - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - public void updatePermissionForTopic(String topicName, TopicRolePermission permissions) - throws AndesEventAdminServiceEventAdminException, RemoteException { - stub.updatePermission(topicName, new TopicRolePermission[]{permissions}); - } - - /** - * Adding session cookie to service client options - * - * @param client the service client - * @throws AxisFault - */ - private void configureCookie(ServiceClient client) throws AxisFault { - if (SessionCookie != null) { - Options option = client.getOptions(); - option.setManageSession(true); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, - SessionCookie); - } - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/utils/AuthenticateStubUtil.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/utils/AuthenticateStubUtil.java deleted file mode 100644 index 4423f708..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/clients/utils/AuthenticateStubUtil.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.clients.operations.clients.utils; - -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.axis2.client.Stub; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.utils.CarbonUtils; - -/** - * This class is used to authenticate a web services so that it's stubs can be used. - * @see AuthenticateStubUtil - * for more other mehtods. - */ -public class AuthenticateStubUtil { - - /** - * Info logger. - */ - private static final Log log = LogFactory.getLog(AuthenticateStubUtil.class); - - /** - * Stub authentication method - * - * @param stub valid stub - * @param sessionCookie session cookie - */ - public static void authenticateStub(String sessionCookie, Stub stub) { - long soTimeout = 5 * 60 * 1000; // Three minutes - - ServiceClient client = stub._getServiceClient(); - Options option = client.getOptions(); - option.setManageSession(true); - option.setTimeOutInMilliSeconds(soTimeout); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, sessionCookie); - if (log.isDebugEnabled()) { - log.debug("AuthenticateStub : Stub created with session " + sessionCookie); - } - } - - /** - * Authenticate the given web service stub against the Product user manager. This - * will make it possible to use the stub for invoking Product admin services. - * - * @param stub Axis2 service stub which needs to be authenticated - */ - public static void authenticateStub(String userName, String password, Stub stub) { - CarbonUtils.setBasicAccessSecurityHeaders(userName, password, stub._getServiceClient()); - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/AndesMQTTAsyncClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/AndesMQTTAsyncClient.java deleted file mode 100644 index 27cfcc15..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/AndesMQTTAsyncClient.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.async; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.*; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.operations.mqtt.blocking.AndesMQTTBlockingClient; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -/** - * Asynchronous publish/subscribe MQTT client. - *

- * Each asynchronous publisher/subscriber should extend from this. - */ -public abstract class AndesMQTTAsyncClient extends AndesMQTTClient { - - private final static Log log = LogFactory.getLog(AndesMQTTBlockingClient.class); - - // Basic asynchronous mqtt client - protected MqttAsyncClient mqttClient; - - /** - * Create a mqtt client initializing mqtt options. - * - * @param configuration MQTT configurations - * @param clientID The unique client Id - * @param topic Topic to subscribe/publish to - * @param qos The quality of service - * @param callbackHandler Callback Handler to handle receiving messages/message sending ack - * @throws MqttException - */ - public AndesMQTTAsyncClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, CallbackHandler callbackHandler) throws MqttException { - super(configuration, clientID, topic, qos, callbackHandler); - - // Construct MQTT client - mqttClient = new MqttAsyncClient(this.brokerUrl, clientID, dataStore); - - // Connect to the MQTT server - connect(); - - mqttClient.setCallback(callbackHandler); - } - - /** - * Publish message to broker using mqtt asynchronously. - * - * @param payload Data to send - * @param noOfMessages Number of message to send - * @throws MqttException - */ - protected void publish(byte[] payload, int noOfMessages) throws MqttException { - log.info("Publishing to topic : " + topic + " on qos : " + qos); - - if (null != payload) { - - // Create and configure message - MqttMessage message = new MqttMessage(payload); - message.setQos(qos.getValue()); - message.setRetained(retain); - - for (int i = 0; i < noOfMessages; i++) { - // Send message to server, control is either returned or blocked until it has been delivered to the - // server depending on the MqttClient type (Blocking/Async)meeting the specified quality of service. - mqttClient.publish(topic, message); - } - } - } - - /** - * Subscribe to a topic in an asynchronous manner. - * - * @throws MqttException - */ - public void subscribe() throws MqttException { - log.info("Subscribing to topic \"" + topic + "\" qos " + qos); - IMqttToken subscriptionToken = mqttClient.subscribe(topic, qos.getValue()); - - // Wait until subscription is made. Otherwise test results will be unpredictable - subscriptionToken.waitForCompletion(); - - //Will need to wait to receive all messages - subscriber closes on disconnect - } - - /** - * Asynchronously subscribe to a given topic. - * - * @param topicName The topic to subscribe to - * @throws MqttException - */ - @Override - public void subscribe(String topicName) throws MqttException { - log.info("Subscribing to topic \"" + topicName + "\" qos " + qos); - IMqttToken subscriptionToken = mqttClient.subscribe(topicName, qos.getValue()); - - // Wait until subscription is made. Otherwise test results will be unpredictable - subscriptionToken.waitForCompletion(); - } - - /** - * Un-subscribe from the topic. - * - * @throws MqttException - */ - public void unsubscribe() throws MqttException { - IMqttToken unsubscriptionToken = mqttClient.unsubscribe(topic); - - // Wait until un-subscription is successful. Otherwise test results will be unpredictable. - unsubscriptionToken.waitForCompletion(); - log.info("Subscriber for topic : " + topic + " un-subscribed"); - } - - /** - * {@inheritDoc} - */ - @Override - public void unsubscribe(String topic) throws MqttException { - IMqttToken unsubscriptionToken = mqttClient.unsubscribe(topic); - - // Wait until un-subscription is successful. Otherwise test results will be unpredictable. - unsubscriptionToken.waitForCompletion(); - log.info("Subscriber for topic : " + topic + " un-subscribed"); - } - - /** - * Shutdown the mqtt client. Call this whenever the system exits, test cases are finished or disconnect hook is - * called. - * - * @throws MqttException - */ - public void disconnect() throws MqttException { - if (isConnected()) { - IMqttToken disconnectionToken = mqttClient.disconnect(); - - // Wait until disconnect is complete - disconnectionToken.waitForCompletion(); - log.info("Client " + mqttClientID + " Disconnected"); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void connect() throws MqttException { - if (!isConnected()) { - log.info("Connecting to " + brokerUrl + " with client ID " + mqttClientID); - IMqttToken connectionToken = mqttClient.connect(connectionOptions); - - // Wait until connection is complete. Otherwise test results will be unpredictable - connectionToken.waitForCompletion(); - - log.info("Client " + mqttClientID + " Connected"); - } - } - - /** - * Use this to validate if connection to server is still active. - * - * @return Is MQTT client connected to the server - */ - public boolean isConnected() { - return mqttClient.isConnected(); - } - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/MQTTAsyncPublisherClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/MQTTAsyncPublisherClient.java deleted file mode 100644 index 1097616c..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/MQTTAsyncPublisherClient.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.async; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -import java.util.Collections; -import java.util.List; - -/** - * Asynchronous MQTT publisher client. - */ -public class MQTTAsyncPublisherClient extends AndesMQTTAsyncClient { - - /** The payload to send as the message content **/ - private byte[] messagePayLoad; - - /** The number of messages to send **/ - private int noOfMessages; - - private static final Log log = LogFactory.getLog(MQTTAsyncPublisherClient.class); - - /** - * Initialize publishing to mqtt. - * - * @param configuration MQTT configurations - * @param clientID Unique mqtt client Id - * @param topic Topic to publish to - * @param qos Quality of service - * @param payload Data to send - * @param noOfMessages Number of message to send - * @throws MqttException - */ - public MQTTAsyncPublisherClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, byte[] payload, int noOfMessages) throws MqttException { - super(configuration, clientID, topic, qos, new CallbackHandler()); - messagePayLoad = payload; - this.noOfMessages = noOfMessages; - } - - /** - * Start the publisher to publish to mqtt. - */ - @Override - public void run() { - try { - publish(messagePayLoad, noOfMessages); - } catch (MqttException e) { - log.error("Error publishing messages to " + getTopic() + " from " + getMqttClientID(), e); - } - } - - /** - * Return subscription status as false since this is the publishing client. - * - * @return False - */ - @Override - public boolean isSubscribed() { - return false; - } - - /** - * Return empty as this is the publisher client and does not accept any messages. - * - * @return empty message list - */ - @Override - public List getReceivedMessages() { - return Collections.emptyList(); - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/MQTTAsyncSubscriberClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/MQTTAsyncSubscriberClient.java deleted file mode 100644 index 488e437e..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/async/MQTTAsyncSubscriberClient.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.async; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -import java.util.List; - -/** - * Asynchronous MQTT subscriber client. - */ -public class MQTTAsyncSubscriberClient extends AndesMQTTAsyncClient { - - private static final Log log = LogFactory.getLog(MQTTAsyncSubscriberClient.class); - - // Listening to the server for message or not - private boolean subscribed = false; - - /** - * Initialize subscribing to mqtt. - * - * @param configuration MQTT configurations - * @param clientID Unique mqtt client Id - * @param topic Topic to subscribe to - * @param qos Quality of Service - * @param saveMessages Save receiving messages - * @throws MqttException - */ - public MQTTAsyncSubscriberClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, boolean saveMessages) throws MqttException { - super(configuration, clientID, topic, qos, new CallbackHandler(saveMessages)); - } - - /** - * Get all the received messages through this client. - * Use this if want to validate message content. - * - * @return Received messages. - */ - public List getReceivedMessages() { - return getCallbackHandler().getReceivedMessages(); - } - - - /** - * Invokes client and subscribes to the given topic. - */ - @Override - public void run() { - try { - subscribe(); - subscribed = true; - } catch (MqttException e) { - log.error("Error subscribing to topic " + getTopic() + " from client " + getMqttClientID(), e); - } - } - - - /** - * Gracefully disconnect the client after un-subscribing to subscribed topic. - * Called through ClientEngine disconnect. - * - * @throws MqttException - */ - @Override - public void disconnect() throws MqttException { - CallbackHandler callbackHandler = getCallbackHandler(); - if (isConnected()) { - if (null != callbackHandler) { - log.info("No of messages received for client " + getMqttClientID() + " : " + callbackHandler - .getReceivedMessageCount()); - } - - unsubscribe(); - subscribed = false; - mqttClient.disconnect(); - log.info("Client " + getMqttClientID() + " Disconnected"); - } - } - - /** - * Check if the subscriber is subscribed to a topic - * - * @return Is Subscribed - */ - public boolean isSubscribed() { - return subscribed; - } - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/AndesMQTTBlockingClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/AndesMQTTBlockingClient.java deleted file mode 100644 index f2350358..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/AndesMQTTBlockingClient.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.blocking; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttClient; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -/** - * Blocking(synchronous) publish/subscribe MQTT client. - *

- * Each blocking publisher/subscriber should extend from this. - */ -public abstract class AndesMQTTBlockingClient extends AndesMQTTClient { - - private final static Log log = LogFactory.getLog(AndesMQTTBlockingClient.class); - - protected MqttClient mqttClient; - - /** - * Create a mqtt client initializing mqtt options. - * - * @param configuration MQTT configurations - * @param clientID The unique client Id - * @param topic Topic to subscribe/publish to - * @param qos The quality of service - * @param callbackHandler Callback Handler to handle receiving messages/message sending ack - * @throws MqttException - */ - public AndesMQTTBlockingClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, CallbackHandler callbackHandler) throws MqttException { - super(configuration, clientID, topic, qos, callbackHandler); - - // Construct MQTT client - mqttClient = new MqttClient(this.brokerUrl, clientID, dataStore); - - // Connect to the MQTT server - connect(); - - mqttClient.setCallback(callbackHandler); - } - - /** - * Publish message to broker using mqtt synchronously. - * - * @param payload Data to send - * @param noOfMessages Number of message to send - * @throws MqttException - */ - protected void publish(byte[] payload, int noOfMessages) throws MqttException { - log.info("Publishing to topic : " + topic + " on qos : " + qos); - - if (null != payload) { - - // Create and configure message - MqttMessage message = new MqttMessage(payload); - message.setQos(qos.getValue()); - message.setRetained(retain); - - for (int i = 0; i < noOfMessages; i++) { - // Send message to server, control is either returned or blocked until it has been delivered to the - // server depending on the MqttClient type (Blocking/Async)meeting the specified quality of service. - mqttClient.publish(topic, message); - } - } - } - - /** - * Subscribe to the requested topic in a synchronous manner. - * - * @throws MqttException - */ - public void subscribe() throws MqttException { - log.info("Subscribing to topic \"" + topic + "\" qos " + qos); - mqttClient.subscribe(topic, qos.getValue()); - - //Will need to wait to receive all messages - subscriber closes on disconnect - } - - /** - * Synchronously subscribe to a given topic. - * - * @param topicName The topic to subscribe to - * @throws MqttException - */ - @Override - public void subscribe(String topicName) throws MqttException { - log.info("Subscribing to topic \"" + topicName + "\" on qos" + qos); - mqttClient.subscribe(topicName, qos.getValue()); - } - - /** - * Un-subscribe from the topic. - * - * @throws MqttException - */ - public void unsubscribe() throws MqttException { - mqttClient.unsubscribe(topic); - log.info("Subscriber for topic : " + topic + " un-subscribed"); - } - - /** - * {@inheritDoc} - */ - @Override - public void unsubscribe(String topic) throws MqttException { - mqttClient.unsubscribe(topic); - log.info("Subscriber for topic : " + topic + " un-subscribed"); - } - - /** - * Shutdown the mqtt client. Call this whenever the system exits, test cases are finished or disconnect hook is - * called. - * - * @throws MqttException - */ - public void disconnect() throws MqttException { - if (isConnected()) { - mqttClient.disconnect(); - log.info("Client " + mqttClientID + " Disconnected"); - } - } - - /** - * {@inheritDoc} - */ - @Override - public void connect() throws MqttException { - log.info("Connecting to " + brokerUrl + " with client ID " + mqttClientID); - mqttClient.connect(connectionOptions); - - log.info("Client " + mqttClientID + " Connected"); - } - - /** - * Use this to validate if connection to server is still active. - * - * @return Is MQTT client connected to the server - */ - public boolean isConnected() { - return mqttClient.isConnected(); - } - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/MQTTBlockingPublisherClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/MQTTBlockingPublisherClient.java deleted file mode 100644 index b4d29953..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/MQTTBlockingPublisherClient.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.blocking; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -import java.util.Collections; -import java.util.List; - -/** - * Synchronous MQTT publishing client. - */ -public class MQTTBlockingPublisherClient extends AndesMQTTBlockingClient { - - // The payload to send as message content - private byte[] messagePayLoad; - - // The number of messages to send - private int noOfMessages; - - private static final Log log = LogFactory.getLog(MQTTBlockingPublisherClient.class); - - /** - * Initialize publishing to mqtt. - * - * @param configuration MQTT configurations - * @param clientID Unique mqtt client Id - * @param topic Topic to publish to - * @param qos Quality of service - * @param payload Data to send - * @param noOfMessages Number of message to send - * @throws MqttException - */ - public MQTTBlockingPublisherClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, byte[] payload, int noOfMessages) throws MqttException { - super(configuration, clientID, topic, qos, new CallbackHandler()); - messagePayLoad = payload; - this.noOfMessages = noOfMessages; - } - - /** - * Start the publisher to publish to mqtt. - */ - @Override - public void run() { - try { - publish(messagePayLoad, noOfMessages); - } catch (MqttException e) { - log.error("Error publishing messages to " + getTopic() + " from " + getMqttClientID(), e); - } - } - - /** - * Return subscription status as false since this is the publishing client. - * - * @return False - */ - @Override - public boolean isSubscribed() { - return false; - } - - /** - * Return empty as this is the publisher client and does not accept any messages. - * - * @return empty message list - */ - @Override - public List getReceivedMessages() { - return Collections.emptyList(); - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/MQTTBlockingSubscriberClient.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/MQTTBlockingSubscriberClient.java deleted file mode 100644 index 0fe71c55..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/blocking/MQTTBlockingSubscriberClient.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.blocking; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.operations.mqtt.callback.CallbackHandler; - -import java.util.List; - -/** - * Synchronous MQTT subscriber client. - */ -public class MQTTBlockingSubscriberClient extends AndesMQTTBlockingClient { - - private static final Log log = LogFactory.getLog(MQTTBlockingSubscriberClient.class); - - // Listening to the server for message or not - private boolean subscribed = false; - - /** - * Initialize subscribing to mqtt. - * - * @param configuration MQTT configurations - * @param clientID Unique mqtt client Id - * @param topic Topic to subscribe to - * @param qos Quality of Service - * @param saveMessages Save receiving messages - * @throws MqttException - */ - public MQTTBlockingSubscriberClient(MQTTClientConnectionConfiguration configuration, String clientID, String topic, - QualityOfService qos, boolean saveMessages) throws MqttException { - super(configuration, clientID, topic, qos, new CallbackHandler(saveMessages)); - } - - /** - * Get all the received messages through this client. - * Use this if want to validate message content. - * - * @return Received messages. - */ - public List getReceivedMessages() { - return getCallbackHandler().getReceivedMessages(); - } - - - /** - * Invokes client and subscribes to the given topic. - */ - @Override - public void run() { - try { - subscribe(); - subscribed = true; - } catch (MqttException e) { - log.error("Error subscribing to topic " + getTopic() + " from client " + getMqttClientID(), e); - } - } - - - /** - * Gracefully disconnect the client after un-subscribing to subscribed topic. - * Called through ClientEngine disconnect. - * - * @throws MqttException - */ - @Override - public void disconnect() throws MqttException { - CallbackHandler callbackHandler = getCallbackHandler(); - if (isConnected()) { - if (null != callbackHandler) { - log.info("No of messages received for client " + getMqttClientID() + " : " + callbackHandler - .getReceivedMessageCount()); - } - - // Disconnecting forcefully without un-subscribing to prevent a publisher from blocking an un-subscribe - // process. - mqttClient.disconnect(); - subscribed = false; - - log.info("Client " + getMqttClientID() + " Disconnected"); - } - } - - /** - * Check if the subscriber is subscribed to a topic - * - * @return Is Subscribed - */ - public boolean isSubscribed() { - return subscribed; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/callback/CallbackHandler.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/callback/CallbackHandler.java deleted file mode 100755 index 11e3a413..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/mqtt/callback/CallbackHandler.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.mqtt.callback; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; -import org.eclipse.paho.client.mqttv3.MqttCallback; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.wso2.mb.integration.common.clients.MQTTConstants; - -import java.util.ArrayList; -import java.util.List; - -/** - * Callback handler to handle message arrival, delivery complete and connection lost. - * Keeps track of sent/received message counts. - */ -public class CallbackHandler implements MqttCallback { - - private final Log log = LogFactory.getLog(CallbackHandler.class); - - private boolean saveMessages = false; - - private final List receivedMessages = new ArrayList(); - private int receivedMessageCount; - private int sentMessageCount; - - /** - * Saves the topic name for which the last message received if saveMessages is set to true. - */ - String lastTopicReceived; - - /** - * Default constructor. Use this if you do not care about receiving message are saved or not. - */ - public CallbackHandler() { - - } - - /** - * Set saveMessages while initializing. Use this if you want to specifically want to save/not save receiving - * messages. - *

- * Do not set saveMessages to true if you are expecting a large number of messages. - * - * @param saveReceivingMessages Save receiving message - */ - public CallbackHandler(boolean saveReceivingMessages) { - this.saveMessages = saveReceivingMessages; - } - - /** - * Extract the received message count for the client. - * - * @return Received message count - */ - public int getReceivedMessageCount() { - return receivedMessageCount; - } - - /** - * Handle losing connection with the server. - * Here we just print it to the test console. - * - * @param throwable Throwable connection lost - */ - @Override - public void connectionLost(Throwable throwable) { - log.error("Connection Lost - Client Disconnected", throwable); - } - - /** - * Handle a receiving message from a server. - * The receiving message count will be updated. If save message flag is up, the received message will be saved. - * - * @param topic Topic message received from - * @param mqttMessage The mqtt message received - * @throws Exception - */ - @Override - public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { - if (null != mqttMessage) { - if (saveMessages) { - receivedMessages.add(mqttMessage); - lastTopicReceived = topic; - log.info("Message arrived on " + topic + " : " + mqttMessage.toString()); - } - - incrementReceivedMessageCount(); - int receivedMessageCount = getReceivedMessageCount(); - - if (receivedMessageCount % MQTTConstants.MESSAGE_PRINT_LIMIT == 0) { - log.info(receivedMessageCount + " messages received."); - } - } else { - log.warn("Empty message received by the callback handler on topic " + topic); - } - - - } - - /** - * Handle delivery complete ack. - * - * @param iMqttDeliveryToken Delivery complete token - */ - @Override - public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { - incrementSentMessageCount(); - - int sentMessageCount = getSentMessageCount(); - - if (sentMessageCount % MQTTConstants.MESSAGE_PRINT_LIMIT == 0) { - log.info(sentMessageCount + " messages received."); - } - } - - /** - * Increment the receiving message count. - * Use this instead of just incrementing so if threads are involved this method can be used to handle concurrency - * issues. - */ - private void incrementReceivedMessageCount() { - receivedMessageCount++; - } - - /** - * Increment the sent message count. - * Use this instead of just incrementing so if threads are involved this method can be used to handle concurrency - * issues. - */ - private void incrementSentMessageCount() { - sentMessageCount++; - } - - /** - * Retrieve the received messages. This will return a non empty value only if saveMessages flag is set. - * - * @return Received messages - */ - public List getReceivedMessages() { - return receivedMessages; - } - - /** - * Get the sent message count. - * - * @return Sent message count - */ - public int getSentMessageCount() { - return sentMessageCount; - } - - - public String getLastTopicReceived() { - return lastTopicReceived; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientConstants.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientConstants.java deleted file mode 100644 index 26062d8a..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientConstants.java +++ /dev/null @@ -1,156 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.operations.utils; - -import java.io.File; - -/** - * This class contains the constants that are being used by the andes client. - */ -public class AndesClientConstants { - /** - * Andes initial context factory. - */ - public static final String ANDES_ICF = - "org.wso2.andes.jndi.PropertiesFileInitialContextFactory"; - - /** - * Connection factory name prefix. - */ - public static final String CF_NAME_PREFIX = "connectionfactory."; - - /** - * Andes connection factory name - */ - public static final String CF_NAME = "andesConnectionfactory"; - - /** - * WSO2 carbon factory name. - */ - public static final String CARBON_VIRTUAL_HOST_NAME = "carbon"; - - /** - * Carbon client ID. - */ - public static final String CARBON_CLIENT_ID = "carbon"; - - /** - * Default file path to write received messages by subscriber/consumer - */ - public static final String FILE_PATH_TO_WRITE_RECEIVED_MESSAGES = - System.getProperty("project.build.directory") + File.separator + "receivedMessages.txt"; - - /** - * Default file path to write statistics by subscriber/consumer and publisher Suppressing - * "UnusedDeclaration" as this may be used in client configuration - */ - @SuppressWarnings("UnusedDeclaration") - public static final String FILE_PATH_TO_WRITE_STATISTICS = - System.getProperty("framework.resource.location") + File.separator + "stats.csv"; - - /** - * Message publishing format - */ - public static final String PUBLISH_MESSAGE_FORMAT = "Sending Message:{0} ThreadID:{1}"; - // please see usages prior editing - - /** - * Default waiting time that is used to check whether the consumer has received messages. - */ - public static final long DEFAULT_RUN_TIME = 10000L; - - /** - * Default waiting time that is used to check whether the consumer has received messages. - */ - public static final long DEFAULT_CLUSTER_SYNC_TIME = 1000; - - /** - * Admin user name for AMQP connection string - */ - public static final String DEFAULT_USERNAME = "admin"; - - /** - * Admin password for AMQP connection string - */ - public static final String DEFAULT_PASSWORD = "admin"; - - /** - * Default host name for AMQP connection string - */ - public static final String DEFAULT_HOST_NAME = "127.0.0.1"; - - /** - * Default port for AMQP connections string - */ - public static final int DEFAULT_PORT = 5672; - - /** - * File path to read message content for publishing - */ - public static final String MESSAGE_CONTENT_INPUT_FILE_PATH_1MB = - System.getProperty("framework.resource.location") + File.separator + - "MessageContentInput.txt"; - - /** - * File path to read message content for publishing - */ - public static final String MAP_MESSAGE_CONTENT_INPUT_FILE_PATH = - System.getProperty("framework.resource.location") + File.separator + - "MapMessageContentInput.txt"; - - /** - * File path to read message content for publishing - */ - public static final String MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB = - System.getProperty("framework.resource.location") + File.separator + - "MessageContentInputWithoutRepetitions.txt"; - - /** - * File path creating a file. - */ - public static final String FILE_PATH_FOR_CREATING_A_NEW_FILE = - System.getProperty("project.build.directory") + File.separator + "newFile.txt"; - - /** - * File path for a file of size 1 kb. - */ - public static final String FILE_PATH_FOR_ONE_KB_SAMPLE_FILE = - System.getProperty("framework.resource.location") + "sample" + File.separator + - "sample_1KB_msg.xml"; - - /** - * The JMS property which stores routing key. - */ - public static final String JMS_ANDES_ROUTING_KEY_MESSAGE_PROPERTY = "JMS_ANDES_ROUTING_KEY"; - - /** - * JMS Property allowing to append routing key for messages. - */ - public static final String ANDES_SET_ROUTING_KEY = "AndesSetRoutingKey"; - - /** - * System property name of andes acknowledgement wait timeout - */ - public static final String ANDES_ACK_WAIT_TIMEOUT_PROPERTY = "AndesAckWaitTimeOut"; - - /** - * System property name of andes redelivery delay - */ - public static final String ANDES_REDELIVERY_DELAY_PROPERTY = "AndesRedeliveryDelay"; - -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientOutputParser.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientOutputParser.java deleted file mode 100644 index 40c019eb..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientOutputParser.java +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.utils; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.LineIterator; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * This class is used to get Andes Client outputs from parse file. The class provides evaluation - * functions for testing purposes. - */ -public class AndesClientOutputParser { - - /** - * The logger used in logging information, warnings, errors and etc. - */ - private static Log log = LogFactory.getLog(AndesClientOutputParser.class); - - /** - * Map that stored received messages. Used to check message duplication. - */ - private Map mapOfReceivedMessages = new HashMap(); - - /** - * List of received messages. - */ - private List messages = new ArrayList(); - - /** - * File path to parse received messages - */ - private String filePath = ""; - - /** - * Creates an output parse for andes with a give file path. - * - * @param filePath The file path for received messages. - * @throws IOException - */ - public AndesClientOutputParser(String filePath) throws IOException { - this.filePath = filePath; - parseFile(); - } - - /** - * Reads received messages from a file path and store the message ID in necessary data - * structures. - * - * @throws IOException - */ - private void parseFile() throws IOException { - try { - BufferedReader br = new BufferedReader(new FileReader(filePath)); - try { - String line = br.readLine(); - while (line != null) { - String tempSendMessageString = line.substring(AndesClientConstants.PUBLISH_MESSAGE_FORMAT.indexOf("Sending Message:") + "Sending Message:".length()); - long messageIdentifier = Long.valueOf(tempSendMessageString.substring(0, tempSendMessageString - .indexOf(" ")).replace(",","")); - this.addMessage(messageIdentifier); - line = br.readLine(); - } - } finally { - br.close(); - } - } catch (FileNotFoundException e) { - log.error("Error " + filePath + " the file containing received messages couldn't found", e); - throw e; - } catch (IOException e) { - log.error("Error " + filePath + " the file cannot be read", e); - throw e; - } - } - - /** - * Gets the map used for message duplication. - * - * @return A map of duplicated message IDs as key. - */ - public Map getDuplicatedMessages() { - Map messagesDuplicated = new HashMap(); - for (Long messageIdentifier : mapOfReceivedMessages.keySet()) { - if (mapOfReceivedMessages.get(messageIdentifier) > 1) { - messagesDuplicated.put(messageIdentifier, mapOfReceivedMessages.get(messageIdentifier)); - } - } - return messagesDuplicated; - } - - /** - * Checks if messages are received in the correct order. - * - * @return true if messages are in order, false otherwise. - */ - public boolean checkIfMessagesAreInOrder() { - boolean result = true; - for (int count = 0; count < messages.size(); count++) { - if (messages.get(count) != (count)) { - result = false; - log.warn("Message order is broken at message " + messages.get(count)); - break; - } - } - return result; - } - - /** - * Prints missing message IDs. - * Suppressing "UnusedDeclaration" as this could be used for debugging purposes - * - * @param numberOfSentMessages Number of messages to print. - */ - @SuppressWarnings("UnusedDeclaration") - public void printMissingMessages(int numberOfSentMessages) { - log.info("Printing Missing Messages"); - for (long count = 0; count < numberOfSentMessages; count++) { - if (mapOfReceivedMessages.get(count) == null) { - log.info("Missing message id:" + count + 1 + "\n"); - } - } - } - - /** - * Prints duplicated message IDs - * Suppressing "UnusedDeclaration" as this could be used for debugging purposes - */ - @SuppressWarnings("UnusedDeclaration") - public void printDuplicateMessages() { - log.info("Printing Duplicated Messages"); - log.info(this.getDuplicatedMessages()); - } - - /** - * Prints the map that contains received messages. - * Suppressing "UnusedDeclaration" as this could be used for debugging purposes - */ - @SuppressWarnings("UnusedDeclaration") - public void printMessagesMap() { - log.info("Printing Received Messages"); - log.info(mapOfReceivedMessages); - } - - /** - * Adds received message IDs to a list and a map. - * - * @param messageIdentifier Received message ID. - */ - private void addMessage(Long messageIdentifier) { - if (mapOfReceivedMessages.get(messageIdentifier) == null) { - mapOfReceivedMessages.put(messageIdentifier, 1); - } else { - int currentCount = mapOfReceivedMessages.get(messageIdentifier); - mapOfReceivedMessages.put(messageIdentifier, currentCount + 1); - } - - messages.add(messageIdentifier); - } - - /** - * Prints received message IDs in sorted. - * Suppressing "UnusedDeclaration" as this could be used for debugging purposes - */ - @SuppressWarnings("UnusedDeclaration") - public void printMessagesSorted() { - log.info("Printing Sorted Messages"); - List cloneOfMessages = new ArrayList(); - cloneOfMessages.addAll(messages); - Collections.sort(cloneOfMessages); - log.info(cloneOfMessages); - } - - /** - * Check whether all the messages are transacted - * - * @param operationOccurredIndex Index of the operation occurred message - * @return transactedResult - */ - public boolean transactedOperations(long operationOccurredIndex) throws FileNotFoundException { - boolean result = false; - int count = 0; - long firstMessageIdentifier = 0; - try { - BufferedReader br = new BufferedReader(new FileReader(filePath)); - //Needed try/finally to close the file - try { - String line = br.readLine(); - while (line != null) { - String tempSendMessageString = line.substring(AndesClientConstants.PUBLISH_MESSAGE_FORMAT.indexOf("Sending Message:") + "Sending Message:".length()); - long messageIdentifier = Long.parseLong(tempSendMessageString.substring(0, tempSendMessageString.indexOf(" "))); - if (count == 0) { - firstMessageIdentifier = messageIdentifier; - } - if (count == (operationOccurredIndex)) { - if (messageIdentifier == firstMessageIdentifier) { - result = true; - } - } - line = br.readLine(); - count++; - } - } catch (IOException e) { - log.error("Error while parsing the file containing received messages", e); - } finally { - try { - br.close(); - } catch (IOException e) { - log.error("Error while closing the file containing received messages", e); - } - } - - } catch (FileNotFoundException e) { - log.error("Error " + filePath + " the file containing received messages couldn't found", e); - throw e; - } - - AndesClientUtils.flushPrintWriters(); - return result; - } - - /** - * Check whether all the messages are received in-order when subscriber rollbacks - * after certain number of messages. - * - * @param messagesPerRollback Number of messages received per rollback - * @return Result as true if transacted rollback operation has successfully - * preserved order of all messages. - */ - public boolean checkIfTransactedRollbackPreservesOrder(long messagesPerRollback) - throws FileNotFoundException { - - boolean result = true; - int count = 0; - Long messageIdentifier; - - int rollbackBatchIteration = 1; - boolean isFirstMessageBatch = true; - LineIterator iterator = null; - - Map firstMessageBatch = new HashMap(); - try { - iterator = FileUtils.lineIterator(new File(filePath)); - - String line = iterator.nextLine(); - while (iterator.hasNext()) { - - messageIdentifier = getMessageIdentifier(line); - - if (firstMessageBatch.containsValue(messageIdentifier)) { - isFirstMessageBatch = false; - if (count != messagesPerRollback * rollbackBatchIteration) { - log.error("failed to check if rollback messages are received in order" + - " to due to first duplicated message count " + count + - " not equal to messages per each rollback." + - messagesPerRollback + "."); - result = false; - } - rollbackBatchIteration++; - } - - if (!isFirstMessageBatch) { - for (int i = 0; i < messagesPerRollback; i++) { - messageIdentifier = getMessageIdentifier(line); - if (null != firstMessageBatch.get(i)) { - if (!firstMessageBatch.get(i).equals(messageIdentifier)) { - result = false; - log.error("Error in line :" + line + - ".Rollback operation failed to keep message order."); - } - } - if (iterator.hasNext()) { - line = iterator.nextLine(); - count++; - } - } - } else if (isFirstMessageBatch) { - firstMessageBatch.put(count, messageIdentifier); - line = iterator.nextLine(); - count++; - } - } - - } catch (FileNotFoundException e) { - log.error("Error " + filePath + " the file containing received messages couldn't found", e); - throw e; - } catch (IOException e) { - log.error("Error while parsing the file containing received messages", e); - } finally { - iterator.close(); - } - - AndesClientUtils.flushPrintWriters(); - return result; - } - - - /** - * This method will return message identifier number extracted from given string line. - * sample string line "Sending Message:36 ThreadID:7,335". - * - * @param line string parameter which contains given line of a text file. - * @return messageIdentifier which can identify messages uniquely. - */ - private Long getMessageIdentifier(String line) { - - String tempSendMessageString = line.substring(AndesClientConstants. - PUBLISH_MESSAGE_FORMAT.indexOf("Sending Message:") + "Sending Message:".length()); - Long messageIdentifier = Long.parseLong(tempSendMessageString. - substring(0, tempSendMessageString.indexOf(" "))); - - return messageIdentifier; - } - - - /** - * Parse the file and get the number of duplicate message IDs. - * - * @return Duplicated message ID count. - */ - public long numberDuplicatedMessages() { - long duplicateCount = 0; - List messagesDuplicated = new ArrayList(); - try { - BufferedReader br = new BufferedReader(new FileReader(filePath)); - //Needed try/finally to close the file - try { - String line = br.readLine(); - while (line != null) { - String tempSendMessageString = line.substring(AndesClientConstants.PUBLISH_MESSAGE_FORMAT.indexOf("Sending Message:") + "Sending Message:".length()); - long messageIdentifier = Long.parseLong(tempSendMessageString.substring(0, tempSendMessageString.indexOf(" "))); - if (messagesDuplicated.contains(messageIdentifier)) { - duplicateCount++; - } else { - messagesDuplicated.add(messageIdentifier); - } - line = br.readLine(); - } - } catch (IOException e) { - log.error("Error while parsing the file containing received messages", e); - } finally { - - try { - br.close(); - } catch (IOException e) { - log.error("Error while closing the file containing received messages", e); - } - - } - } catch (FileNotFoundException e) { - log.error("Error " + filePath + " the file containing received messages couldn't found", e); - } - return duplicateCount; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientUtils.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientUtils.java deleted file mode 100644 index b83fd177..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/AndesClientUtils.java +++ /dev/null @@ -1,363 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.operations.utils; - -import org.apache.commons.lang.StringUtils; -import org.apache.log4j.Logger; -import org.wso2.mb.integration.common.clients.AndesClient; - -import javax.jms.JMSException; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.concurrent.TimeUnit; - -/** - * This class provides functionality to evaluate Andes Client consumers and publishers. - */ -public class AndesClientUtils { - /** - * The logger used in logging information, warnings, errors and etc. - */ - private static Logger log = Logger.getLogger(AndesClientUtils.class); - - /** - * The print writer to print received messages to a file. - */ - private static PrintWriter receivedMessagePrintWriter; - - /** - * The print writer to print statistics such as TPS for consumers and producers and also the - * average latency to a file. - */ - private static PrintWriter statisticsPrintWriter; - - /** - * The print writer to print messages that are being sent by the publisher. - */ - private static PrintWriter publishedMessagePrintWriter; - - /** - * Waits until no messages are received. The waiting is done by using a loop checking whether - * any new messages are received than the previous iteration. In each iteration it will wait for - * a certain time to make sure that message counter changes until no change is detected in the - * message counters. - * - * @param client The consumer client - * @param waitTimeTillMessageCounterChanges The amount of milliseconds to wait for new messages - * are received. - * @param expectedMessageCount Number of messages expected from the consumer - * @throws JMSException - */ - public static void waitForMessagesAndShutdown(AndesClient client, - long waitTimeTillMessageCounterChanges, long expectedMessageCount) - throws JMSException { - long previousMessageCount = 0; - long currentMessageCount = -1; - - /** - * At each iteration it will check whether the message count has changed than the previous - * iteration - */ - while (currentMessageCount != previousMessageCount) { - try { - // Waits till the consumer client received more messages. - TimeUnit.MILLISECONDS.sleep(waitTimeTillMessageCounterChanges); - } catch (InterruptedException e) { - log.error("Error waiting for receiving messages.", e); - } - // Updating message counters - previousMessageCount = currentMessageCount; - currentMessageCount = client.getReceivedMessageCount(); - } - - log.info("Message count received by consumer : " + Long - .toString(client.getReceivedMessageCount())); - - if (expectedMessageCount != currentMessageCount) { - // Stopping the consumer client - client.stopClient(); - } - - // Prints print writer contents to files. - flushPrintWriters(); - } - - /** - * Waits until no messages are received. The waiting is done by using a loop checking whether - * any new messages are received than the previous iteration. In each iteration it will wait for - * a certain time to make sure that message counter changes until no change is detected in the - * message counters. - * - * @param client The consumer client - * @param waitTimeTillMessageCounterChanges The amount of milliseconds to wait for new messages - * are received. - * @throws JMSException - */ - public static void waitForMessagesAndShutdown(AndesClient client, - long waitTimeTillMessageCounterChanges) - throws JMSException { - long previousMessageCount = 0; - long currentMessageCount = -1; - - /** - * At each iteration it will check whether the message count has changed than the previous - * iteration - */ - while (currentMessageCount != previousMessageCount) { - try { - // Waits till the consumer client received more messages. - TimeUnit.MILLISECONDS.sleep(waitTimeTillMessageCounterChanges); - } catch (InterruptedException e) { - log.error("Error waiting for receiving messages.", e); - } - // Updating message counters - previousMessageCount = currentMessageCount; - currentMessageCount = client.getReceivedMessageCount(); - } - - log.info("Message count received by consumer : " + Long - .toString(client.getReceivedMessageCount())); - // Stopping the consumer client - client.stopClient(); - // Prints print writer contents to files. - flushPrintWriters(); - } - - /** - * Shutdown the client gracefully without waiting. - * - * @param client The client to shutdown - * @throws JMSException - */ - public static void shutdownClient(AndesClient client) throws JMSException { - client.stopClient(); - flushPrintWriters(); - } - - /** - * Sleeps for a certain time. - * - * @param milliseconds Sleep time in milliseconds. - */ - public static void sleepForInterval(long milliseconds) { - if (0 < milliseconds) { - try { - Thread.sleep(milliseconds); - } catch (InterruptedException ignore) { - Thread.currentThread().interrupt(); - } - } - } - - /** - * Writes received messages to a file. - * - * @param content Message content to write. - * @param filePath File path where the message content should be written. - */ - public static void writeReceivedMessagesToFile(String content, String filePath) - throws IOException { - if (receivedMessagePrintWriter == null) { - initializeReceivedMessagesPrintWriter(filePath); - } - receivedMessagePrintWriter.println(content); - - } - - /** - * Writes statistics to a file. - * - * @param content Statistic content. - * @param filePath File path where the statistics should be written. - */ - public static void writeStatisticsToFile(String content, String filePath) throws IOException { - if (statisticsPrintWriter == null) { - initializeStatisticsPrintWriter(filePath); - } - - statisticsPrintWriter.println(content); - - } - - /** - * Writes published messages to a file. - * - * @param content Statistic content. - * @param filePath File path where the statistics should be written. - */ - public static void writePublishedMessagesToFile(String content, String filePath) throws IOException { - if (publishedMessagePrintWriter == null) { - initializePublishedPrintWriter(filePath); - } - - publishedMessagePrintWriter.println(content); - } - - /** - * Initialize the message content print writer. This needs to be invoked before each test case. - * - * @param filePath The file path to write to. - */ - public static void initializeReceivedMessagesPrintWriter(String filePath) throws IOException { - if (StringUtils.isNotEmpty(filePath)) { - File writerFile = new File(filePath); - if (writerFile.exists() || writerFile.createNewFile()) { - BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath)); - receivedMessagePrintWriter = new PrintWriter(bufferedWriter); - } - } - } - - /** - * Initialize the statistics print writer. This needs to be invoked before each test case. - * - * @param filePath The file path to write to. - */ - public static void initializeStatisticsPrintWriter(String filePath) throws IOException { - if (StringUtils.isNotEmpty(filePath)) { - File writerFile = new File(filePath); - if (writerFile.exists() || writerFile.createNewFile()) { - BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath)); - statisticsPrintWriter = new PrintWriter(bufferedWriter); - statisticsPrintWriter - .println("TIMESTAMP,CONSUMER_TPS,AVERAGE_LATENCY,,TIMESTAMP,PUBLISHER_TPS"); - } - } - } - - /** - * Initialize the published messages print writer. This needs to be invoked before each test - * case. - * - * @param filePath The file path to write to. - */ - public static void initializePublishedPrintWriter(String filePath) throws IOException { - if (StringUtils.isNotEmpty(filePath)) { - File writerFile = new File(filePath); - if (writerFile.exists() || writerFile.createNewFile()) { - BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePath)); - publishedMessagePrintWriter = new PrintWriter(bufferedWriter); - } - } - } - - /** - * Prints print writers to file paths. - */ - public static void flushPrintWriters() { - if (null != receivedMessagePrintWriter) { - receivedMessagePrintWriter.flush(); - } - - if (null != statisticsPrintWriter) { - statisticsPrintWriter.flush(); - } - - if (null != publishedMessagePrintWriter) { - publishedMessagePrintWriter.flush(); - } - } - - /** - * Creates a file using a given file and a size. - * - * @param filePathToRead The file path to read contents from. - * @param filePathToCreate The path in which the contents should be written with a given size. - * @param sizeInKB The size of the file to be written in kilobytes. - */ - public static void createMockFile(String filePathToRead, String filePathToCreate, - int sizeInKB) { - String fileContentToBeWritten = ""; - BufferedReader br = null; - try { - br = new BufferedReader(new FileReader(filePathToRead)); - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append('\n'); - line = br.readLine(); - } - fileContentToBeWritten = sb.toString(); - } catch (FileNotFoundException e) { - log.error("File to read sample string to create text file to send is not found", e); - } catch (IOException e) { - log.error("Error in reading sample file to create text file to send", e); - } finally { - - try { - if (br != null) { - br.close(); - } - } catch (IOException e) { - log.error("Error while closing buffered reader", e); - } - - } - - //If already exists, deleting the file - if (deleteRandomFile(filePathToCreate)) { - log.info("File requested to create already exists. Deleted file: " + filePathToCreate); - } - - try { - File fileToCreate = new File(filePathToCreate); - - boolean createFileSuccess = fileToCreate.createNewFile(); - if (createFileSuccess) { - log.info("Successfully created a file to append content for sending at " + filePathToCreate); - } - - BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filePathToCreate)); - PrintWriter printWriter = new PrintWriter(bufferedWriter); - - for (int count = 0; count < sizeInKB; count++) { - printWriter.append(fileContentToBeWritten); - } - - printWriter.flush(); - printWriter.close(); - } catch (IOException e) { - log.error("Error. File to print received messages is not provided", e); - } - } - - /** - * Deletes a random file. - * - * @param filePathToDelete The path in which the contents should be written with a given size. - */ - public static boolean deleteRandomFile(String filePathToDelete) { - File fileToDelete = new File(filePathToDelete); - boolean deleted = false; - - if (fileToDelete.exists()) { - if (fileToDelete.delete()) { - deleted = true; - } - } - return deleted; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/ExchangeType.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/ExchangeType.java deleted file mode 100644 index c519cf40..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/ExchangeType.java +++ /dev/null @@ -1,45 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.operations.utils; - -/** - * Enumeration for JMS exchange types. - */ -public enum ExchangeType { - /** - * Exchange types - */ - QUEUE("queue"), TOPIC("topic"); - private String type; - - /** - * Initializes enums - * @param type The exchange type as string. - */ - ExchangeType(String type) { - this.type = type; - } - - /** - * Gets exchange string. - * @return The exchange string. - */ - public String getType() { - return type; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSAcknowledgeMode.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSAcknowledgeMode.java deleted file mode 100644 index 0fef614d..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSAcknowledgeMode.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.operations.utils; - -/** - * Enumeration for acknowledge modes in JMS - */ -public enum JMSAcknowledgeMode { - /** - * @see SESSION_TRANSACTED - */ - SESSION_TRANSACTED(0), - - /** - * @see AUTO_ACKNOWLEDGE - */ - AUTO_ACKNOWLEDGE(1), - - /** - * @see CLIENT_ACKNOWLEDGE - */ - CLIENT_ACKNOWLEDGE(2), - - /** - * @see DUPS_OK_ACKNOWLEDGE - */ - DUPS_OK_ACKNOWLEDGE(3), - - /** - * Per message acknowledgement. - */ - PER_MESSAGE_ACKNOWLEDGE(259); - - private int type; - - /** - * Initializes acknowledge mode - * @param type Acknowledge mode as per JMS - */ - JMSAcknowledgeMode(int type) { - this.type = type; - } - - /** - * Gets acknowledge mode - * @return The Acknowledge mode value - */ - public int getType() { - return type; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSClientHelper.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSClientHelper.java deleted file mode 100644 index e90f3452..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSClientHelper.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2005-2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.clients.operations.utils; - -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import java.util.Properties; - -public class JMSClientHelper { - /** - * Full qualified class name of the andes initial context factory - */ - public static final String ANDES_INITIAL_CONTEXT_FACTORY = "org.wso2.andes.jndi" + - ".PropertiesFileInitialContextFactory"; - - /** - * Queue connection factory name used - */ - public static final String QUEUE_CONNECTION_FACTORY = "andesQueueConnectionfactory"; - - /** - * Topic connection factory name used - */ - public static final String TOPIC_CONNECTION_FACTORY = "andesTopicConnectionfactory"; - - /** - * Create a inital context with the given parameters - * - * @param username - * Username - * @param password - * Password - * @param brokerHost - * Hostname or IP address of the broker - * @param port - * Port used for AMQP transport - * @param queueName - * Queue name - * @return InitialContext - * @throws NamingException - */ - public static InitialContext getInitialContextForQueue(String username, - String password, - String brokerHost, - String port, - String queueName) throws NamingException { - - Properties contextProperties = new Properties(); - contextProperties.put(Context.INITIAL_CONTEXT_FACTORY, ANDES_INITIAL_CONTEXT_FACTORY); - String connectionString = getBrokerConnectionString(username, password, brokerHost, port); - contextProperties.put("connectionfactory." + QUEUE_CONNECTION_FACTORY, connectionString); - contextProperties.put("queue." + queueName, queueName); - - return new InitialContext(contextProperties); - } - - /** - * Create a inital context with the given parameters - * - * @param username - * Username - * @param password - * Password - * @param brokerHost - * Hostname or IP address of the broker - * @param port - * Port used for AMQP transport - * @param topicName - * Topic name - * @return InitialContext - * @throws NamingException - */ - public static InitialContext getInitialContextForTopic(String username, - String password, - String brokerHost, - String port, - String topicName) throws NamingException { - - Properties contextProperties = new Properties(); - contextProperties.put(Context.INITIAL_CONTEXT_FACTORY, ANDES_INITIAL_CONTEXT_FACTORY); - String connectionString = getBrokerConnectionString(username, password, brokerHost, port); - contextProperties.put("connectionfactory." + TOPIC_CONNECTION_FACTORY, connectionString); - contextProperties.put("topic." + topicName, topicName); - - return new InitialContext(contextProperties); - } - - /** - * Generate broker connection string - * - * @param userName - * Username - * @param password - * Password - * @param brokerHost - * Hostname of broker (E.g. localhost) - * @param port - * Port (E.g. 5672) - * @return Broker Connection String - */ - private static String getBrokerConnectionString(String userName, String password, - String brokerHost, String port) { - - return "amqp://" + userName + ":" + password + "@clientID/carbon?brokerlist='tcp://" - + brokerHost + ":" + port + "'"; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSDeliveryStatus.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSDeliveryStatus.java deleted file mode 100644 index 72c34c37..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSDeliveryStatus.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.wso2.mb.integration.common.clients.operations.utils; - -/** - * - */ -public enum JMSDeliveryStatus { - /** - * JMS delivery statuses. - */ - ORIGINAL("Original"), REDELIVERED("Redelivered"); - private String status; - - /** - * Initializes JMS delivery status - * @param status Delivery status. - */ - JMSDeliveryStatus(String status) { - this.status = status; - } - - /** - * Gets JMS delivery status. - * @return Delivery status. - */ - public String getStatus() { - return status; - } -} diff --git a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSMessageType.java b/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSMessageType.java deleted file mode 100644 index 036d2126..00000000 --- a/modules/broker/integration/tests-common/admin-clients/src/main/java/org/wso2/mb/integration/common/clients/operations/utils/JMSMessageType.java +++ /dev/null @@ -1,47 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.common.clients.operations.utils; - -/** - * Enumeration for JMS message types. - */ -public enum JMSMessageType { - /** - * JMS message types. - */ - TEXT("text"), BYTE("byte"), MAP("map"), OBJECT("object"), STREAM("stream"); - private String type; - - /** - * Initializes JMS message type. - * - * @param type Message type. - */ - JMSMessageType(String type) { - this.type = type; - } - - /** - * Gets JMS message type. - * - * @return The message type. - */ - public String getType() { - return type; - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-common/integration-tests-utils/pom.xml b/modules/broker/integration/tests-common/integration-tests-utils/pom.xml deleted file mode 100644 index 11530796..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - org.wso2.iot - wso2iot-broker-integration-tests - 1.0.0-SNAPSHOT - ../../pom.xml - - - 4.0.0 - WSO2 MB - Integration Test Common Utils Module - org.wso2.iot.broker.integration.common.utils - jar - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - compile - - - org.wso2.iot - org.wso2.iot.broker.integration.common.clients - compile - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - compile - - - org.wso2.carbon - org.wso2.carbon.authenticator.stub - compile - - - org.wso2.carbon.automation - org.wso2.carbon.automation.extensions - compile - - - commons-jxpath - commons-jxpath - compile - - - commons-configuration - commons-configuration - compile - - - com.google.guava - guava - compile - - - org.wso2.andes.wso2 - andes - compile - - - - diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/ConfigurationEditor.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/ConfigurationEditor.java deleted file mode 100644 index 771f0bd0..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/ConfigurationEditor.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.backend; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.configuration.XMLConfiguration; -import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; - -import java.io.File; -import java.io.IOException; - -/** - * This class allows a test case to edit the main server configuration (currently broker.xml) and apply it to the - * server before execution. - */ -public class ConfigurationEditor { - - /** - * File name prefix used for the updated configuration file. - */ - public static final String UPDATED_CONFIG_FILE_PREFIX = "updated_"; - - /** - * Configuration property holder - */ - public XMLConfiguration configuration; - - /** - * File path of the original configuration file. - */ - public String originalConfigFilePath; - - /** - * File path of the updated configuration file. - */ - public String updatedConfigFilePath; - - public ConfigurationEditor(String originalConfigFilePath) throws ConfigurationException { - this.originalConfigFilePath = originalConfigFilePath; - - configuration = new XMLConfiguration(this.originalConfigFilePath); - - // Support XPath queries. - configuration.setExpressionEngine(new XPathExpressionEngine()); - - configuration.setDelimiterParsingDisabled(true); // If we don't do this, - // we can't add a new configuration to the compositeConfiguration by code. - } - - /** - * Update a property in loaded original configuration - * @param property AndesConfiguration property. - * @param value New value to be set - * @return the set value - */ - public String updateProperty(AndesConfiguration property, String value) { - configuration.setProperty(property.get().getKeyInFile(),value); - return value; - } - - /** - * Apply modified configuration and restart server - * - * @param serverConfigurationManager Server configuration manager object from automation engine. - * @return true if the update was successful. - * @throws IOException - * @throws AutomationUtilException - * @throws ConfigurationException - */ - public boolean applyUpdatedConfigurationAndRestartServer(ServerConfigurationManager serverConfigurationManager) - throws IOException, AutomationUtilException, ConfigurationException { - - //Rename original configuration file to original_broker.xml - String originalConfigFileDirectory = originalConfigFilePath.substring(0,originalConfigFilePath.lastIndexOf(File.separator)); - String originalConfigFileName = originalConfigFilePath.substring(originalConfigFilePath.lastIndexOf(File.separator)); - - updatedConfigFilePath = originalConfigFileDirectory + UPDATED_CONFIG_FILE_PREFIX + originalConfigFileName; - configuration.save(updatedConfigFilePath); - - serverConfigurationManager.applyConfiguration(new File(updatedConfigFilePath), new File(originalConfigFilePath), true, true); - - return true; - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/MBIntegrationBaseTest.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/MBIntegrationBaseTest.java deleted file mode 100644 index 27324c91..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/MBIntegrationBaseTest.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.backend; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.frameworkutils.FrameworkPathUtil; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.xml.sax.SAXException; - -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Base class of all MB integration tests - */ -public class MBIntegrationBaseTest { - - protected Log log = LogFactory.getLog(MBIntegrationBaseTest.class); - protected AutomationContext automationContext; - protected String backendURL; - protected ServerConfigurationManager serverManager = null; - - /** - * Initialize the base test by initializing the automation context. - * - * @param userMode The testing user mode - * @throws XPathExpressionException - */ - protected void init(TestUserMode userMode) throws XPathExpressionException { - // org.apache.xerces.dom.ParentNode.nodeListItem which is used in AutomationContext - // does not guarantee thread safety. - // Hence to allow tests to run in parallel, this initialization should be synchronized - synchronized (this.getClass()) { - automationContext = new AutomationContext("MB", userMode); - backendURL = automationContext.getContextUrls().getBackEndUrl(); - } - } - - /** - * Restart the testing MB server in In-Memory H2 database mode by applying In-Memory database configurations - * in andes-virtualhosts-H2-mem.xml file. - * - * @throws Exception - */ - protected void restartServerWithH2MemMode() throws Exception { - serverManager = new ServerConfigurationManager(automationContext); - - // Replace the broker.xml with the new configuration and restarts the server. - serverManager.applyConfiguration(new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + - "artifacts" + File.separator + "mb" + File.separator + "config" + File.separator + - "broker.xml"), - new File(ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"), - true, true); - } - - /** - * Gracefully restart the current server which was deployed by the test suit. This can be used when a large - * amount or large size of messages are tested to clean up the server before or after the test. - * - * @throws Exception - */ - protected void restartServer() - throws Exception { - serverManager = new ServerConfigurationManager(automationContext); - serverManager.restartGracefully(); - } - - /** - * Returns wso2 https server port based on automation.xml configurations - * @throws Exception - */ - protected Integer getHttpsServerPort() throws XPathExpressionException { - return Integer.parseInt(automationContext.getInstance().getPorts().get("https")); - - } - - /** - * Returns AMQP port based on automation.xml configurations - * @throws Exception - */ - protected Integer getAMQPPort() throws XPathExpressionException { - return Integer.parseInt(automationContext.getInstance().getPorts().get("amqp")); - - } - - /** - * Returns AMQP port based on automation.xml configurations - * @throws Exception - */ - protected Integer getSecureAMQPPort() throws XPathExpressionException { - return Integer.parseInt(automationContext.getInstance().getPorts().get("sslamqp")); - - } - - - /** - * Returns MQTT port based on automation.xml configurations - * @throws Exception - */ - protected Integer getMQTTPort() throws XPathExpressionException { - return Integer.parseInt(automationContext.getInstance().getPorts().get("mqtt")); - } - - /** - * Returns JMX RMI Server port based on automation.xml configurations - * @throws Exception - */ - protected Integer getJMXServerPort() throws XPathExpressionException { - return Integer.parseInt(automationContext.getInstance().getPorts().get("jmxserver")); - } - - /** - * Returns JMX RMI Registry port based on automation.xml configurations - * @throws Exception - */ - protected Integer getRMIRegistryPort() throws XPathExpressionException { - return Integer.parseInt(automationContext.getInstance().getPorts().get("rmiregistry")); - } - - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/MBIntegrationUiBaseTest.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/MBIntegrationUiBaseTest.java deleted file mode 100644 index 5cc66cb4..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/backend/MBIntegrationUiBaseTest.java +++ /dev/null @@ -1,206 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.backend; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.frameworkutils.FrameworkPathUtil; -import org.wso2.carbon.automation.extensions.selenium.BrowserManager; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following class is the base class for all the UI test cases for MB. - */ -public class MBIntegrationUiBaseTest { - private static final Log log = LogFactory.getLog(MBIntegrationUiBaseTest.class); - protected AutomationContext mbServer; - protected String sessionCookie; - protected String backendURL; - protected ServerConfigurationManager serverManager; - protected LoginLogoutClient loginLogoutClient; - protected WebDriver driver; - /** custom admin role name set with restartServerWithDifferentAdminRoleName() method */ - protected static final String CUSTOM_ADMIN_ROLE_NAME = "administrator"; - - /** - * Initializes the automation context, login client, session cookie and the backend url by {@link org.wso2.carbon - * .automation.engine.context.TestUserMode#SUPER_TENANT_ADMIN}. - * - * @throws AutomationUtilException - * @throws MalformedURLException - * @throws XPathExpressionException - */ - protected void init() throws AutomationUtilException, IOException, XPathExpressionException { - mbServer = new AutomationContext("MB", TestUserMode.SUPER_TENANT_ADMIN); - loginLogoutClient = new LoginLogoutClient(mbServer); - sessionCookie = loginLogoutClient.login(); - backendURL = mbServer.getContextUrls().getBackEndUrl(); - this.driver = BrowserManager.getWebDriver(); - } - - /** - * Initializes the automation context, login client, session cookie and the backend url by a {@link org.wso2 - * .carbon.automation.engine.context.TestUserMode}. - * - * @param testUserMode The testing user mode. - * @throws XPathExpressionException - * @throws AutomationUtilException - * @throws MalformedURLException - */ - protected void init(TestUserMode testUserMode) throws XPathExpressionException, AutomationUtilException, - MalformedURLException { - mbServer = new AutomationContext("MB", testUserMode); - loginLogoutClient = new LoginLogoutClient(mbServer); - sessionCookie = loginLogoutClient.login(); - backendURL = mbServer.getContextUrls().getBackEndUrl(); - this.driver = BrowserManager.getWebDriver(); - } - - /** - * Get current test user's Username according to the automation context - * - * @throws XPathExpressionException - */ - protected String getCurrentUserName() throws XPathExpressionException { - return mbServer.getContextTenant().getContextUser().getUserName(); - } - - /** - * Get current test user's password according to the automation context - * - * @throws XPathExpressionException - */ - protected String getCurrentPassword() throws XPathExpressionException { - return mbServer.getContextTenant().getContextUser().getPassword(); - } - - /** - * Return the admin user name of current context tenant - * @return admin name as a String - * @throws XPathExpressionException - */ - protected String getAdminUserName() throws XPathExpressionException { - return mbServer.getContextTenant().getTenantAdmin().getUserName(); - } - - /** - * Get the password of admin user of current context tenant - * @return password as a String - * @throws XPathExpressionException - */ - protected String getAdminPassword() throws XPathExpressionException { - return mbServer.getContextTenant().getTenantAdmin().getPassword(); - } - - /** - * Restart the testing MB server with WSO2 domain name set under user management - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws IOException - */ - protected void restartServerWithDomainName() throws AutomationUtilException, XPathExpressionException, - IOException { - serverManager = new ServerConfigurationManager(mbServer); - - // Replace the user-mgt.xml with the new configuration and restarts the server. - serverManager.applyConfiguration(new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + - "artifacts" + File.separator + "mb" + File.separator + "config" + File.separator - + "user-mgt.xml"), new File(ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + - "user-mgt.xml"), true, true); - } - - /** - * Restart the server with admin role name set to "administrator" instead of default value admin. - * - * @throws IOException - * @throws AutomationUtilException - * @throws XPathExpressionException - */ - protected void restartServerWithDifferentAdminRoleName() throws IOException, AutomationUtilException, - XPathExpressionException { - serverManager = new ServerConfigurationManager(mbServer); - - // Replace the user-mgt.xml with the new configuration and restarts the server. - serverManager.applyConfiguration(new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + - "artifacts" + File.separator + "mb" + File.separator + "config" + File.separator - + "user-mgt-admin-role-name.xml"), new File(ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + - "user-mgt.xml"), true, true); - } - - /** - * Restart the server with previous configuration. - * - * @throws IOException - * @throws AutomationUtilException - */ - protected void restartInPreviousConfiguration() throws IOException, AutomationUtilException { - serverManager.restoreToLastConfiguration(true); - } - - /** - * Gets the default login url for management console. - * @return The URL. - */ - protected String getLoginURL() throws XPathExpressionException { - return mbServer.getContextUrls().getWebAppURLHttps() + "/carbon/admin/login.jsp"; - } - - /** - * Logs out from MB management console - * - * @return The login page. - * @throws IOException - */ - protected LoginPage logout() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("home.mb.sign.out.xpath"))).click(); - return new LoginPage(driver); - } - - /** - * Returns MQTT port based on automation.xml configurations - * @throws XPathExpressionException - */ - protected Integer getMQTTPort() throws XPathExpressionException { - return Integer.parseInt(mbServer.getInstance().getPorts().get("mqtt")); - } - - /** - * Returns MQTT port based on automation.xml configurations - * @throws XPathExpressionException - */ - protected Integer getAMQPPort() throws XPathExpressionException { - return Integer.parseInt(mbServer.getInstance().getPorts().get("amqp")); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/UIElementMapper.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/UIElementMapper.java deleted file mode 100644 index a7dc5b62..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/UIElementMapper.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Properties; - -/** - * Read mapper.properties file and load it's uiElements into Properties object. - */ -public class UIElementMapper { - public static final Properties uiProperties = new Properties(); - private static UIElementMapper instance; - - static { - try { - setStream(); - instance = new UIElementMapper(); - } catch (IOException ioe){ - throw new ExceptionInInitializerError("mapper stream not set. Failed to read file"); - } - } - - private UIElementMapper() { - } - - public static UIElementMapper getInstance() { - return instance; - } - - private static Properties setStream() throws IOException { - InputStream inputStream = UIElementMapper.class.getResourceAsStream("/mapper.properties"); - if (inputStream.available() > 0) { - uiProperties.load(inputStream); - inputStream.close(); - return uiProperties; - } - return null; - } - - public String getElement(String key) { - return uiProperties.getProperty(key); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/MBPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/MBPage.java deleted file mode 100644 index 1ca92804..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/MBPage.java +++ /dev/null @@ -1,83 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.configure.ConfigurePage; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.monitor.MonitorPage; - -import java.io.IOException; - -/** - * The base class for all the pages. Navigation functions that can be done from any page should - * be implemented within this class (to avoid duplication of common functionality throughout - * pages). - */ -public abstract class MBPage { - - /** - * Web driver used by selenium framework to do UI operations pragmatically - */ - protected WebDriver driver; - - /** - * Constructor. Takes the reference of web driver instance. - * - * @param driver The selenium Web Driver - */ - protected MBPage(WebDriver driver) { - this.driver = driver; - } - - /** - * Selects a Configuration tab and returns the configuration tab related page - * - * @return ConfigurePage The configuration page. - * @throws IOException - */ - public ConfigurePage getConfigurePage() throws IOException { - driver.findElement(By.id(UIElementMapper.getInstance().getElement("configure.tab.id"))).click(); - return new ConfigurePage(driver); - } - - /** - * Selects the Monitor tab and returns the monitor tab related page - * - * @return MonitorPage The monitoring page. - * @throws IOException - */ - public MonitorPage getMonitorPage() throws IOException { - driver.findElement(By.id(UIElementMapper.getInstance().getElement("mb.tab.button.monitor.id"))).click(); - return new MonitorPage(driver); - } - - /** - * Log out from current account and returns the LoginPage - * - * @return LoginPage The login page. - * @throws IOException - */ - public LoginPage logout() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("home.mb.sign.out.xpath"))).click(); - return new LoginPage(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddNewTenantPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddNewTenantPage.java deleted file mode 100644 index c958fa2f..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddNewTenantPage.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.util.List; - -/** - * Abstraction of the Add new tenant page of the UI. - */ -public class AddNewTenantPage { - - private static final Log log = LogFactory.getLog(AddNewTenantPage.class); - private WebDriver driver; - - public AddNewTenantPage(WebDriver driver) { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("home.dashboard.middle.text"))).getText().contains("Register A New Organization")) { - throw new IllegalStateException("Not in add new tenant page."); - } - } - - /** - * Add a new tenant - * @param domain domain of the tenant - * @param firstName tenant first name - * @param lastName tenant last name - * @param adminUserName admin users' user name - * @param adminPassword admin users' password - * @param adminPasswordRepeat admin users' password (if repeat password doesn't match operation - * must be unsuccessful) - * @param adminEmail admin users' email - * @return true if tenant successfully created. false otherwise - */ - public boolean add(final String domain, final String firstName, final String lastName, - final String adminUserName, final String adminPassword, final String adminPasswordRepeat, final String adminEmail) { - boolean isSuccessful = false; - - // fill the form - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.domain.field.id"))).sendKeys(domain); - //todo implement usage plan select -// driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.usage.plan.field.id"))).(usagePlanName); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.first.name.field.id"))).sendKeys(firstName); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.last.name.field.id"))).sendKeys(lastName); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.admin.user.name.field.id"))).sendKeys(adminUserName); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.admin.password.field.id"))).sendKeys(adminPassword); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.admin.password.repeat.field.id"))).sendKeys(adminPasswordRepeat); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("add.tenant.admin.email.field.id"))).sendKeys(adminEmail); - - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("add.tenant.save.button.xpath"))).click(); - - // handle confirmation popup - String dialog = driver.getWindowHandle(); - driver.switchTo().window(dialog); - - if (driver.findElement(By.id(UIElementMapper.getInstance().getElement("mb.popup.dialog.id"))).getText().contains("successful")) { - isSuccessful = true; // got success confirmation box - } - - // find ok button in popup dialog and click it - List buttonList = driver.findElements(By.tagName("button")); - for (WebElement okButton : buttonList) { - if (okButton.getText().compareToIgnoreCase("ok") == 0) { - okButton.click(); - break; - } - } - - return isSuccessful; - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep1Page.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep1Page.java deleted file mode 100644 index c9a8308a..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep1Page.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -public class AddRoleStep1Page { - - private static final Log log = LogFactory.getLog(AddRoleStep1Page.class); - private WebDriver driver; - - public AddRoleStep1Page(WebDriver driver){ - this.driver = driver; - if (!driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.role.step1.sub.header.xpath"))) - .getText().contains("Step 1 : Enter role details")) { - throw new IllegalStateException("This is not the Add Role step1 page"); - } - } - - public void setDetails(final String roleName) { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.role.step1.name.field.xpath"))).sendKeys(roleName); - } - - public AddRoleStep2Page next() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.role.step1.next.button.xpath"))).click(); - return new AddRoleStep2Page(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep2Page.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep2Page.java deleted file mode 100644 index 85dd1532..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep2Page.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.util.List; - -public class AddRoleStep2Page { - - private static final Log log = LogFactory.getLog(AddRoleStep2Page.class); - private WebDriver driver; - - public AddRoleStep2Page(WebDriver driver){ - this.driver = driver; - if (!driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.role.step2.sub.header.xpath"))) - .getText().contains("Step 2 : Select permissions to add to Role")) { - throw new IllegalStateException("This is not the Add Role step2 page"); - } - } - - public void selectPermission(String permissionXpath) { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement(permissionXpath))).click(); - } - - public AddRoleStep3Page next() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.role.step2.next.button.xpath"))).click(); - return new AddRoleStep3Page(driver); - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep3Page.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep3Page.java deleted file mode 100644 index ff412b7f..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddRoleStep3Page.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.util.List; - -public class AddRoleStep3Page { - - private static final Log log = LogFactory.getLog(AddRoleStep3Page.class); - private WebDriver driver; - - public AddRoleStep3Page(WebDriver driver){ - this.driver = driver; - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("usr.mgt.add.role.step3.sub.header.xpath"))).getText().contains("Step 3")) { - throw new IllegalStateException("This is not the Add Role step3 page"); - } - } - - public boolean finish(){ - boolean isSuccessful = false; - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.role.step3.finish.button.xpath"))).click(); - // handle delete confirmation popup - String dialog = driver.getWindowHandle(); - driver = driver.switchTo().window(dialog); - - WebElement e = driver.findElement(By.id("messagebox-info")); - if(e.findElement(By.tagName("p")).getText().contains("is added successfully")) { - isSuccessful = true; - } - // find ok button in popup dialog and click it - List buttonList = driver.findElements(By.tagName("button")); - for (WebElement okButton : buttonList) { - if (okButton.getText().compareToIgnoreCase("ok") == 0) { - okButton.click(); - break; - } - } - dialog = driver.getWindowHandle(); - driver = driver.switchTo().window(dialog); - return isSuccessful; - } - - public void selectUsers(List userXpathList) { - for(String userXpath: userXpathList){ - driver.findElement(By.xpath(userXpath)).click(); - } - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddSecondaryUserStorePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddSecondaryUserStorePage.java deleted file mode 100644 index 4b05bd12..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddSecondaryUserStorePage.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -public class AddSecondaryUserStorePage { - private static final Log log = LogFactory.getLog(AddSecondaryUserStorePage.class); - private WebDriver driver; - private UIElementMapper uiElementMapper; - - public AddSecondaryUserStorePage(WebDriver driver) throws IOException { - this.driver = driver; - this.uiElementMapper = UIElementMapper.getInstance(); - // Check that we're on the right page. - if (!driver.getCurrentUrl().contains("/userstore_config/userstore-config.jsp")) { - throw new IllegalStateException("This is not the \"Add Secondary User Store\" page"); - } - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddUserStep1Page.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddUserStep1Page.java deleted file mode 100644 index 72a900c2..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddUserStep1Page.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -public class AddUserStep1Page { - private static final Log log = LogFactory.getLog(AddUserStep1Page.class); - private WebDriver driver; - - public AddUserStep1Page(WebDriver driver){ - this.driver = driver; - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("usr.mgt.add.user.step1.sub.header.xpath"))).getText().contains("Step 1 : Enter user name")) { - throw new IllegalStateException("This is not the add users step1 page"); - } - } - - public void addUserDetails(final String userName, final String password, final String repeatPassword) { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.user.step1.user.name.field.xpath"))) - .sendKeys(userName); - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.user.step1.password.field.xpath"))) - .sendKeys(password); - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.user.step1.password.repeat.field.xpath"))) - .sendKeys(repeatPassword); - } - - public AddUserStep2Page next() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.user.step1.next.button.xpath"))).click(); - return new AddUserStep2Page(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddUserStep2Page.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddUserStep2Page.java deleted file mode 100644 index 349b05de..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/AddUserStep2Page.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -import java.util.List; - -/** - * UI test class related to the second page of the queue add wizard of Management console - */ -public class AddUserStep2Page extends MBPage{ - - private static final Log log = LogFactory.getLog(AddUserStep2Page.class); - - /** - * Checks whether the current page is the correct add user step 2 page. if not throws a - * runtime exception (IllegalStateException) - * @param driver WebDriver - */ - public AddUserStep2Page(WebDriver driver) { - super(driver); - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("usr.mgt.add.user.step2.sub.header.xpath"))).getText().contains("Step 2 : Select roles of the user")) { - throw new IllegalStateException("This is not the Add User step2 page"); - } - } - - public boolean selectRole(final String role){ - WebElement tableData = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("usr.mgt.add.user.step2.select.roles.td.xpath"))); - List inputList = tableData.findElements(By.tagName("input")); - for(WebElement e: inputList){ - if((e.getAttribute("type").compareTo("checkbox") == 0) && (e.getAttribute("value").compareTo(role) == 0)) { - e.click(); - return true; - } - } - return false; - } - - public boolean finish() { - boolean isSuccessful = false; - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("usr.mgt.add.user.step2.finish.button"))).click(); - String dialog = driver.getWindowHandle(); - driver = driver.switchTo().window(dialog); - - WebElement e = driver.findElement(By.id("messagebox-info")); - if(e.findElement(By.tagName("p")).getText().contains("is added successfully")) { - isSuccessful = true; - } - - // find ok button in popup dialog and click it - List buttonList = driver.findElements(By.tagName("button")); - for (WebElement okButton : buttonList) { - if (okButton.getText().compareToIgnoreCase("ok") == 0) { - okButton.click(); - break; - } - } - dialog = driver.getWindowHandle(); - driver = driver.switchTo().window(dialog); - return isSuccessful; - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/ConfigurePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/ConfigurePage.java deleted file mode 100644 index 62330ea1..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/ConfigurePage.java +++ /dev/null @@ -1,79 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -/** - * Abstraction of the Configuration tab page of the UI. - */ -public class ConfigurePage { - private WebDriver driver; - - /** - * Initializes configuration page. - * @param driver The selenium web driver. - * @throws IOException - */ - public ConfigurePage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - String attr = driver.findElement(By.id(UIElementMapper.getInstance().getElement("configure.panel.button.id"))).getAttribute("class"); - - if (attr.compareTo("menu-panel-buttons selected") != 0) { - throw new IllegalStateException("This is not the Configure page"); - } - } - - /** - * User store Management store page is selected from UI and returned - * - * @return The user management store page. - * @throws IOException - */ - public UserStoreManagementPage getUserStoreManagementPage() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("configure.user.store.management.xpath"))).click(); - return new UserStoreManagementPage(driver); - } - - /** - * New Tenant creation page link is selected from Configure tab page in UI and AddNewTenantPage - * is returned - * - * @return The tenant adding page. - */ - public AddNewTenantPage getAddNewTenantPage() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("configure.multitenancy.add.new.tenant.xpath"))).click(); - return new AddNewTenantPage(driver); - } - - /** - * User Management page link is selected from Configure tab page in UI - * - * @return The user management page to add users and roles. - */ - public UserManagementPage getUserManagementPage() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("configure.users.and.roles.button.xpath"))).click(); - return new UserManagementPage(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/TenantHomePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/TenantHomePage.java deleted file mode 100644 index cf88eda8..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/TenantHomePage.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -/** - * This page represents Tenant Home page in MB management console. - */ -public class TenantHomePage { - - private static final Log log = LogFactory.getLog(TenantHomePage.class); - private WebDriver driver; - - /** - * This constructor test whether the web driver is in correct page. - * @param driver WebDriver - */ - public TenantHomePage(WebDriver driver){ - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tenant.home.page.menu.header.xpath"))).getText().contains("Home")) { - throw new IllegalStateException("This is not the tenant home page"); - } - } - - /** - * Logout from home page. Login page is returned - * @return LoginPage - * @throws IOException - */ - public LoginPage logout() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.tenant.sign.out.xpath"))).click(); - return new LoginPage(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/UserManagementPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/UserManagementPage.java deleted file mode 100644 index 0b4838c4..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/UserManagementPage.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -/** - * This class represents the user management class. - */ -public class UserManagementPage { - private WebDriver driver; - - /** - * Creates a user management class. - * - * @param driver The selenium web driver. - */ - public UserManagementPage(WebDriver driver) { - this.driver = driver; - - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("configure.user.mgt.header.xpath"))).getText().contains("Add Users and Roles")) { - - throw new IllegalStateException("This is not the User Management page"); - } - } - - /** - * Gets the first page in creating a new role - * - * @return The page that appears first when creating a new role - */ - public AddRoleStep1Page getAddRolePage() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("configure.usr.mgt.roles.link.xpath"))) - .click(); - return new AddRoleStep1Page(driver); - } - - /** - * Gets the first page in creating a new new - * - * @return The page that appears first when creating a new user - */ - public AddUserStep1Page getAddNewUserPage() { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("configure.usr.mgt.users.link.xpath"))) - .click(); - return new AddUserStep1Page(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/UserStoreManagementPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/UserStoreManagementPage.java deleted file mode 100644 index 1dd90e7c..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/configure/UserStoreManagementPage.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.common.utils.ui.pages.configure; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.pages.configure.AddSecondaryUserStorePage; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -public class UserStoreManagementPage { - private static final Log log = LogFactory.getLog(UserStoreManagementPage.class); - private WebDriver driver; - private UIElementMapper uiElementMapper; - - public UserStoreManagementPage(WebDriver driver) throws IOException { - this.driver = driver; - this.uiElementMapper = UIElementMapper.getInstance(); - // Check that we're on the right page. - if (!driver.findElement(By.id(uiElementMapper.getElement("configure.user.store.management.header.id"))) - .getText().contains("Add New User Store")) { - throw new IllegalStateException("This is not the User Store Management page"); - } - } - - public AddSecondaryUserStorePage addSecondaryUserStore() throws IOException { - driver.findElement(By.xpath(uiElementMapper.getElement("configure.user.store.management.add.secondary.userstore"))).click(); - return new AddSecondaryUserStorePage(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/login/LoginPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/login/LoginPage.java deleted file mode 100644 index 8692735c..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/login/LoginPage.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.login; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.pages.configure.TenantHomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -/** - * Login page class - contains methods to login to wso2 products. - */ -public class LoginPage { - private static final Log log = LogFactory.getLog(LoginPage.class); - private WebDriver driver; - - public LoginPage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!(driver.getCurrentUrl().contains("login.jsp"))) { - // Alternatively, we could navigate to the login page, perhaps logging out first - throw new IllegalStateException("This is not the login page"); - } - } - - /** - * Provide facility to log into the products using user credentials - * - * @param userName login user name - * @param password login password - * @return reference to Home page - * @throws java.io.IOException if mapper.properties file not found - */ - public HomePage loginAs(final String userName, final String password) throws IOException { - log.info("Login as " + userName); - WebElement userNameField = driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("login.username.id"))); - WebElement passwordField = driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("login.password.id"))); - userNameField.sendKeys(userName); - passwordField.sendKeys(password); - driver.findElement(By.className(UIElementMapper.getInstance().getElement("login.sign" + - ".in.button"))).click(); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("main.tab.id"))).click(); - return new HomePage(driver); - } - - public TenantHomePage loginAsTenant(final String userName, final String domain, final String password){ - log.info("Login as " + userName); - WebElement userNameField = driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("login.username.id"))); - WebElement passwordField = driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("login.password.id"))); - userNameField.sendKeys(userName + "@" + domain); - passwordField.sendKeys(password); - driver.findElement(By.className(UIElementMapper.getInstance().getElement("login.sign.in" + - ".button"))).click(); - driver.findElement(By.id(UIElementMapper.getInstance().getElement("main.tab.id"))).click(); - return new TenantHomePage(driver); - - - } - -} - - - - - - - - - - - diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/DLCBrowsePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/DLCBrowsePage.java deleted file mode 100644 index a028ec1c..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/DLCBrowsePage.java +++ /dev/null @@ -1,81 +0,0 @@ -/* -* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -/** - * This page represents 'Dead Letter Channel -> Browse' page in MB management console. - */ -public class DLCBrowsePage { - private static final Log log = LogFactory.getLog(DLCBrowsePage.class); - private WebDriver driver; - - /** - * Retrieve Page consists DeadLetterChannel - * - * @param driver selenium web driver used to run the test - * @throws IOException if mapper.properties file not found - */ - public DLCBrowsePage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("home.dlc.header.xpath"))).getText() - .contains("Dead Letter Channel")) { - throw new IllegalStateException("This is not the DLC page"); - } - } - - /** - * Browse for content of DeadLetter Channel - * Retrieve 'Dead Letter Channel -> Browse -> Queue Content' page - * - * @return Content of DeadLetter Channel - * @throws IOException if mapper.properties file not found - */ - public DLCContentPage getDLCContent() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.browse.button.xpath"))).click(); - return new DLCContentPage(driver); - } - - /** - * Check whether dead letter channel created or not - * - * @return true when dead letter channel created - */ - public boolean isDLCCreated() { - boolean isDLCCreated = false; - WebElement queueTable; - queueTable = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.xpath"))); - if (queueTable != null) { - isDLCCreated = true; - } - return isDLCCreated; - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/DLCContentPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/DLCContentPage.java deleted file mode 100644 index c1ae5957..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/DLCContentPage.java +++ /dev/null @@ -1,177 +0,0 @@ -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; -import java.util.List; - -/** - * This page represents ' Dead Letter Channel -> Browse -> Queue Content' page in MB management console. - */ -public class DLCContentPage { - private static final Log log = LogFactory.getLog(DLCContentPage.class); - private WebDriver driver; - - /** - * Retrieve page consists content of DeadLetter Channel - * - * @param driver selenium web driver used to run the test - * @throws IOException if mapper.properties file not found - */ - public DLCContentPage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.queue.content"))).getText() - .contains("Queue Content: DeadLetterChannel")) { - throw new IllegalStateException("This is not the DLC Queue Content page"); - } - } - - /** - * Test deleting messages of DeadLetter Channel - */ - public String deleteFunction() throws IOException { - String deletingMessageID; - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.choose.box.xpath"))).click(); - deletingMessageID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.first.message.id"))).getText(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.delete.button"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.confirm"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.success"))).click(); - return deletingMessageID; - } - - /** - * Delete all the messages in DeadLetter Channel - */ - public void deleteAllDLCMessages() { - - // Get all elements in dlc table - WebElement dlcTable = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.content.table"))); - // Get all the TR elements from the table - List allDlcRows = dlcTable.findElements(By.tagName("tr")); - - //A row represents a message in DLC - //Therefore comparing the row count with zero is used to see if the message list is empty - if (allDlcRows.size() > 0) { - log.info("delete all dlc messages"); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.choose.all.box.xpath"))) - .click(); - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.dlc.browse.table.delete.button"))) - .click(); - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.dlc.browse.function.confirm"))) - .click(); - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.dlc.browse.function.success"))) - .click(); - } - } - - /** - * Test restoring messages of DeadLetter Channel - */ - public String restoreFunction() throws IOException { - String restoringMessageID; - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.choose.box.xpath"))).click(); - restoringMessageID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.first.message.id"))).getText(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.restore.button"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.confirm"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.success"))).click(); - - return restoringMessageID; - } - - /** - * Test rerouting messages of DeadLetter Channel - */ - public String rerouteFunction(String qName) throws IOException { - String reroutingMessageID; - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.choose.box.xpath"))).click(); - reroutingMessageID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.first.message.id"))).getText(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.button"))).click(); - //select rerouteTestQueue to reroute message - WebElement select = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.queue.select"))); - List options = select.findElements(By.tagName(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.queue.option"))); - for (WebElement option : options) { - if (option.getText().equals(qName)) { - option.click(); - break; - } - } - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.confirm"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.confirm"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.success"))).click(); - return reroutingMessageID; - } - - /** - * Test reroute all messages function in DLC when its enabled. - * - * @param sourceDestination The destination from which the messages needs to be transferred. - * @param targetDestination The destination which the messages need to be transferred to. - * @throws IOException - */ - public void rerouteAllFunction(String sourceDestination, String targetDestination) throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.all.button"))).click(); - - // Selection source destination - WebElement sourceDestinationDropDown = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.all.source.select"))); - List sourceDestinationOptions = sourceDestinationDropDown.findElements(By.tagName(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.queue.option"))); - for (WebElement option : sourceDestinationOptions) { - if (option.getText().equals(sourceDestination)) { - option.click(); - break; - } - } - - // Selection target destination - WebElement targetDestinationDropDown = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.all.target.select"))); - List targetDestinationOptions = targetDestinationDropDown.findElements(By.tagName(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.queue.option"))); - for (WebElement option : targetDestinationOptions) { - if (option.getText().equals(targetDestination)) { - option.click(); - break; - } - } - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.table.reroute.confirm"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.confirm"))).click(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.function.success"))).click(); - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/HomePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/HomePage.java deleted file mode 100644 index 0bcc97e5..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/HomePage.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -import java.io.IOException; - -/** - * Home page class holds the information of product page you got once login - * NOTE: To navigate to a page Don't use direct links to pages. To ensure there is a UI element to navigate to - * that page. - */ -public class HomePage extends MBPage { - - /** - * Checks whether the current page is the home page. if not throws a runtime exception - * - * @param driver WebDriver - */ - public HomePage(WebDriver driver) { - super(driver); - // Check that we're on the right page. - if (!driver.findElement(By.id( - UIElementMapper.getInstance().getElement("home.dashboard.middle.text"))).getText() - .contains("Home")) { - throw new IllegalStateException("This is not the home page"); - } - } - - /** - * Clicks on the dead letter channel browsing page. - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.DLCBrowsePage} - * @throws IOException - */ - public DLCBrowsePage getDLCBrowsePage() throws IOException { - this.clickOnMenuItem("home.mb.dlc.browse.xpath"); - return new DLCBrowsePage(driver); - } - - /** - * Clicks on the queue browsing page. - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage} - * @throws IOException - */ - public QueuesBrowsePage getQueuesBrowsePage() throws IOException { - this.clickOnMenuItem("home.mb.queues.browse.xpath"); - return new QueuesBrowsePage(driver); - } - - /** - * Clicks on the queue browsing page. - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.QueueSubscriptionsPage} - * @throws IOException - */ - public QueueSubscriptionsPage getQueueSubscriptionsPage() throws IOException { - this.clickOnMenuItem("home.mb.queues.subscriptions.xpath"); - return new QueueSubscriptionsPage(driver); - } - - /** - * Clicks on the queue adding page. - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage} - * @throws IOException - */ - public QueueAddPage getQueueAddPage() throws IOException { - this.clickOnMenuItem("home.mb.queues.add.xpath"); - return new QueueAddPage(driver); - } - - /** - * Clicks on the topic adding page. - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.TopicAddPage} - * @throws IOException - */ - public TopicAddPage getTopicAddPage() throws IOException { - this.clickOnMenuItem("home.mb.topics.add.xpath"); - return new TopicAddPage(driver); - } - - /** - * Click on the topic browsing page - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.TopicsBrowsePage} - * @throws IOException - */ - public TopicsBrowsePage getTopicsBrowsePage() throws IOException { - this.clickOnMenuItem("home.mb.topics.browse.xpath"); - return new TopicsBrowsePage(driver); - } - - /** - * Clicks on the topic adding page - * - * @param xPathForTopicMenuItem The xPath of the topic adding page. - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.TopicAddPage} - */ - public TopicAddPage getTopicAddPage(String xPathForTopicMenuItem) { - this.clickOnMenuItem(xPathForTopicMenuItem); - return new TopicAddPage(driver); - } - - /** - * Click on the topic browsing page - * - * @param xPathForTopicMenuItem The xPath of the topic browsing page. - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.TopicsBrowsePage} - * @throws IOException - */ - public TopicsBrowsePage getTopicsBrowsePage(String xPathForTopicMenuItem) throws IOException { - this.clickOnMenuItem(xPathForTopicMenuItem); - return new TopicsBrowsePage(driver); - } - - /** - * Click on the topic subscriptions page. - * - * @return A {@link org.wso2.mb.integration.common.utils.ui.pages.main.TopicSubscriptionsPage} - * @throws IOException - */ - public TopicSubscriptionsPage getTopicSubscriptionsPage() throws IOException { - this.clickOnMenuItem("home.mb.topic.subscriptions.xpath"); - return new TopicSubscriptionsPage(driver); - } - - /** - * Clicks on a menu item with a given xPath - * - * @param xPathForMenuItem The xPath for the menu item. - */ - private void clickOnMenuItem(String xPathForMenuItem) { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement(xPathForMenuItem))) - .click(); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/MessageContentPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/MessageContentPage.java deleted file mode 100644 index dcedc9bf..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/MessageContentPage.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -/** - * This page represents 'Queues-> Browse' page in MB management console. - * - */ -public class MessageContentPage { - - private WebDriver driver; - - public MessageContentPage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.queue.content.page.header.xpath"))).getText().contains("Message Content")) { - throw new IllegalStateException("This is not the Message Content page"); - } - } - - /** - * Get the message length displayed in the text area. - * @return displayed message length - */ - public int getDisplayedMessageLength() { - return driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.message.content.textarea.xpath"))).getText().length(); - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueAddPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueAddPage.java deleted file mode 100644 index 3506dfb7..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueAddPage.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -import java.io.IOException; -import java.util.List; - -/** - * UI test class related to queue add page of Management console. - */ -public class QueueAddPage extends MBPage { - - /** - * Checks whether the current page the WebDriver is in is the correct queue add page. if not - * throws a runtime exception (IllegalStateException) - * - * @param driver WebDriver - */ - public QueueAddPage(WebDriver driver) { - super(driver); - if(!driver.findElement(By.xpath(UIElementMapper.getInstance(). - getElement("mb.add.queue.page.header.xpath"))).getText().contains("Add Queue")){ - throw new IllegalStateException("This is not the Add Queue page"); - } - } - - /** - * Adds a queue with all without changing privileges for the queue - * @param qName queue name - * @return true if successful and false otherwise - * @throws IOException - */ - public boolean addQueue(final String qName) throws IOException { - return addQueue(qName, true); - } - - /** - * Adds a queue without privileges to any role or not explicitly specified - * @param qName queue name - * @param withoutPrivileges without privileges set to roles to consume or publish - * @return true if successful and false otherwise - * @throws IOException - */ - public boolean addQueue(final String qName, boolean withoutPrivileges) throws IOException{ - boolean isSuccessful = false; - - WebElement qNameField = driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.add.queue.page.qname.field.id"))); - qNameField.sendKeys(qName); - - if(withoutPrivileges) { - - // get permission table - WebElement table = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.add.queue.page.permission.table"))); - - // get role name related publish consume checkboxes list for all the roles - List checkBoxList = table.findElements(By.tagName("input")); - - // make all the permissions unchecked - for (WebElement element: checkBoxList) { - if(element.isSelected()) { - element.click(); // uncheck checkbox - } - } - } - - driver.getWindowHandle(); - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.add.queue.page.add.button.xpath"))).click(); - String dialog = driver.getWindowHandle(); - driver.switchTo().window(dialog); - if(driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.popup.dialog.id"))).getText().contains("Queue added successfully")) { - isSuccessful =true; - } - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.add.queue.page" + - ".onqueueadd.okbutton.xpath"))).click(); - - return isSuccessful; - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueContentPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueContentPage.java deleted file mode 100644 index 909443d1..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueContentPage.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import java.io.IOException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -/** - * This page represents 'Queues-> Browse' page in MB management console. - * - */ -public class QueueContentPage { - - private static final Log log = LogFactory.getLog(QueueContentPage.class); - private WebDriver driver; - - public QueueContentPage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.queue.content.page.header.xpath"))).getText().contains("Queue Content")) { - throw new IllegalStateException("This is not the Queue Content page"); - } - } - - /** - * Navigate to message content page related to the message on the given row index within the page. (e.g. 1st row) - * @param listIndex - */ - public MessageContentPage viewFullMessage(int listIndex) throws IOException { - - String xpath = UIElementMapper.getInstance().getElement("mb.queue.content.page.row.xpath").replaceAll("#REPLACE#",String.valueOf(listIndex)); - - driver.findElement(By.xpath(xpath)).click(); - - return new MessageContentPage(this.driver); - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueSubscriptionsPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueSubscriptionsPage.java deleted file mode 100644 index 287d1608..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueueSubscriptionsPage.java +++ /dev/null @@ -1,151 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.ui.Select; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -/** - * UI test class related to queue subscriptions page of Management console. - */ -public class QueueSubscriptionsPage extends MBPage{ - - private static Log log = LogFactory.getLog(QueueSubscriptionsPage.class); - - /** - * Checks whether the current page the WebDriver is in is the correct queue subscriptions page. - * if not throws a runtime exception (IllegalStateException) - * - * @param driver WebDriver - */ - protected QueueSubscriptionsPage(WebDriver driver) { - super(driver); - if(!driver.findElement(By.xpath(UIElementMapper.getInstance(). - getElement("mb.queue.manage.subscriptions.page.xpath"))).getText().contains("Queue Subscription List")){ - throw new IllegalStateException("This is not the Queue Subscriptions page"); - } - } - - /** - * Search queue subscriptions according to the search criteria. - * - * @param queueNamePattern string pattern of the queue name (* for all) - * @param identifierPattern string pattern of the identifier (* for all) - * @param ownNodeIdIndex index of the node Id in the dropdown the subscriptions belong to - * @return number of subscriptions listed under search result - */ - public int searchQueueSubscriptions(String queueNamePattern, String identifierPattern, int ownNodeIdIndex, - boolean isNameExactMatch, boolean isIdentifierExactMatch) { - - WebElement queueNamePatternField = driver.findElement(By.name(UIElementMapper.getInstance() - .getElement("mb.search.queue.name.pattern.tag.name"))); - queueNamePatternField.clear(); - queueNamePatternField.sendKeys(queueNamePattern); - - WebElement queueNameExactMatchField = driver.findElement( - By.name(UIElementMapper.getInstance().getElement("mb.search.queue.name.exactmatch.tag.name"))); - // Set the name exact match check box state based on the test input - if (isNameExactMatch != queueNameExactMatchField.isSelected()) { - queueNameExactMatchField.click(); - } - WebElement queueIdentifierExactMatchField = driver.findElement( - By.name(UIElementMapper.getInstance().getElement("mb.search.queue.identifier.exactmatch.tag.name"))); - // Set the identifier exact match check box state based on the test input - if (isIdentifierExactMatch != queueIdentifierExactMatchField.isSelected()) { - queueIdentifierExactMatchField.click(); - } - - WebElement queueIdentifierPatternField = driver.findElement(By.name(UIElementMapper.getInstance() - .getElement("mb.search.queue.identifier.pattern.tag.name"))); - queueIdentifierPatternField.clear(); - queueIdentifierPatternField.sendKeys(identifierPattern); - - Select ownNodeIdDropdown = new Select(driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.search.queue.own.node.id.element.id")))); - ownNodeIdDropdown.selectByIndex(ownNodeIdIndex); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.search.queue.search.button.xpath"))).click(); - - return getSubscriptionCount(); - - } - - /** - * Gets the number of queue subscriptions. - * - * @return the number of subscriptions. - */ - public int getSubscriptionCount() { - int numberOfSubscribers = 0; - - WebElement subscriptionTable = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.subscriptions.queue.table.xpath"))); - // Checks whether the table exists. - if ("table".equals(subscriptionTable.getTagName())) { - numberOfSubscribers = subscriptionTable.findElement(By.tagName("tbody")).findElements(By - .tagName("tr")).size(); - } - if (numberOfSubscribers == 0) { - log.warn("Queue Subscriptions table does not exists."); - } - return numberOfSubscribers; - } - - /** - * Close the first subscription out of the subscriptions listed on queue subscriptions page - * - * @return true if successful and false otherwise - */ - public boolean closeTopSubscription() { - - String deletingMessageID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.subscriptions.table.delete.subid"))).getText(); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.subscriptions.table.delete.button"))).click(); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.subscriptions.close.confirm"))).click(); - boolean successMessageReceived = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.subscription.close.result"))).getText() - .contains("Successfully closed subscription"); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.subscription.close.result.confirm"))).click(); - - boolean queueSubscriptionSuccessfullyRemoved = false; - - String firstSubscriptionIDAfterDelete = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.subscriptions.table.delete.subid"))).getText(); - - if(!(firstSubscriptionIDAfterDelete.equals(deletingMessageID)) && successMessageReceived) { - queueSubscriptionSuccessfullyRemoved = true; - } - - return queueSubscriptionSuccessfullyRemoved; - - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueuesBrowsePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueuesBrowsePage.java deleted file mode 100644 index f7a0d9e6..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/QueuesBrowsePage.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; -import java.util.List; - -/** - * This page represents 'Queue-> Browse' page in MB management console. - */ -public class QueuesBrowsePage { - - private WebDriver driver; - private static final Log log = LogFactory.getLog(QueuesBrowsePage.class); - - public QueuesBrowsePage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.list.page.header.xpath"))).getText().contains("Queue List")) { - throw new IllegalStateException("This is not the Queue List page"); - } - } - - /** - * Check whether the queue with the given queue name is present in the UI - * @param queueName queue name - * @return true if the queue is present, false otherwise - */ - public boolean isQueuePresent(final String queueName) { - return getTableRowByQueueName(queueName) != null; - } - - /** - * Delete queue from the UI delete option - * @param queueName queue name - * @return true if delete successful, false otherwise - */ - public boolean deleteQueue(final String queueName) { - - boolean isSuccessful = false; - WebElement row = getTableRowByQueueName(queueName); - if (row == null) { - log.warn("unable to find the table row for queue name: " + queueName); - return false; - } - - List columnList = row.findElements(By.tagName("td")); - WebElement deleteButton = columnList.get(5).findElement(By.tagName("a")); - deleteButton.click(); - - // handle delete confirmation popup - String confirmation = driver.getWindowHandle(); - driver.switchTo().window(confirmation); - - // find yes button in confirmation dialog and click it - List confirmationButtonList = driver.findElements(By.tagName("button")); - for (WebElement yesButton : confirmationButtonList) { - if (yesButton.getText().compareToIgnoreCase("yes") == 0) { - yesButton.click(); - break; - } - } - - // handle delete dialog popup - String dialog = driver.getWindowHandle(); - driver.switchTo().window(dialog); - - // find ok button in popup dialog and click it - List dialogButtonList = driver.findElements(By.tagName("button")); - for (WebElement okButton : dialogButtonList) { - if (okButton.getText().compareToIgnoreCase("ok") == 0) { - okButton.click(); - isSuccessful = !isQueuePresent(queueName); // if Queue present failure - break; - } - } - - return isSuccessful; - } - - /** - * Gets message count of a specific queue - * - * @param queueName name of the queue - * @return the number of messages - */ - public int getMessageCount(String queueName) { - WebElement row = getTableRowByQueueName(queueName); - if (row == null) { - log.warn("Unable to find the table row for queue name: " + queueName); - } - - if (row != null) { - List columnList; - columnList = row.findElements(By.tagName("td")); - return Integer.parseInt(columnList.get(1).getText()); - } else { - log.warn("Unable to get message count."); - return -1; - } - } - - /** - * Navigates the browser to 'Queue Content' page where user can see messages it contains etc. - * - * @param qName name of the Queue to browse - * @return true if the navigate operation is successful, false otherwise - */ - public QueueContentPage browseQueue(final String qName) throws IOException { - - WebElement row = getTableRowByQueueName(qName); - if (row == null) { - log.warn("unable to find the table row for queue name: " + qName); - return null; // can't find the queue. - } - - List columnList = row.findElements(By.tagName("td")); - WebElement browseButton = columnList.get(2).findElement(By.tagName("a")); - if (browseButton != null) { - browseButton.click(); - } - return new QueueContentPage(this.driver); - } - - /** - * Retrieve the Web Element of the given queue name from available queues table in UI - * @param queueName queue name - * @return Web Element row of the given queue name item in UI, null returned if not found - */ - private WebElement getTableRowByQueueName(final String queueName) { - - // if no queues available return null - if (driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.queue.list.page.workarea.id"))).getText() - .contains("No queues are created")) { - - return null; - } - - WebElement queueTable = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.queue.list.table.body.xpath"))); - List rowElementList = queueTable.findElements(By.tagName("tr")); - - // go through table rows and find the queue - for (WebElement row : rowElementList) { - List columnList = row.findElements(By.tagName("td")); - // Assumption: there are six columns. Delete buttons are in the sixth column - if ((columnList.size() == 6) && columnList.get(0).getText().equals(queueName)) { - return row; - } - } - return null; - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicAddPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicAddPage.java deleted file mode 100644 index 34eea0ad..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicAddPage.java +++ /dev/null @@ -1,80 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -/** - * The class for topic creation page. Provides functions available in the topic creation page. - */ -public class TopicAddPage extends MBPage { - /** - * Constructor. Takes the reference of web driver instance. - * - * @param driver WebDriver - */ - protected TopicAddPage(WebDriver driver) { - super(driver); - if (!driver.findElement(By.xpath(UIElementMapper.getInstance(). - getElement("mb.add.topics.page.header.xpath"))).getText().contains("Add Topic")) { - throw new IllegalStateException("This is not the Add Topic page"); - } - } - - /** - * Adds a new topic. - * - * @param topicName The new topic name. - * @return true if topic successfully added, false otherwise. - */ - public boolean addTopic(String topicName) { - boolean isSuccessful = false; - - // Setting topic name value - WebElement topicNameField = driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.add.topics.page.topic.name.field.id"))); - topicNameField.sendKeys(topicName); - - driver.getWindowHandle(); - - // Clicking the "Add Topic" button - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.add.topics.page.add.button.xpath"))) - .click(); - String dialog = driver.getWindowHandle(); - driver.switchTo().window(dialog); - - // Checking if valid message is prompt on the dialog - if (driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.popup.dialog.id"))).getText().contains("Topic added successfully")) { - isSuccessful = true; - } - - // Clicking ok button of the dialog - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.add.topic.page.ontopicadd.okbutton.xpath"))).click(); - - return isSuccessful; - } - -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicSubscriptionsPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicSubscriptionsPage.java deleted file mode 100644 index 7e1a2677..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicSubscriptionsPage.java +++ /dev/null @@ -1,228 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.openqa.selenium.support.ui.Select; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -import java.util.List; - -/** - * The class for topic subscriptions. Provides functions available in the topic subscriptions page. - */ -public class TopicSubscriptionsPage extends MBPage { - private static final Log log = LogFactory.getLog(QueueContentPage.class); - - /** - * Constructor. Takes the reference of web driver instance. - * - * @param driver The selenium Web Driver - */ - protected TopicSubscriptionsPage(WebDriver driver) { - super(driver); - - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.subscriptions.topics.page.header.xpath"))).getText().contains("Topic Subscription List")) { - throw new IllegalStateException("This is not the Topic Subscriptions page"); - } - } - - /** - * Gets the number of durable active subscriptions. - * - * @return The number of subscriptions. - */ - public int getDurableActiveSubscriptionsCount() { - List tempDurableActiveTables = driver.findElements(By.xpath(UIElementMapper.getInstance() - .getElement("mb.subscriptions.topics.page.durable.active.table.xpath"))); - // Checks whether the table exists. - if (0 < tempDurableActiveTables.size()) { - return tempDurableActiveTables.get(0).findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(); - } else { - log.warn("Durable Active Subscriptions table does not exists."); - return 0; - } - } - - /** - * Gets the number of durable in-active subscriptions. - * - * @return The number of subscriptions. - */ - public int getDurableInActiveSubscriptionsCount() { - List tempDurableInActiveTables = driver.findElements(By.xpath(UIElementMapper.getInstance() - .getElement("mb.subscriptions.topics.page.durable.inactive.table.xpath"))); - // Checks whether the table exists. - if (0 < tempDurableInActiveTables.size()) { - return tempDurableInActiveTables.get(0).findElement(By.tagName("tbody")).findElements(By.tagName("tr")).size(); - } else { - log.warn("Durable In-Active Subscriptions table does not exists."); - return 0; - } - } - - /** - * Search topic subscriptions according to the search criteria. - * - * @param queueNamePattern string pattern of the topic name (* for all) - * @param identifierPattern string pattern of the identifier (* for all) - * @param ownNodeIdIndex index of the node Id in the dropdown the subscriptions belong to - * @return number of subscriptions listed under search result - */ - public void searchTopicSubscriptions(String queueNamePattern, String identifierPattern, int - ownNodeIdIndex, boolean isNameExactMatch, boolean isIdentifierExactMatch) { - - WebElement queueNamePatternField = driver.findElement(By.name(UIElementMapper.getInstance() - .getElement("mb.search.topic.name.pattern.tag.name"))); - queueNamePatternField.clear(); - queueNamePatternField.sendKeys(queueNamePattern); - - WebElement queueIdentifierPatternField = driver.findElement(By.name(UIElementMapper.getInstance() - .getElement("mb.search.topic.identifier.pattern.tag.name"))); - queueIdentifierPatternField.clear(); - queueIdentifierPatternField.sendKeys(identifierPattern); - - WebElement topicNameExactMatchField = driver.findElement( - By.name(UIElementMapper.getInstance().getElement("mb.search.topic.name.exactmatch.tag.name"))); - // Set the name exact match check box state based on the test input - if (isNameExactMatch != topicNameExactMatchField.isSelected()) { - topicNameExactMatchField.click(); - } - WebElement topicIdentifierExactMatchField = driver.findElement( - By.name(UIElementMapper.getInstance().getElement("mb.search.topic.identifier.exactmatch.tag.name"))); - // Set the identifier exact match check box state based on the test input - if (isIdentifierExactMatch != topicIdentifierExactMatchField.isSelected()) { - topicIdentifierExactMatchField.click(); - } - - Select ownNodeIdDropdown = new Select(driver.findElement(By.id(UIElementMapper.getInstance() - .getElement("mb.search.topic.own.node.id.element.id")))); - ownNodeIdDropdown.selectByIndex(ownNodeIdIndex); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.search.topic.search.button.xpath"))).click(); - - } - - /** - * Gets the number of temporary active subscriptions. - * - * @return The number of subscriptions. - */ - public int getNonDurableSubscriptionsCount() { - int numberOfSubscribers = 0; - List tempNonDurableActiveTables = driver.findElements(By.xpath(UIElementMapper.getInstance() - .getElement("mb.subscriptions.topics.page.temporary.table.xpath"))); - // Checks whether the table exists. - if (0 < tempNonDurableActiveTables.size()) { - for (WebElement tempNonDurableActiveTable : tempNonDurableActiveTables) { - if ("table".equals(tempNonDurableActiveTable.getTagName())) { - numberOfSubscribers = tempNonDurableActiveTable.findElement(By.tagName("tbody")).findElements(By - .tagName("tr")).size(); - } - } - - } - - if (numberOfSubscribers == 0) { - log.warn("Durable Active Subscriptions table does not exists."); - } - return numberOfSubscribers; - } - - /** - * Forcibly close non durable topic subscription. This will delete the first subscription listed - * on non durable subscriptions list - * @return true if subscription removal is successful, otherwise false - */ - public boolean closeNonDurableTopicSubscription() { - String deletingMessageID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tempTopic.subscriptions.table.delete.subid"))).getText(); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tempTopic.subscriptions.table.delete.button"))).click(); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tempTopic.subscriptions.close.confirm"))).click(); - boolean successMessageReceived = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tempTopic.subscription.close.result"))).getText() - .contains("Successfully closed subscription"); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tempTopic.subscription.close.result.confirm"))).click(); - - boolean queueSubscriptionSuccessfullyRemoved = false; - - String firstSubscriptionIDAfterDelete = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.tempTopic.subscriptions.table.delete.subid"))).getText(); - - if(!(firstSubscriptionIDAfterDelete.equals(deletingMessageID)) && successMessageReceived) { - queueSubscriptionSuccessfullyRemoved = true; - } - - return queueSubscriptionSuccessfullyRemoved; - } - - /** - * Forcibly close non durable topic subscription. This will delete the first subscription listed - * on non durable subscriptions list. This will also check if subscription has moved to inactive - * state when closed - * @return true if subscription removal is successful, otherwise false - */ - public boolean closeDurableTopicSubscription() { - String deletingMessageID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscriptions.table.delete.subid"))).getText(); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscriptions.table.delete.button"))).click(); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscriptions.close.confirm"))).click(); - boolean successMessageReceived = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscription.close.result"))).getText() - .contains("Successfully closed subscription"); - - driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscription.close.result.confirm"))).click(); - - boolean queueSubscriptionSuccessfullyRemoved = false; - - String firstSubscriptionIDAfterDelete = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscriptions.table.delete.subid"))).getText(); - - String firstInactiveSubID = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.durableTopic.subscription.close.inactive.subid"))).getText(); - - if(!(firstSubscriptionIDAfterDelete.equals(deletingMessageID)) - && deletingMessageID.equals(firstInactiveSubID) - && successMessageReceived) { - - queueSubscriptionSuccessfullyRemoved = true; - } - - return queueSubscriptionSuccessfullyRemoved; - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicsBrowsePage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicsBrowsePage.java deleted file mode 100644 index e4b44c41..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/main/TopicsBrowsePage.java +++ /dev/null @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.common.utils.ui.pages.main; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.openqa.selenium.WebElement; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.MBPage; - -import java.util.List; - -/** - * The class for topic content browsing page. Provides functions available in the topic browsing - * page. - */ -public class TopicsBrowsePage extends MBPage { - /** - * Constructor. Takes the reference of web driver instance. - * - * @param driver WebDriver - */ - protected TopicsBrowsePage(WebDriver driver) { - super(driver); - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.topic.browse.page.header.xpath"))) - .getText().contains("Topic List")) { - throw new IllegalStateException("This is not the Topic List page"); - } - } - - /** - * Validates whether a give topic exists. - * - * @param topicName The topic name - * @return true if topic is available, false otherwise. - */ - public boolean isTopicPresent(String topicName) { - boolean isTopicPresent = false; - - // Gets the topic tree element - WebElement topicTree = driver.findElement(By.xpath(UIElementMapper.getInstance() - .getElement("mb.topic.browse.topictree"))); - - // Gets all 'ul' elements. - List ulList = topicTree.findElements(By.tagName("ul")); - for (WebElement ulNode : ulList) { - // Gets all 'li' elements - List liList = ulNode.findElements(By.tagName("li")); - for (WebElement liNode : liList) { - // Gets the element which has the topic name - WebElement topicNameNode = liNode.findElement(By.className("treeNode")); - if (topicName.equals(topicNameNode.getText())) { - isTopicPresent = true; - } - } - - } - return isTopicPresent; - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/ApplicationLogsPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/ApplicationLogsPage.java deleted file mode 100644 index b77406ae..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/ApplicationLogsPage.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.monitor; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -public class ApplicationLogsPage { - private WebDriver driver; - - public ApplicationLogsPage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.page.header.xpath"))).getText().contains("Application Logs")) { - throw new IllegalStateException("This is not the Application Logs page"); - } - } - - public MonitorPage getMonitorPage() throws IOException { - driver.findElement(By.id(UIElementMapper.getInstance().getElement("mb.tab.button.monitor.id"))).click(); - return new MonitorPage(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/MonitorPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/MonitorPage.java deleted file mode 100644 index 8e40022b..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/MonitorPage.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.monitor; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -public class MonitorPage { - private WebDriver driver; - - public MonitorPage(WebDriver driver) throws IOException { - this.driver = driver; - // Check that we're on the right page. - if (!driver.findElement(By.id(UIElementMapper.getInstance().getElement("mb.tab.button.monitor.id"))).getAttribute("class").contains(UIElementMapper.getInstance().getElement("mb.tab.button.selected.class"))) { - throw new IllegalStateException("This is not the Monitor page"); - } - } - - public ApplicationLogsPage getApplicationLogsPage() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.monitor.button.logs.application.button.xpath"))).click(); - return new ApplicationLogsPage(driver); - } - - public SystemLogsPage getSystemLogsPage() throws IOException { - driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.monitor.button.logs.system.button.xpath"))).click(); - return new SystemLogsPage(driver); - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/SystemLogsPage.java b/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/SystemLogsPage.java deleted file mode 100644 index 8a51ec75..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/java/org/wso2/mb/integration/common/utils/ui/pages/monitor/SystemLogsPage.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.common.utils.ui.pages.monitor; - -import org.openqa.selenium.By; -import org.openqa.selenium.WebDriver; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; - -import java.io.IOException; - -public class SystemLogsPage { - public SystemLogsPage(WebDriver driver) throws IOException { - // Check that we're on the right page. - if (!driver.findElement(By.xpath(UIElementMapper.getInstance().getElement("mb.page.header.xpath"))).getText().contains("System Logs")) { - throw new IllegalStateException("This is not the System Logs page"); - } - } -} diff --git a/modules/broker/integration/tests-common/integration-tests-utils/src/main/resources/mapper.properties b/modules/broker/integration/tests-common/integration-tests-utils/src/main/resources/mapper.properties deleted file mode 100644 index 16e2d127..00000000 --- a/modules/broker/integration/tests-common/integration-tests-utils/src/main/resources/mapper.properties +++ /dev/null @@ -1,214 +0,0 @@ -# -# Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# -# WSO2 Inc. licenses this file to you 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. -# - -login.username.id=txtUserName -login.password.id=txtPassword -login.header.div=header-div -login.sign.in.button=button - -home.dashboard.middle.text=middle -home.dlc.header.xpath=//*[@id="middle"]/h2 -home.mb.sign.out.xpath=//*[@id="header-div"]/div[4]/div/ul/li[3]/a -home.mb.dlc.browse.xpath=//*[@id="menu"]/ul/li[5]/ul/li[6]/ul/li/a -home.mb.queues.browse.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[1]/a -home.mb.topic.browse.xpath=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[1]/a -home.mb.queues.add.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[2]/a -home.mb.topic.add.xpath=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[2]/a -mb.queue.list.page.header.xpath=//*[@id="middle"]/h2 -mb.topic.list.page.header.xpath=//*[@id="workArea"]/h2 -mb.queue.content.page.header.xpath=//*[@id="middle"]/h2 -#REPLACE tag should be replaced with the row index for below xpath -mb.queue.content.page.row.xpath = //div[@id='workArea']//tr[#REPLACE#]//form[@action='message_content.jsp']/a -mb.message.content.page.header.xpath=//*[@id="middle"]/h2 -mb.message.content.textarea.xpath=//table[@id='content-table']/tbody/tr[2]/td[@id='body']/div[@id='middle']/div[@id='workArea']/textarea -mb.queue.list.page.workarea.id=workArea -mb.topic.list.page.workarea.xpath=//*[@id="topicTree"]/ul/li - -#queue subscriptions -home.mb.queues.subscriptions.xpath =//*[@id="menu"]/ul/li[5]/ul/li[8]/ul/li[1]/a -mb.queue.manage.subscriptions.page.xpath=//*[@id="middle"]/h2 -mb.queue.subscriptions.table.delete.subid=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[1] -mb.queue.subscriptions.table.delete.button=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[11]/a -mb.queue.subscriptions.close.confirm=/html/body/div[3]/div[2]/button[1] -mb.queue.subscription.close.result=//*[@id="messagebox-info"]/p -mb.queue.subscription.close.result.confirm=/html/body/div[3]/div[2]/button - - -mb.add.queue.page.header.xpath=//*[@id="workArea"]/h2 -mb.add.queue.page.qname.field.id=queue -mb.add.queue.page.add.button.xpath=//*[@id="workArea"]/table/tbody/tr[3]/td/input -mb.add.queue.page.permission.table=//*[@id="permissionsTable"]/tbody -mb.add.queue.page.onqueueadd.okbutton.xpath=/html/body/div[3]/div[2]/button -mb.add.queue.page.onqueueadd.msgdialog.id=dialog -mb.queue.list.table.body.xpath=//*[@id="workArea"]/table[2]/tbody -mb.queue.browse.content.table=//*[@id="workArea"]/table[2]/tbody -home.logged.user.dev=logged-user -mb.popup.dialog.id=dialog - -mb.search.queue.name.pattern.tag.name=queueNamePattern -mb.search.queue.identifier.pattern.tag.name=identifier -mb.search.queue.own.node.id.element.id=ownNodeId -mb.search.queue.search.button.xpath=//*[@id="workArea"]/form/table/tbody/tr[4]/td[1]/input - -mb.search.queue.name.exactmatch.tag.name=isQueueExactlyMatch -mb.search.queue.identifier.exactmatch.tag.name=isIdentifierExactlyMatch - - -mb.search.topic.name.pattern.tag.name=topicNamePattern -mb.search.topic.identifier.pattern.tag.name=identifier -mb.search.topic.own.node.id.element.id=ownNodeId -mb.search.topic.search.button.xpath=//*[@id="workArea"]/form/table/tbody/tr[4]/td[1]/input - -mb.search.topic.name.exactmatch.tag.name=isTopicExactlyMatch -mb.search.topic.identifier.exactmatch.tag.name=isIdentifierExactlyMatch - -mb.add.topic.page.header.xpath=//*[@id="workArea"]/h2 -mb.add.topic.page.topic.name.field.id=topic -mb.add.topic.page.add.button.xpath=//*[@id="workArea"]/table/tbody/tr[3]/td/input -mb.add.topic.page.ontopicadd.okbutton.xpath=/html/body/div[3]/div[2]/button - - -repository.url.name=_txt_repository_location_url -main.tab.id=menu-panel-button1 - -configure.tab.id=menu-panel-button3 -configure.tab.menu.header.id=region1_configure_menu -configure.user.store.management.add.secondary.userstore=//*[@id="workArea"]/table[1]/tbody/tr/td/a -configure.user.store.management.xpath=//*[@id="menu"]/ul/li[3]/ul/li[4]/ul/li[1]/a -configure.user.store.management.header.id=middle -configure.usr.mgt.roles.header.xpath=//*[@id="middle"]/h2 -configure.usr.mgt.users.header.xpath=//*[@id="middle"]/h2 -configure.panel.button.id=menu-panel-button3 -configure.user.mgt.header.xpath=//*[@id="middle"]/h2 -usr.mgt.roles.add.new.role.button.xpath=//*[@id="workArea"]/table[4]/tbody/tr[1]/td/a -configure.users.and.roles.button.xpath=//*[@id="menu"]/ul/li[3]/ul/li[2]/ul/li[1]/a -configure.usr.mgt.roles.link.xpath=//*[@id="internal"]/tbody/tr[2]/td/a - -usr.mgt.add.role.step1.sub.header.xpath=//*[@id="workArea"]/h3 -usr.mgt.add.role.step1.next.button.xpath=//*[@id="workArea"]/form/table/tbody/tr[2]/td/input[1] -usr.mgt.add.role.step1.finish.button.xpath=//*[@id="workArea"]/form/table/tbody/tr[2]/td/input[2] -usr.mgt.add.role.step1.name.field.xpath=//*[@id="workArea"]/form/table/tbody/tr[1]/td/table/tbody/tr[2]/td[2]/input -usr.mgt.add.role.step1.cancel.button.xpath=//*[@id="workArea"]/form/table/tbody/tr[2]/td/input[3] - -usr.mgt.add.role.step2.sub.header.xpath=//*[@id="workArea"]/h3 -usr.mgt.add.role.step2.next.button.xpath=//*[@id="workArea"]/form/table/tbody/tr/td/input[1] -usr.mgt.add.role.step2.finish.button.xpath=//*[@id="workArea"]/form/table/tbody/tr/td/input[2] -usr.mgt.add.role.step2.cancel.button.xpath=//*[@id="workArea"]/form/table/tbody/tr/td/input[3] -usr.mgt.add.role.step2.login.role.xpath=//*[@id="ygtvcheck11"]/div - -usr.mgt.add.role.step3.sub.header.xpath=//*[@id="workArea"]/h3 -usr.mgt.add.role.step3.finish.button.xpath=//*[@id="content-table"]/tbody/tr[3]/td/input[1] -usr.mgt.add.role.step3.cancel.button.xpath=//*[@id="content-table"]/tbody/tr[3]/td/input[2] - -configure.usr.mgt.users.link.xpath=//*[@id="internal"]/tbody/tr[1]/td/a -usr.mgt.add.new.usr.button.xpath=//*[@id="workArea"]/table[4]/tbody/tr[1]/td/a -usr.mgt.add.user.step1.sub.header.xpath=//*[@id="workArea"]/h3 -usr.mgt.add.user.step1.user.name.field.xpath=//*[@id="mainTable"]/tbody/tr[2]/td[2]/input -usr.mgt.add.user.step1.password.field.xpath=//*[@id="passwordRow"]/td[2]/input -usr.mgt.add.user.step1.password.repeat.field.xpath=//*[@id="retypeRow"]/td[2]/input -usr.mgt.add.user.step1.next.button.xpath=//*[@id="userAdd"]/tbody/tr[2]/td/input[1] - -usr.mgt.add.user.step2.sub.header.xpath=//*[@id="workArea"]/h3 -usr.mgt.add.user.step2.select.roles.td.xpath=//*[@id="edit_users"]/table[1]/tbody/tr/td/table/tbody -usr.mgt.add.user.step2.finish.button=//*[@id="content-table"]/tbody/tr[3]/td/input[1] - -configure.multitenancy.add.new.tenant.xpath=//*[@id="menu"]/ul/li[3]/ul/li[11]/ul/li[1]/a -add.tenant.domain.field.id=domain -add.tenant.usage.plan.field.id=usage-plan-name -add.tenant.first.name.field.id=admin-firstname -add.tenant.last.name.field.id=admin-lastname -add.tenant.admin.user.name.field.id=admin -add.tenant.admin.password.field.id=admin-password -add.tenant.admin.password.repeat.field.id=admin-password-repeat -add.tenant.admin.email.field.id=admin-email -add.tenant.save.button.xpath=//*[@id="buttonRow"]/td/input - -mb.tenant.home.page.menu.header.xpath=//*[@id="menu"]/ul/li[1]/a -mb.tenant.sign.out.xpath=//*[@id="header-div"]/div[4]/div/ul/li[3]/a - -mb.tab.button.monitor.id=menu-panel-button2 -mb.tab.button.selected.class=selected -mb.page.header.xpath=//*[@id="middle"]/h2 -mb.monitor.button.logs.application.button.xpath=/html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[4]/td/div/ul/li[2]/ul/li[3]/a -mb.monitor.button.logs.system.button.xpath=/html/body/table/tbody/tr[2]/td[2]/table/tbody/tr[4]/td/div/ul/li[2]/ul/li[5]/a - -mb.dlc.browse.table.browse.button.xpath=//*[@id="workArea"]/table/tbody/tr/td[3]/a -mb.dlc.browse.table.xpath=//*[@id="workArea"]/table/tbody -mb.dlc.queue.content=//*[@id="middle"]/h2 - -mb.dlc.browse.table.choose.box.xpath=//*[@id="workArea"]/table[3]/tbody/tr[1]/td[1]/input -mb.dlc.browse.table.choose.all.box.xpath=//*[@id="workArea"]/table[3]/thead/tr/th[1]/input -mb.dlc.browse.content.table=//*[@id="workArea"]/table[3]/tbody -mb.dlc.first.message.id=//*[@id="workArea"]/table[3]/tbody/tr[1]/td[3] -mb.dlc.browse.function.confirm=/html/body/div[3]/div[2]/button[1] -mb.dlc.browse.function.success=/html/body/div[3]/div[2]/button - -mb.dlc.browse.table.delete.button=//*[@id="iconArea"]/table/thead/tr/th[1]/a -mb.dlc.browse.table.restore.button=//*[@id="iconArea"]/table/thead/tr/th[2]/a -mb.dlc.browse.table.reroute.queue.select=//*[@id="allQueues"] -mb.dlc.browse.table.reroute.queue.option=option -mb.dlc.restored.message.id=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[2] -mb.dlc.browse.table.reroute.button=//*[@id="iconArea"]/table/thead/tr/th[3]/a -mb.dlc.browse.table.reroute.confirm=/html/body/div[3]/div[2]/button -mb.dlc.rerouted.message.id=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[2] -mb.dlc.rerouted.queue.table=//*[@id="workArea"]/table[2]/tbody - -mb.dlc.browse.table.reroute.all.button=//*[@id="iconArea"]/table/thead/tr/th[4]/a -mb.dlc.browse.table.reroute.all.source.select=//*[@id="sourceDestinations"] -mb.dlc.browse.table.reroute.all.target.select=//*[@id="targetDestinations"] - - -#Topics - -mb.add.topics.page.header.xpath=//*[@id="workArea"]/h2 -mb.add.topics.page.topic.name.field.id=topic -mb.add.topics.page.add.button.xpath=//*[@id="permissionTable"]/tbody/tr[3]/td/input -home.mb.topics.add.xpath=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[2]/a -home.mb.topics.browse.xpath=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[1]/a -mb.topic.browse.page.header.xpath=//*[@id="workArea"]/h2 -mb.topic.browse.topictree=//*[@id="topicTree"] -home.mb.topics.add.without.queue.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[2]/a -home.mb.topics.browse.without.queue.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[1]/a -mb.topic.subscribe.page.header.xpath=//*[@id="workArea"]/h2 -mb.topic.subscribe.page.subscribe.button.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr[2]/td/input -mb.topic.subscribe.page.subscribe.okbutton.xpath=/html/body/div[3]/div[2]/button - -#Topic Subscriptions -mb.subscriptions.topics.page.header.xpath=//*[@id="middle"]/h2 -mb.subscriptions.topics.page.durable.active.table.xpath=//*[@id="workArea"]/h3[3]/preceding-sibling::table[@class='styledLeft'] -mb.subscriptions.topics.page.durable.inactive.table.xpath=//*[@id="workArea"]/h3[3]/following-sibling::table[@class='styledLeft'] -home.mb.topic.subscriptions.xpath=//*[@id="menu"]/ul/li[5]/ul/li[8]/ul/li[2]/a - -mb.subscriptions.queue.table.xpath=//*[@id="workArea"]/table[2] - -mb.tempTopic.subscriptions.table.delete.subid=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[1] -mb.tempTopic.subscriptions.table.delete.button=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[5]/a -mb.tempTopic.subscriptions.close.confirm=/html/body/div[3]/div[2]/button[1] -mb.tempTopic.subscription.close.result=//*[@id="messagebox-info"]/p -mb.tempTopic.subscription.close.result.confirm=/html/body/div[3]/div[2]/button -mb.subscriptions.topics.page.temporary.table.xpath=//*[@id="workArea"]/h3[1]/following-sibling::*[3] - - - -mb.durableTopic.subscriptions.table.delete.subid=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[2] -mb.durableTopic.subscriptions.table.delete.button=//*[@id="workArea"]/table[2]/tbody/tr[1]/td[9]/a -mb.durableTopic.subscriptions.close.confirm=/html/body/div[3]/div[2]/button[1] -mb.durableTopic.subscription.close.result=//*[@id="messagebox-info"]/p -mb.durableTopic.subscription.close.result.confirm=/html/body/div[3]/div[2]/button - -mb.durableTopic.subscription.close.inactive.subid=//*[@id="workArea"]/table[4]/tbody/tr/td[1] diff --git a/modules/broker/integration/tests-common/platform-tests-utils/pom.xml b/modules/broker/integration/tests-common/platform-tests-utils/pom.xml deleted file mode 100644 index 0b1de60e..00000000 --- a/modules/broker/integration/tests-common/platform-tests-utils/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - org.wso2.mb - wso2iot-broker-integration-tests - 1.0.0-SNAPSHOT - ../../pom.xml - - - 4.0.0 - WSO2 MB - platform Test Common Utils Module - org.wso2.iot.broker.platform.common.utils - jar - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.test.utils - compile - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - compile - - - org.wso2.iot - org.wso2.iot.broker.integration.common.clients - compile - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - compile - - - org.wso2.carbon - org.wso2.carbon.authenticator.stub - compile - - - org.wso2.carbon.automation - org.wso2.carbon.automation.extensions - compile - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/DataAccessUtil.java b/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/DataAccessUtil.java deleted file mode 100644 index 9eea3f2f..00000000 --- a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/DataAccessUtil.java +++ /dev/null @@ -1,184 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.platform.common.utils; - -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; - -import javax.xml.xpath.XPathExpressionException; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; - -/** - * This class is used for testing database records directly. - */ -public class DataAccessUtil { - - /** - * Get database connection - * @return database connection - * @throws SQLException - * @throws XPathExpressionException - * @throws ClassNotFoundException - */ - private Connection getConnection() throws SQLException, XPathExpressionException, - ClassNotFoundException { - return RDBMSConnectionManager.getConnection(); - } - - /** - * Get current number of messages in database for a given queue name. - * @param queueName queue name - * @return number of messages in database - * @throws DataAccessUtilException - */ - public long getMessageCountForQueue(String queueName) throws DataAccessUtilException{ - Connection connection = null; - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - long count = 0; - try { - connection = getConnection(); - long queueId = getQueueId(queueName); - preparedStatement = connection.prepareStatement(RDBMSConstants.PS_GET_MESSAGE_COUNT_FOR_QUEUE); - preparedStatement.setLong(1, queueId); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - count = resultSet.getLong(RDBMSConstants.MSG_COUNT); - } - } catch (Exception e) { - throw new DataAccessUtilException("Failed to get message count for queue: " + queueName, e); - } - finally { - close(resultSet, "getMessageCountForQueue"); - close(preparedStatement, "getMessageCountForQueue"); - close(connection, "getMessageCountForQueue"); - } - return count; - } - - /** - * Get queue id for a given queue. - * @param queueName queue name - * @return queue id - * @throws DataAccessUtilException - */ - public long getQueueId(String queueName) throws DataAccessUtilException { - Connection connection = null; - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - long count = 0; - try { - connection = getConnection(); - preparedStatement = connection.prepareStatement(RDBMSConstants.PS_GET_QUEUE_ID); - preparedStatement.setString(1, queueName); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - count = resultSet.getLong(RDBMSConstants.QUEUE_ID); - } - } catch (Exception e) { - throw new DataAccessUtilException("Failed to get queue id for queue: " + queueName, e); - } finally { - close(resultSet, "getQueueId"); - close(preparedStatement, "getQueueId"); - close(connection, "getQueueId"); - } - return count; - } - - /** - * Get current number of slots for a given queue which are in assigned state. - * @param queueName queue name - * @return number of slots - * @throws DataAccessUtilException - */ - public long getAssignedSlotCountForQueue(String queueName) throws DataAccessUtilException{ - Connection connection = null; - PreparedStatement preparedStatement = null; - ResultSet resultSet = null; - long count = 0; - try { - connection = getConnection(); - preparedStatement = connection.prepareStatement(RDBMSConstants.PS_GET_ASSIGNED_SLOTS_FOR_QUEUE); - preparedStatement.setString(1, queueName); - resultSet = preparedStatement.executeQuery(); - if (resultSet.next()) { - count = resultSet.getLong(RDBMSConstants.SLOT_COUNT); - } - } catch (Exception e) { - throw new DataAccessUtilException("Failed to get slot count for queue: " + queueName, e); - } - finally { - close(resultSet, "getAssignedSlotCountForQueue"); - close(preparedStatement, "getAssignedSlotCountForQueue"); - close(connection, "getAssignedSlotCountForQueue"); - } - return count; - } - - /** - * closes the result set resources - * - * @param resultSet ResultSet - * @param task task that was done by the closed result set. - */ - protected void close(ResultSet resultSet, String task) throws DataAccessUtilException{ - if (resultSet != null) { - try { - resultSet.close(); - } catch (SQLException e) { - throw new DataAccessUtilException("Failed to close result set", e); - } - } - } - - /** - * close the prepared statement resource - * - * @param preparedStatement PreparedStatement - * @param task task that was done by the closed prepared statement. - */ - protected void close(PreparedStatement preparedStatement, String task) throws DataAccessUtilException{ - if (preparedStatement != null) { - try { - preparedStatement.close(); - } catch (SQLException e) { - throw new DataAccessUtilException("Failed to close prepared statement", e); - } - } - } - - /** - * Closes the provided connection. on failure log the error; - * - * @param connection Connection - * @param task task that was done before closing - */ - protected void close(Connection connection, String task) throws DataAccessUtilException{ - if (connection != null) { - try { - connection.close(); - } catch (SQLException e) { - throw new DataAccessUtilException("Failed to close database connection", e); - } - } - } - -} diff --git a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/MBPlatformBaseTest.java b/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/MBPlatformBaseTest.java deleted file mode 100644 index 1144b8fd..00000000 --- a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/MBPlatformBaseTest.java +++ /dev/null @@ -1,336 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.platform.common.utils; - -import com.google.common.net.HostAndPort; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.Instance; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.xml.sax.SAXException; - -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Stack; - -/** - * Base class of all MB integration tests - */ -public class MBPlatformBaseTest { - - protected Log log = LogFactory.getLog(MBPlatformBaseTest.class); - protected Map contextMap; - protected Map andesAdminClients; - protected Map topicAdminClients; - private Stack stack = null; - - /** - * Create automation context objects for every node in config - * - * @param userMode User mode for which the automation context should use - * @throws XPathExpressionException - */ - protected void initCluster(TestUserMode userMode) throws XPathExpressionException { - contextMap = new HashMap(); - AutomationContext automationContext = new AutomationContext("MB_Cluster", userMode); - log.info("Cluster instance loading"); - Map instanceMap = automationContext.getProductGroup().getInstanceMap(); - - if (instanceMap != null && instanceMap.size() > 0) { - for (Map.Entry entry : instanceMap.entrySet()) { - String instanceKey = entry.getKey(); - contextMap.put(instanceKey, new AutomationContext("MB_Cluster", instanceKey, userMode)); - log.info(instanceKey); - } - } - - stack = new Stack(); - - } - - /** - * Get automation context object with given node key - * - * @param key The key value for automation context map - * @return Respective automation context - */ - - protected AutomationContext getAutomationContextWithKey(String key) { - - if (contextMap != null && contextMap.size() > 0) { - for (Map.Entry entry : contextMap.entrySet()) { - if (entry.getKey().equalsIgnoreCase(key)) { - return entry.getValue(); - } - } - } - - return null; - } - - /** - * Get andes admin client for given node - * - * @param key The key for the map which the andes admin clients are stored - * @return An {@link org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient}. - */ - - protected AndesAdminClient getAndesAdminClientWithKey(String key) { - - if (andesAdminClients != null && andesAdminClients.size() > 0) { - for (Map.Entry entry : andesAdminClients.entrySet()) { - if (entry.getKey().equalsIgnoreCase(key)) { - return entry.getValue(); - } - } - } - - return null; - } - - /** - * Get topic admin client for given node. - * Suppressing "UnusedDeclaration" warning as this method can be used later in writing test - * cases. - * - * @param key The key for the map which the topic admin clients are stored - * @return An {@link org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient}. - */ - @SuppressWarnings("UnusedDeclaration") - protected TopicAdminClient getTopicAdminClientWithKey(String key) { - - if (topicAdminClients != null && topicAdminClients.size() > 0) { - for (Map.Entry entry : topicAdminClients.entrySet()) { - if (entry.getKey().equalsIgnoreCase(key)) { - return entry.getValue(); - } - } - } - - return null; - } - - /** - * Login and provide session cookie for node - * - * @param context The automation context to be used. - * @return The session cookie of the login user - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - */ - protected String login(AutomationContext context) - throws IOException, XPathExpressionException, URISyntaxException, SAXException, - XMLStreamException, LoginAuthenticationExceptionException, AutomationUtilException { - LoginLogoutClient loginLogoutClient = new LoginLogoutClient(context); - return loginLogoutClient.login(); - } - - /** - * Make MB instances in random mode to support pick a random instance for test cases - */ - protected void makeMBInstancesRandom() { - - Object[] keys = contextMap.keySet().toArray(); - - List list = new ArrayList(); - - Collections.addAll(list, keys); - - Collections.shuffle(list); - - for (int i = 0; i < list.size(); i++) { - keys[i] = list.get(i); - stack.push(list.get(i).toString()); - } - } - - /** - * Gets an MB instance randomly - * - * @return Random instance key of the MB node - */ - protected String getRandomMBInstance() { - - if (stack.empty()) { - makeMBInstancesRandom(); - } - - return stack.pop(); - } - - /** - * Create and login andes admin client to nodes in cluster - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - protected void initAndesAdminClients() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - andesAdminClients = new HashMap(); - - if (contextMap != null && contextMap.size() > 0) { - for (Map.Entry entry : contextMap.entrySet()) { - AutomationContext tempContext = entry.getValue(); - andesAdminClients.put(entry.getKey(), new AndesAdminClient(tempContext.getContextUrls().getBackEndUrl(), - login(tempContext))); - } - } - } - - /** - * Create and login topic admin client to nodes in cluster - * Suppressing "UnusedDeclaration" warning as this method can be used later in writing test - * cases. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @SuppressWarnings("UnusedDeclaration") - protected void initTopicAdminClients() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - - topicAdminClients = new HashMap(); - - if (contextMap != null && contextMap.size() > 0) { - for (Map.Entry entry : contextMap.entrySet()) { - AutomationContext tempContext = entry.getValue(); - topicAdminClients.put(entry.getKey(), new TopicAdminClient(tempContext.getContextUrls().getBackEndUrl(), - login(tempContext))); - } - } - } - - /** - * Check whether given queue is deleted from the cluster nodes - * Suppressing "UnusedDeclaration" warning as this method can be used later in writing test - * cases. - * - * @param queue The queue name - * @return true if queue deleted successfully, false otherwise. - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @SuppressWarnings("UnusedDeclaration") - protected boolean isQueueDeletedFromCluster(String queue) - throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - AndesAdminClient andesAdminClient; - boolean queueDeleted = true; - if (andesAdminClients != null && andesAdminClients.size() > 0) { - for (Map.Entry entry : andesAdminClients.entrySet()) { - andesAdminClient = entry.getValue(); - - if (andesAdminClient.getQueueByName(queue) != null) { - queueDeleted = false; - } - - } - } - - return queueDeleted; - } - - /** - * Check whether given queue is created in the cluster nodes - * Suppressing "UnusedDeclaration" warning as this method can be used later in writing test - * cases. - * - * @param queue The queue name - * @return true if queue exists in cluster, false otherwise. - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @SuppressWarnings("UnusedDeclaration") - protected boolean isQueueCreatedInCluster(String queue) - throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - AndesAdminClient andesAdminClient; - boolean queueExists = true; - if (andesAdminClients != null && andesAdminClients.size() > 0) { - for (Map.Entry entry : andesAdminClients.entrySet()) { - andesAdminClient = entry.getValue(); - - if (andesAdminClient.getQueueByName(queue) == null) { - queueExists = false; - } - - } - } - - return queueExists; - } - - /** - * Give a random AMQP broker URL. - * - * @return Broker URL in host:port format (E.g "127.0.0.1:5672") - * @throws XPathExpressionException - */ - protected HostAndPort getRandomAMQPBrokerAddress() throws XPathExpressionException { - String randomInstanceKey = getRandomMBInstance(); - AutomationContext tempContext = getAutomationContextWithKey(randomInstanceKey); - - return HostAndPort.fromString(tempContext.getInstance().getHosts().get - ("default") + ":" + tempContext.getInstance().getPorts().get("amqp")); - } - - /** - * Give a random AMQP broker URL. - * - * @return Broker URL in host:port format (E.g "127.0.0.1:5672") - * @throws XPathExpressionException - */ - protected HostAndPort getRandomMQTTBrokerAddress() throws XPathExpressionException { - String randomInstanceKey = getRandomMBInstance(); - AutomationContext tempContext = getAutomationContextWithKey(randomInstanceKey); - - return HostAndPort.fromString(tempContext.getInstance().getHosts().get - ("default") + ":" + tempContext.getInstance().getPorts().get("mqtt")); - } - - - -} diff --git a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/RDBMSConnectionManager.java b/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/RDBMSConnectionManager.java deleted file mode 100644 index 9923c299..00000000 --- a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/RDBMSConnectionManager.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.platform.common.utils; - -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; - -import javax.xml.xpath.XPathExpressionException; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; - -/** - * This class is used for creating RDBMS Connection - */ -public class RDBMSConnectionManager { - - /** - * Get database connection. - * @return database connection - * @throws XPathExpressionException - * @throws ClassNotFoundException - * @throws SQLException - */ - public static Connection getConnection() throws XPathExpressionException, ClassNotFoundException, SQLException { - - AutomationContext automationContext = new AutomationContext("MB_Cluster", TestUserMode.SUPER_TENANT_ADMIN); - - String url = automationContext.getConfigurationValue("//datasources/datasource[@name=\'mbCluster\']/url"); - String username = automationContext.getConfigurationValue - ("//datasources/datasource[@name=\'mbCluster\']/username"); - String password = automationContext.getConfigurationValue - ("//datasources/datasource[@name=\'mbCluster\']/password"); - String driverName = automationContext.getConfigurationValue - ("//datasources/datasource[@name=\'mbCluster\']/driverClassName"); - - Class.forName(driverName); - Connection conn = DriverManager.getConnection(url, username, password); - return conn; - } -} diff --git a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/RDBMSConstants.java b/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/RDBMSConstants.java deleted file mode 100644 index 92e2a877..00000000 --- a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/RDBMSConstants.java +++ /dev/null @@ -1,72 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.platform.common.utils; - -/** - * This class contains prepared statements for DataAccessUtil - */ -public class RDBMSConstants { - - // Message Store tables - protected static final String METADATA_TABLE = "MB_METADATA"; - protected static final String QUEUES_TABLE = "MB_QUEUE_MAPPING"; - - // Message Store table columns - protected static final String MESSAGE_ID = "MESSAGE_ID"; - protected static final String QUEUE_ID = "QUEUE_ID"; - protected static final String QUEUE_NAME = "QUEUE_NAME"; - - // Slot related tables - protected static final String SLOT_TABLE = "MB_SLOT"; - - //Slot table columns - protected static final String SLOT_ID = "SLOT_ID"; - protected static final String STORAGE_QUEUE_NAME = "STORAGE_QUEUE_NAME"; - protected static final String SLOT_STATE = "SLOT_STATE"; - - //Return variables - protected static final String MSG_COUNT = "MSG_COUNT"; - protected static final String SLOT_COUNT = "SLOT_COUNT"; - - /** - * Prepared statement for getting queue id - */ - protected static final String PS_GET_QUEUE_ID = - "SELECT " + QUEUE_ID - + " FROM " + QUEUES_TABLE - + " WHERE " + QUEUE_NAME + "=?"; - - /** - * Prepared statement for getting message count for a given queue - */ - protected static final String PS_GET_MESSAGE_COUNT_FOR_QUEUE = - "SELECT COUNT(" + MESSAGE_ID + ") AS " + MSG_COUNT - + " FROM " + METADATA_TABLE - + " WHERE " + QUEUE_ID + "=?"; - - /** - * Prepared statement for getting slots for a given queue which are in assigned state - */ - protected static final String PS_GET_ASSIGNED_SLOTS_FOR_QUEUE = - " SELECT COUNT(" + SLOT_ID + ") AS " + SLOT_COUNT - + " FROM " + SLOT_TABLE - + " WHERE " + STORAGE_QUEUE_NAME + "=?" - + " AND " + SLOT_STATE + "=2"; - -} diff --git a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/exceptions/DataAccessUtilException.java b/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/exceptions/DataAccessUtilException.java deleted file mode 100644 index 000a9d0f..00000000 --- a/modules/broker/integration/tests-common/platform-tests-utils/src/main/java/org/wso2/mb/platform/common/utils/exceptions/DataAccessUtilException.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.platform.common.utils.exceptions; - -/** - * Exception class for Data access utility class. - */ -public class DataAccessUtilException extends Exception { - - /** - * Creates Data Access Util exception. - */ - public DataAccessUtilException() { - } - - /** - * Creates Data Access Util exception with error message. - * - * @param message Error message - */ - public DataAccessUtilException(String message) { - super(message); - } - - /** - * Creates Data Access Util exception with error message and throwable. - * - * @param message Error message - * @param cause The throwable - */ - public DataAccessUtilException(String message, Throwable cause) { - super(message, cause); - } - - /** - * Creates Data Access Util exception with throwable. - * - * @param cause The throwable - */ - public DataAccessUtilException(Throwable cause) { - super(cause); - } - - /** - * {@inheritDoc} - */ - @Override - public String getMessage() { - return super.getMessage(); - } -} diff --git a/modules/broker/integration/tests-integration/pom.xml b/modules/broker/integration/tests-integration/pom.xml deleted file mode 100644 index 670b89d2..00000000 --- a/modules/broker/integration/tests-integration/pom.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - org.wso2.iot - wso2iot-broker-integration-tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - Integration Test Module - org.wso2.iot.broker.integration.tests - pom - - - tests-amqp - tests-server - tests-mqtt - reports - - - diff --git a/modules/broker/integration/tests-integration/reports/pom.xml b/modules/broker/integration/tests-integration/reports/pom.xml deleted file mode 100644 index 4b54fdb6..00000000 --- a/modules/broker/integration/tests-integration/reports/pom.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - org.wso2.iot.integration.tests - org.wso2.iot - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - Integration Test Reporting - org.wso2.carbon.mb.integration.reports - pom - - - - with-tests - - true - !maven.test.skip - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - my-exec - install - - exec - - - - - java - - -Dbasedir=${basedir} - - -Dcarbon.zip=${basedir}/../../../distribution/target/wso2iot-broker-${project.version}.zip - - -Dinstr.file=${basedir}/src/main/resources/instrumentation.txt - -Dfilters.file=${basedir}/src/main/resources/filters.txt - -classpath - - - org.wso2.carbon.automation.engine.frameworkutils.TestCoverageGenerator - - - ${basedir}/target - - - - - - - without-tests - - true - maven.test.skip - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - my-exec - install - - exec - - - - - true - java - - -Dbasedir=${basedir} - - -Dcarbon.zip=${basedir}/../../../distribution/target/wso2iot-broker-${project.version}.zip - - -Dinstr.file=${basedir}/src/main/resources/instrumentation.txt - -Dfilters.file=${basedir}/src/main/resources/filters.txt - -classpath - - - org.wso2.carbon.automation.engine.frameworkutils.TestCoverageGenerator - - - ${basedir}/target - - - - - - - - - - - maven-dependency-plugin - - - copy-jacoco-dependencies - compile - - copy-dependencies - - - ${project.build.directory}/jacoco - jar - org.jacoco.agent - - - - - - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - compile - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - compile - - - org.jacoco - org.jacoco.agent - - - - diff --git a/modules/broker/integration/tests-integration/reports/src/main/resources/filters.txt b/modules/broker/integration/tests-integration/reports/src/main/resources/filters.txt deleted file mode 100644 index 04aa6cb7..00000000 --- a/modules/broker/integration/tests-integration/reports/src/main/resources/filters.txt +++ /dev/null @@ -1,17 +0,0 @@ --*.stub* --*.stub_ --*.stub_4.0.0 --*.stub- --org.eclipse.* --*.equinox.* --org.wso2.carbon.user.core.* --samples.* --*.log4j* --*.axis2* --*.ui* --*.tenant* --*.stratos* --*.eventing* --*tests-transports* --org.wso2.carbon.mediation.statistics* --*startup* \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/reports/src/main/resources/instrumentation.txt b/modules/broker/integration/tests-integration/reports/src/main/resources/instrumentation.txt deleted file mode 100644 index 12af5f28..00000000 --- a/modules/broker/integration/tests-integration/reports/src/main/resources/instrumentation.txt +++ /dev/null @@ -1,2 +0,0 @@ -org.wso2.carbon.andes* -org.dna* diff --git a/modules/broker/integration/tests-integration/tests-amqp/pom.xml b/modules/broker/integration/tests-integration/tests-amqp/pom.xml deleted file mode 100644 index be3d2874..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/pom.xml +++ /dev/null @@ -1,280 +0,0 @@ - - - - - org.wso2.iot - org.wso2.iot.broker.integration.tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - MB AMQP based Test Module - org.wso2.carbon.iot.broker.amqp.test - jar - - - - - maven-surefire-plugin - false - 2.12.4 - - - -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m - false - - src/test/resources/testng-server-mgt.xml - src/test/resources/testng.xml - - - - maven.test.haltafterfailure - false - - - carbon.zip - - ${basedir}/../../../distribution/target/wso2iot-broker-${product.wso2iot.broker.version}.zip - - - - framework.resource.location - - ${basedir}/src/test/resources/ - - - - usedefaultlisteners - false - - - project.build.directory - ${project.build.directory} - - ${basedir}/target/security-verifier/ - ${basedir}/src/test/resources/instrumentation.txt - ${basedir}/src/test/resources/filters.txt - - ${basedir}/target - - - - maven-dependency-plugin - - - copy-jacoco-dependencies - compile - - copy-dependencies - - - ${project.build.directory}/jacoco - jar - org.jacoco.agent - - - - copy-secVerifier - compile - - copy-dependencies - - - ${basedir}/target/security-verifier - aar - SecVerifier - true - - - - unpack-mar-jks - compile - - unpack - - - - - org.wso2.iot - wso2iot-broker - ${product.wso2iot.broker.version} - zip - true - ${basedir}/target/tobeCopied/ - **/*.jks,**/*.mar,**/axis2_client.xml - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.7.1 - - ${basedir}/target/report - amqp-test - - - - integration-test - - report-only - - - - - - maven-resources-plugin - 2.6 - - - copy-resources-jks - compile - - copy-resources - - - ${basedir}/src/test/resources/keystores/products - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/resources/security/ - - - **/*.jks - - - - - - - copy-axis2files - compile - - copy-resources - - - ${basedir}/src/test/resources/axis2config - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/conf/axis2/ - - - **/*.xml - - - - - - - copy-resources-mar - compile - - copy-resources - - - ${basedir}/src/test/resources/client/modules - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/deployment/client/modules - - - **/*.mar - - - - - - - - - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - - - org.wso2.carbon.automation - org.wso2.carbon.automation.extensions - - - org.apache.ftpserver - :ftpserver-core - - - org.slf4j - slf4j-api - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.test.utils - - - org.slf4j - slf4j-api - - - - - org.wso2.iot - org.wso2.iot.broker.integration.common.utils - - - org.wso2.iot - org.wso2.iot.broker.integration.common.clients - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.extensions - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.tests - - - slf4j.wso2 - slf4j - - - org.testng - testng - - - org.apache.commons - commons-lang3 - - - org.jacoco - org.jacoco.agent - - - - diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/AutoAcknowledgementsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/AutoAcknowledgementsTestCase.java deleted file mode 100644 index d36e36f3..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/AutoAcknowledgementsTestCase.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes test cases to test auto acknowledgements modes for queues - */ -public class AutoAcknowledgementsTestCase extends MBIntegrationBaseTest { - - /** - * The amount of messages to be sent. - */ - private static final long SEND_COUNT = 1500L; - - /** - * The amount of messages to be expected. - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Prepare environment for tests - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * In this method we just test a sender and receiver with acknowledgements. - * 1. Start a queue receiver in auto acknowledge mode. - * 2. Publisher sends {@link #SEND_COUNT} amount of messages. - * 3. Receiver receives {@link #EXPECTED_COUNT} - * 4. Check whether all messages received. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}, description = "Single queue send-receive test case with auto Ack") - public void autoAcknowledgementsTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "autoAckTestQueue"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Creating a JMS publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(consumerConfig); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient receivingClient = new AndesClient(consumerConfig, true); - receivingClient.startClient(); - - AndesClient sendingClient = new AndesClient(publisherConfig, true); - sendingClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(receivingClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating results - Assert.assertEquals(sendingClient.getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(receivingClient.getReceivedMessageCount(), EXPECTED_COUNT, "Total number of sent and received messages are not equal"); - } - - /** - * In this method we drop receiving client and connect it again and tries to get messages from MB. - * 1. Start a queue receiver in auto acknowledge mode. - * 2. Publishers sends {@link #SEND_COUNT} number of messages. - * 3. First receiver will read up to first 1000 messages. - * 4. Close up the receiver. - * 5. Start a second queue receiver in auto acknowledge mode. - * 6. Second receiver will read up 500 messages. - * 7. Check whether total received messages were equal to {@link #EXPECTED_COUNT}. - * - * @throws AndesClientConfigurationException - * @throws CloneNotSupportedException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}, description = "Single queue send-receive test case with dropping the receiving client") - public void autoAcknowledgementsDropReceiverTestCase() - throws AndesClientConfigurationException, CloneNotSupportedException, JMSException, - NamingException, - IOException, AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration initialConsumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "autoAckTestQueueDropReceiver"); - initialConsumerConfig.setMaximumMessagesToReceived(1000L); - initialConsumerConfig.setPrintsPerMessageCount(1000L / 10L); - initialConsumerConfig.setAsync(false); - - // Creating a JMS publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "autoAckTestQueueDropReceiver"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient initialReceivingClient = new AndesClient(initialConsumerConfig, true); - initialReceivingClient.startClient(); - - AndesClient sendingClient = new AndesClient(publisherConfig, true); - sendingClient.startClient(); - - // Wait until messages are received by first consumer client. - AndesClientUtils.waitForMessagesAndShutdown(initialReceivingClient, AndesClientConstants.DEFAULT_RUN_TIME); - long totalMessagesReceived = initialReceivingClient.getReceivedMessageCount(); - - log.info("Messages received by first client : " + totalMessagesReceived); - - // Creating a secondary JMS publisher client configuration - AndesJMSConsumerClientConfiguration consumerConfigForClientAfterDrop = new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "autoAckTestQueueDropReceiver"); - consumerConfigForClientAfterDrop.setMaximumMessagesToReceived(EXPECTED_COUNT - 1000L); - consumerConfigForClientAfterDrop.setAsync(false); - - // Creating clients - AndesClient secondaryReceivingClient = new AndesClient(consumerConfigForClientAfterDrop, true); - secondaryReceivingClient.startClient(); - - // Wait until messages are received by second consumer client. - AndesClientUtils.waitForMessagesAndShutdown(secondaryReceivingClient, AndesClientConstants.DEFAULT_RUN_TIME); - - totalMessagesReceived = totalMessagesReceived + secondaryReceivingClient.getReceivedMessageCount(); - - // Evaluating - Assert.assertEquals(sendingClient.getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(totalMessagesReceived, EXPECTED_COUNT, "Total number of received messages should be equal to total number of sent messages"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/ClientAcknowledgementsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/ClientAcknowledgementsTestCase.java deleted file mode 100644 index 1645116f..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/ClientAcknowledgementsTestCase.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes test cases to test client acknowledgements modes for queues - */ -public class ClientAcknowledgementsTestCase extends MBIntegrationBaseTest { - - /** - * Amount of messages sent. - */ - private static final long SEND_COUNT = 1000L; - - /** - * Amount of messages expected. - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * In this test it will check functionality of client acknowledgement by acknowledging bunch by - * bunch. - * 1. Start queue receiver in client acknowledge mode. - * 2. Publisher sends {@link #SEND_COUNT} messages. - * 3. Consumer receives messages and only acknowledge after each 200 messages. - * 4. Consumer should receive {@link #EXPECTED_COUNT} messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performClientAcknowledgementsTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "clientAckTestQueue"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig - .setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); // using client acknowledgement - consumerConfig - .setAcknowledgeAfterEachMessageCount(200L); // acknowledge a message only after 200 messages are received - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Creating a JMS publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "clientAckTestQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClient consumerClient2 = new AndesClient(consumerConfig, true); - consumerClient2.startClient(); - - AndesClientUtils.sleepForInterval(2000); - - long totalMessagesReceived = consumerClient1.getReceivedMessageCount() + consumerClient2 - .getReceivedMessageCount(); - - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Expected message count not sent."); - Assert.assertEquals(totalMessagesReceived, EXPECTED_COUNT, "Expected message count not received."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DLCMessageExpiryTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DLCMessageExpiryTestCase.java deleted file mode 100644 index 550c884c..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DLCMessageExpiryTestCase.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.lang3.StringUtils; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes test cases to test expired message deletion in DLC - */ -public class DLCMessageExpiryTestCase extends MBIntegrationBaseTest { - /** - * Test queue name - */ - private static final String TEST_QUEUE_DLC_EXPIRY = "DLCTestQueue"; - - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesAckWaitTimeOut = null; - - /** - * Initializes test case - * - * @throws XPathExpressionException - */ - @BeforeClass() - public void init() throws XPathExpressionException, MalformedURLException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set topicMessageDeliveryStrategy to DISCARD_ALLOWED so that broker will simulate an acknowledgement - * if some subscribers are slow to acknowledge the message - * - * @throws XPathExpressionException - * @throws IOException - * @throws ConfigurationException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws URISyntaxException - * @throws AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, - ConfigurationException, SAXException, XMLStreamException, LoginAuthenticationExceptionException, - URISyntaxException, AutomationUtilException { - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_PRE_DELIVERY_EXPIRY_DELETION_INTERVAL, - "60"); - configurationEditor.updateProperty(AndesConfiguration - .PERFORMANCE_TUNING_PERIODIC_EXPIRY_MESSAGE_DELETION_INTERVAL, "60"); - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "1"); - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - // Get current "AndesAckWaitTimeOut" system property. - defaultAndesAckWaitTimeOut = System.getProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "3000"); - } - - /** - * Let the messages in the DLC to expire and check whether those are detected and deleted by the periodic message - * expiry deletion task. - * - * @throws XPathExpressionException - * @throws AutomationUtilException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - * @throws JMSException - * @throws NamingException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws InterruptedException - */ - @Test(groups = "wso2.mb", description = "Messages in DLC got expired and eventually deleted by the periodic " - + "deletion task") - public void messageExpiryInDLCTestCase() throws XPathExpressionException, AutomationUtilException, - AndesClientConfigurationException, IOException, AndesClientException, JMSException, NamingException, - AndesAdminServiceBrokerManagerAdminException, InterruptedException { - - //Setting values for the sent and received message counts - long sendMessageCount = 10L; - - // Logging in - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TEST_QUEUE_DLC_EXPIRY); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - - //Creating 2 consumers with the 2 configurations - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - // Creating publisher configuration with destination queue = 'DLCTestQueue' and message count = 1000 - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TEST_QUEUE_DLC_EXPIRY); - publisherConfig.setNumberOfMessagesToSend(sendMessageCount); - // Set the message expiry to 3 minutes - publisherConfig.setJMSMessageExpiryTime(180000L); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - // 2 min sleep to let the messages to move DLC - Thread.sleep(120000L); - // Since maximum redelivery attempts reached those 10 messages should be routed to DLC - Assert.assertEquals(getDLCMessageCount(sessionCookie),10L,"DLC Message routing failed"); - // 2 min sleep to let the expiry task delete the expired messages in DLC - Thread.sleep(120000L); - // Since all the messages in DLC is expired, those should be deleted by periodic task - Assert.assertEquals(getDLCMessageCount(sessionCookie), 0, "DLC Message expiry failed"); - } - - /** - * Gets the number of messages in the DLC queue. - * - * @return The number of messages. - * @throws AutomationUtilException - * @throws RemoteException - * @throws LogoutAuthenticationExceptionException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - private long getDLCMessageCount(String sessionCookie) throws AutomationUtilException, RemoteException, - AndesAdminServiceBrokerManagerAdminException{ - - AndesAdminClient andesAdminClient = new AndesAdminClient(backendURL, sessionCookie); - long messageCount = andesAdminClient.getDlcQueue().getMessageCount(); - return messageCount; - } - - /** - * Revert changed configurations - * - * @throws AutomationUtilException - * @throws IOException - */ - @AfterClass() - public void cleanup() throws AutomationUtilException, IOException { - - if (StringUtils.isBlank(defaultAndesAckWaitTimeOut)) { - System.clearProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, defaultAndesAckWaitTimeOut); - } - - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - - } - - -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DifferentSubscriptionsWithDurableTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DifferentSubscriptionsWithDurableTopicTestCase.java deleted file mode 100644 index 787131e1..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DifferentSubscriptionsWithDurableTopicTestCase.java +++ /dev/null @@ -1,168 +0,0 @@ -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This test class with perform test case of having different types of subscriptions together with - * durable topic subscription. - */ -public class DifferentSubscriptionsWithDurableTopicTestCase extends MBIntegrationBaseTest { - /** - * Sent message count. - */ - private static final long SEND_COUNT = 1000L; - - /** - * Expected message count. - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Topic name to publish and receive. - */ - private static final String TOPIC_NAME = "a.b.c"; - - /** - * Hierarchical topic name to publish and receive. - */ - private static final String HIERARCHICAL_TOPIC = "a.b.*"; - - /** - * Initializing test case - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * Create different type of subscribers/consumers and publish {@link #SEND_COUNT} messages to - * {@link #TOPIC_NAME}. All topic subscriptions will received message {@link #EXPECTED_COUNT} - * messages. Queue subscription should not received any messages. - * - * @throws AndesClientConfigurationException - * @throws CloneNotSupportedException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performDifferentTopicSubscriptionsWithDurableTopicTest() - throws AndesClientConfigurationException, CloneNotSupportedException, JMSException, - NamingException, - IOException, AndesClientException, XPathExpressionException { - - // Creating a consumer client configurations - AndesJMSConsumerClientConfiguration durableTopicConsumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, TOPIC_NAME); - durableTopicConsumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - durableTopicConsumerConfig1.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - durableTopicConsumerConfig1.setDurable(true, "diffSub1"); // durable topic - durableTopicConsumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration durableTopicConsumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, TOPIC_NAME); - durableTopicConsumerConfig2.setMaximumMessagesToReceived(EXPECTED_COUNT); - durableTopicConsumerConfig2.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - durableTopicConsumerConfig2.setDurable(true, "diffSub2"); // durable topic - durableTopicConsumerConfig2.setAsync(false); - - AndesJMSConsumerClientConfiguration normalTopicConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, TOPIC_NAME); - normalTopicConsumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - normalTopicConsumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - normalTopicConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration normalHierarchicalTopicConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, HIERARCHICAL_TOPIC); - normalHierarchicalTopicConsumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - normalHierarchicalTopicConsumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - normalHierarchicalTopicConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration durableHierarchicalTopicConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, HIERARCHICAL_TOPIC); - durableHierarchicalTopicConsumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - durableHierarchicalTopicConsumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - durableHierarchicalTopicConsumerConfig.setDurable(true, "diffSub3"); // durable topic - durableHierarchicalTopicConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration queueConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TOPIC_NAME); // queue consumer - queueConsumerConfig.setMaximumMessagesToReceived(10L); // To wait if any message does received - queueConsumerConfig.setAsync(false); - - // Creating a publisher client configurations - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, TOPIC_NAME); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient durableTopicConsumerClient1 = new AndesClient(durableTopicConsumerConfig1, true); - durableTopicConsumerClient1.startClient(); - - AndesClient durableTopicConsumerClient2 = new AndesClient(durableTopicConsumerConfig2, true); - durableTopicConsumerClient2.startClient(); - - AndesClient normalTopicConsumerClient = new AndesClient(normalTopicConsumerConfig, true); - normalTopicConsumerClient.startClient(); - - AndesClient normalHierarchicalTopicConsumerClient = new AndesClient(normalHierarchicalTopicConsumerConfig, true); - normalHierarchicalTopicConsumerClient.startClient(); - - AndesClient durableHierarchicalTopicConsumerClient = new AndesClient(durableHierarchicalTopicConsumerConfig, true); - durableHierarchicalTopicConsumerClient.startClient(); - - AndesClient queueConsumerClient = new AndesClient(queueConsumerConfig, true); - queueConsumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.sleepForInterval(4000L); - - // Evaluation - AndesClientUtils.waitForMessagesAndShutdown(durableTopicConsumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - Assert.assertEquals(durableTopicConsumerClient1.getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from durable subscriber 1"); - - AndesClientUtils.shutdownClient(durableTopicConsumerClient2); - Assert.assertEquals(durableTopicConsumerClient2.getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from durable subscriber 2"); - - AndesClientUtils.shutdownClient(normalTopicConsumerClient); - Assert.assertEquals(normalTopicConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from normal topic subscriber"); - - AndesClientUtils.shutdownClient(normalHierarchicalTopicConsumerClient); - Assert.assertEquals(normalHierarchicalTopicConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT, - "Message receive error from normal hierarchical topic subscriber"); - - AndesClientUtils.shutdownClient(durableHierarchicalTopicConsumerClient); - Assert.assertEquals(durableHierarchicalTopicConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT, - "Message receive error from durable hierarchical topic subscriber"); - - AndesClientUtils.shutdownClient(queueConsumerClient); - Assert.assertEquals(queueConsumerClient.getReceivedMessageCount(), 0L, - "Message received from queue subscriber. This should not happen"); - - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, - "Message send error"); - } -} - diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DiscardAllowedMsgDeliveryStrategyTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DiscardAllowedMsgDeliveryStrategyTestCase.java deleted file mode 100644 index 9861614c..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DiscardAllowedMsgDeliveryStrategyTestCase.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.junit.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; - -/** - * This class bares test cases with "DISCARD_ALLOWED" topic message delivery strategy - */ -public class DiscardAllowedMsgDeliveryStrategyTestCase extends MBIntegrationBaseTest { - - private static final String DISCARD_ALLOWED_TOPIC = "discardAllowedTopic"; - - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass() - public void init() throws XPathExpressionException, MalformedURLException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set topicMessageDeliveryStrategy to DISCARD_ALLOWED so that broker will simulate an acknowledgement - * if some subscribers are slow to acknowledge the message - * - * @throws XPathExpressionException - * @throws IOException - * @throws ConfigurationException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws URISyntaxException - * @throws AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, - ConfigurationException, SAXException, XMLStreamException, LoginAuthenticationExceptionException, - URISyntaxException, AutomationUtilException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration - .PERFORMANCE_TUNING_TOPIC_MESSAGE_DELIVERY_STRATEGY, "DISCARD_ALLOWED"); - - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_ACK_HANDLING_MAX_UNACKED_MESSAGES, - "200"); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - - } - - /** - * 1. place subscriber A for DISCARD_ALLOWED_TOPIC with delay 0 - * 2. place subscriber B for DISCARD_ALLOWED_TOPIC with delay 0 - * 3. place subscriber C for DISCARD_ALLOWED_TOPIC with delay 200 milliseconds - * 4. place subscriber D for DISCARD_ALLOWED_TOPIC with delay 300 milliseconds - * - * verify all messages are received at the end. In long running this strategy prevents - * Out of Memory issues. Some acks are simulated flow slow subscribers. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - * @throws XPathExpressionException - * @throws CloneNotSupportedException - */ - @Test(groups = "wso2.mb", description = "Test server with DISCARD_ALLOWED topic message delivery strategy") - public void performDiscardAllowedTopicMessageDelivery() throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException, CloneNotSupportedException { - - //Setting values for the sent and received message counts - long sendToDiscardAllowedTopicCount = 2000; - long expectedMessageCountPerSubscriber = sendToDiscardAllowedTopicCount; - - //setting up subscriber A - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, DISCARD_ALLOWED_TOPIC); - consumerConfig1.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCountPerSubscriber); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCountPerSubscriber / 10L); - consumerConfig1.setAsync(false); - - - //setting up subscriber B - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - - - //setting up subscriber C - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - consumerConfig3.setRunningDelay(100); - - //setting up subscriber D - AndesJMSConsumerClientConfiguration consumerConfig4 = consumerConfig1.clone(); - consumerConfig4.setRunningDelay(200); - - //starting consumers - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - AndesClient consumerClient4 = new AndesClient(consumerConfig4, true); - consumerClient4.startClient(); - - // Creating publisher configuration - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, DISCARD_ALLOWED_TOPIC); - publisherConfig1.setNumberOfMessagesToSend(sendToDiscardAllowedTopicCount); - publisherConfig1.setRunningDelay(50); - publisherConfig1.setPrintsPerMessageCount(sendToDiscardAllowedTopicCount / 5L); - - //start publisher - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - publisherClient1.startClient(); - - //Receiving messages until message count gets stagnant and - //Once done, stop client - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.waitForMessagesAndShutdown(consumerClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - //these are very slow subscribers - AndesClientUtils.waitForMessagesAndShutdown(consumerClient3, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.waitForMessagesAndShutdown(consumerClient4, AndesClientConstants.DEFAULT_RUN_TIME ); - - //verify all messages are published - Assert.assertEquals(sendToDiscardAllowedTopicCount, publisherClient1.getSentMessageCount()); - - //verify all messages are received - org.testng.Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient1"); - org.testng.Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient2"); - org.testng.Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient3"); - org.testng.Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient4"); - - } - - /** - * Restore to the previous configurations when the shared subscription test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DuplicatesOkAcknowledgementsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DuplicatesOkAcknowledgementsTestCase.java deleted file mode 100644 index d7622e84..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DuplicatesOkAcknowledgementsTestCase.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes test cases to test duplicate acknowledgements modes for queues - */ -public class DuplicatesOkAcknowledgementsTestCase extends MBIntegrationBaseTest { - - /** - * Sending message count. - */ - private static final long SEND_COUNT = 100L; - - /** - * Expected message count. - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Prepare environment for tests - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * In this method we just test a sender and receiver with acknowledgements - * 1. Create consumer client with duplicate acknowledge mode - * 2. Publisher sends {@link #SEND_COUNT} messages. - * 3. Consumer will receive {@link #EXPECTED_COUNT} or more messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}, description = "Single queue send-receive test case with dup messages") - public void duplicatesOkAcknowledgementsTest() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "dupOkAckTestQueue"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.DUPS_OK_ACKNOWLEDGE); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "dupOkAckTestQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.sleepForInterval(5000); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message send failed"); - Assert.assertTrue(consumerClient.getReceivedMessageCount() >= EXPECTED_COUNT, "The number of received messages should be equal or more than the amount sent"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableMultipleTopicSubscriberTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableMultipleTopicSubscriberTestCase.java deleted file mode 100644 index bbc4e85a..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableMultipleTopicSubscriberTestCase.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes test cases to test multiple durable topics with different subscriptions. - */ -public class DurableMultipleTopicSubscriberTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 1000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * 1. Start two durable topic subscription. - * 2. Publisher sends {@link #SEND_COUNT} messages. - * 3. Each subscriber should received {@link #EXPECTED_COUNT} messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performMultipleDurableTopicTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a first JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicMultiple"); - consumerConfig1 - .setMaximumMessagesToReceived(EXPECTED_COUNT + 10L); // if messages received more than expected - consumerConfig1.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig1.setDurable(true, "multipleSub1"); - consumerConfig1.setAsync(false); - - // Creating a second JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicMultiple"); - consumerConfig2 - .setMaximumMessagesToReceived(EXPECTED_COUNT + 10L); // if messages received more than expected - consumerConfig2.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig2.setDurable(true, "multipleSub2"); - consumerConfig2.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicMultiple"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.sleepForInterval(4000); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message send failed"); - Assert.assertEquals(consumerClient1 - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from multipleSub1"); - Assert.assertEquals(consumerClient2 - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from multipleSub2"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicServerRestartTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicServerRestartTestCase.java deleted file mode 100644 index 5388621b..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicServerRestartTestCase.java +++ /dev/null @@ -1,130 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; - -/** - * The following test class contains durable topic test cases with relation to restarting the - * server. H2 in-memory mode will not work as restarting the server will not hold the sent messages. - */ -public class DurableTopicServerRestartTestCase extends MBIntegrationBaseTest { - - /** - * The amount messages to be sent by publisher. - */ - private static final long SEND_COUNT = 1000L; - - /** - * The amount of messages expected by the receiver. - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * The amount of time to wait till a process is finished. The process could be publishing or - * messages or receiving of messages. This is used as a safety precaution. - */ - private static final long WAITING_TIME_TILL_PROCESS_FINISHES = 5000L; - - /** - * Initializing test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * The test case checks for the durability of a durable topic when a server is restarted. - * 1. Create a durable topic subscriber. - * 2. Close the durable topic subscriber. - * 3. Publish message for the durable topic destination. - * 4. Restart the server. - * 5. Create the same durable topic subscriber again. - * 6. Check whether messages are received. - * - * @throws Exception - * @see MB-941 - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performDurablePublishRestartServerTestCase() - throws Exception { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableServerRestartTopic"); - consumerConfig.setDurable(true, "restartServerSub"); - consumerConfig.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableServerRestartTopic"); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Starting the first durable subscription. - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - // Wait till consumer starts listening - AndesClientUtils.sleepForInterval(WAITING_TIME_TILL_PROCESS_FINISHES); - - // Stopping the subscription - initialConsumerClient.stopClient(); - - // Wait till consumer stops - AndesClientUtils.sleepForInterval(WAITING_TIME_TILL_PROCESS_FINISHES); - - // Creating the publisher and publishing - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.sleepForInterval(WAITING_TIME_TILL_PROCESS_FINISHES); - - // Restarting the server - super.restartServer(); - - // Starting the second durable subscription - AndesClient secondaryConsumerClient = new AndesClient(consumerConfig, true); - secondaryConsumerClient.startClient(); - - // Waiting till all the messages are received - AndesClientUtils - .waitForMessagesAndShutdown(secondaryConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating the amount of messages published - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed."); - // Evaluating the amount of messages received - Assert.assertEquals(secondaryConsumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed for client 1."); - - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicSubscriptionTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicSubscriptionTestCase.java deleted file mode 100644 index cf774c2b..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicSubscriptionTestCase.java +++ /dev/null @@ -1,379 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class holds set of test cases to verify if durable topic subscriptions happen according to - * spec. - */ -public class DurableTopicSubscriptionTestCase extends MBIntegrationBaseTest { - - - /** - * Initializing test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * Creating a client with a subscription ID and unSubscribe it and create another client with - * the same subscription ID. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void subscribeDisconnectAndSubscribeAgainTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException, XPathExpressionException { - - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic1"); - consumerConfig.setDurable(true, "durableSub1"); - consumerConfig.setAsync(false); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - initialConsumerClient.getConsumers().get(0).unSubscribe(false); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(consumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - secondaryConsumerClient.getConsumers().get(0).unSubscribe(false); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - } - - /** - * Create with sub id=x topic=y. Try another subscription with same params. should rejects the - * subscription. - * - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientConfigurationException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = javax.jms.JMSException.class, - expectedExceptionsMessageRegExp = ".*Cannot subscribe to queue .* as it already has an existing exclusive consumer.*") - public void multipleSubsWithSameIdTest() - throws JMSException, NamingException, IOException, AndesClientConfigurationException, - AndesClientException, XPathExpressionException { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic2"); - consumerConfig.setDurable(true, "sriLanka"); - consumerConfig.setAsync(false); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(consumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * Create with sub id=x topic=y. Try another with sub id=z topic=y. Should be allowed. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void multipleSubsWithDifferentIdTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic3"); - consumerConfig.setDurable(true, "test1"); - - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = consumerConfig.clone(); - secondaryConsumerConfig.setSubscriptionID("test2"); - secondaryConsumerConfig.setAsync(false); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * 1. Create with sub id= x topic=y. - * 2. Close it. - * 3. Then try with sub id= x topic=z. - * 4. Should reject the subscription. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = javax.jms.JMSException.class, expectedExceptionsMessageRegExp = ".*An Exclusive Bindings already exists for different topic.*") - public void multipleSubsToDifferentTopicsWithSameSubIdTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic4"); - consumerConfig.setDurable(true, "test3"); - consumerConfig.setAsync(false); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - initialConsumerClient.stopClient(); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = consumerConfig.clone(); - secondConsumerConfig.setDestinationName("myTopic5"); - secondConsumerConfig.setAsync(false); - - AndesClient secondaryConsumerClient = new AndesClient(secondConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * 1. Create with sub id=x topic=y. - * 2. Create a normal topic subscription topic=y. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void durableTopicWithNormalTopicTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException, XPathExpressionException { - - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic5"); - consumerConfig.setDurable(true, "test5"); - consumerConfig.setAsync(false); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic5"); - secondConsumerConfig.setAsync(false); - AndesClient secondaryConsumerClient = new AndesClient(secondConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * 1. Create with sub id=x topic=y. - * 2. UnSubscribe. - * 3. Now try sub id=z topic=y. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws CloneNotSupportedException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void multipleSubsWithDiffIDsToSameTopicTest() - throws JMSException, NamingException, AndesClientConfigurationException, - CloneNotSupportedException, IOException, AndesClientException, - XPathExpressionException { - // Creating configurations - AndesJMSConsumerClientConfiguration firstConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "multiSubTopic"); - firstConsumerConfig.setAsync(false); - firstConsumerConfig.setDurable(true, "new1"); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = firstConsumerConfig.clone(); - secondConsumerConfig.setSubscriptionID("new2"); - - AndesJMSConsumerClientConfiguration thirdConsumerConfig = firstConsumerConfig.clone(); - thirdConsumerConfig.setSubscriptionID("new3"); - - AndesJMSConsumerClientConfiguration forthConsumerConfig = firstConsumerConfig.clone(); - forthConsumerConfig.setSubscriptionID("new4"); - - // Creating clients - AndesClient firstConsumerClient = new AndesClient(firstConsumerConfig, true); - firstConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondConsumerClient = new AndesClient(secondConsumerConfig, true); - secondConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient thirdConsumerClient = new AndesClient(thirdConsumerConfig, true); - thirdConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient forthConsumerClient = new AndesClient(forthConsumerConfig, true); - forthConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - firstConsumerClient.stopClient(); - secondConsumerClient.stopClient(); - thirdConsumerClient.stopClient(); - forthConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * 1. Create with sub id= x topic=y. - * 2. UnSubscribe. - * 3. Now try sub id= x topic=z. - * - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientConfigurationException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void subscribeUnSubscribeAndTryDifferentTopicTest() - throws JMSException, NamingException, IOException, AndesClientConfigurationException, - AndesClientException, XPathExpressionException { - - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic8"); - consumerConfig.setAsync(false); - consumerConfig.setDurable(true, "test8"); - - AndesJMSConsumerClientConfiguration secondaryConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "myTopic9"); - secondaryConfig.setAsync(false); - secondaryConfig.setDurable(true, "test8"); - - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - initialConsumerClient.getConsumers().get(0).unSubscribe(false); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(secondaryConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - secondaryConsumerClient.getConsumers().get(0).unSubscribe(false); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicSubscriptionWithSameClientIdTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicSubscriptionWithSameClientIdTestCase.java deleted file mode 100644 index 0c86fca3..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicSubscriptionWithSameClientIdTestCase.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.AfterClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.frameworkutils.FrameworkPathUtil; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import java.io.File; -import java.io.IOException; - - -/** - * This class holds test case to verify if shared durable topic subscriptions. Shared durable topic - * subscriptions has enabled in broker.xml and tested in following test class. - */ -public class DurableTopicSubscriptionWithSameClientIdTestCase extends MBIntegrationBaseTest { - - /** - * Expected amount set to more than what is received as the amount of messages received by the - * subscribers are unknown but the total should be the same amount as sent - */ - private static final long EXPECTED_COUNT = 500L; - private static final long SEND_COUNT_12 = 12L; - private static final long SEND_COUNT_8 = 8L; - - /** - * Prepare environment for durable topic subscription with same client Id tests - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - - super.serverManager = new ServerConfigurationManager(automationContext); - - // Replace the broker.xml with the allowSharedTopicSubscriptions configuration enabled under amqp - // and restarts the server. - super.serverManager.applyConfiguration(new File(FrameworkPathUtil.getSystemResourceLocation() + File.separator + - "artifacts" + File.separator + "mb" + File.separator + "config" + File.separator + - "allowSharedTopicSubscriptionsConfig" + File.separator + "broker.xml"), - new File(ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + File.separator + - "conf" + File.separator + "broker.xml"), true, true); - - } - - /** - * Start 3 durable subscribers. Start publisher which sends 12 messages. Get the total count - * received by all durable subscribers and compare with sent message count of the publisher. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performDurableTopicWithSameClientIdTestCase() throws Exception { - - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicSameClientID"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setDurable(true, "sameClientIDSub1"); - consumerConfig.setAsync(false); - - // Creating a JMS consumer client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicSameClientID"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT_12); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig, true); - consumerClient3.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - AndesClientUtils.shutdownClient(consumerClient3); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT_12, "Message sending failed."); - long totalReceivingMessageCount = - consumerClient1.getReceivedMessageCount() + consumerClient2 - .getReceivedMessageCount() + consumerClient3.getReceivedMessageCount(); - Assert.assertEquals(totalReceivingMessageCount, SEND_COUNT_12, "Message receive count not equal to sent message count."); - - } - - /** - * Start 6 durable subscribers with 3 for 2 topics each. Start publishers which sends 12 messages each. Get the total count - * received by all durable subscribers for each topic and compare with sent message count of the publisher. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performDurableTopicMultiClientTestCase() throws Exception { - - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicSameClientIDTopic1"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig1.setDurable(true, "sameClientIDSub2"); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicSameClientIDTopic2"); - consumerConfig2.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig2.setDurable(true, "sameClientIDSub3"); - consumerConfig2.setAsync(false); - - // Creating a JMS consumer client configuration - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicSameClientIDTopic1"); - publisherConfig1.setNumberOfMessagesToSend(SEND_COUNT_12); - - AndesJMSPublisherClientConfiguration publisherConfig2 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicSameClientIDTopic2"); - publisherConfig2.setNumberOfMessagesToSend(SEND_COUNT_8); - - // Creating clients - // Publishers and Consumers for "durableTopicSameClientIDTopic1" - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig1, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig1, true); - consumerClient3.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - publisherClient1.startClient(); - - // Publishers and Consumers for "durableTopicSameClientIDTopic2" - AndesClient consumerClient4 = new AndesClient(consumerConfig2, true); - consumerClient4.startClient(); - - AndesClient consumerClient5 = new AndesClient(consumerConfig2, true); - consumerClient5.startClient(); - - AndesClient consumerClient6 = new AndesClient(consumerConfig2, true); - consumerClient6.startClient(); - - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - publisherClient2.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - AndesClientUtils.shutdownClient(consumerClient3); - AndesClientUtils.shutdownClient(consumerClient4); - AndesClientUtils.shutdownClient(consumerClient5); - AndesClientUtils.shutdownClient(consumerClient6); - - // Evaluating - Assert.assertEquals(publisherClient1 - .getSentMessageCount(), SEND_COUNT_12, "Message sending failed for 'durableTopicSameClientIDTopic1'"); - Assert.assertEquals(publisherClient2 - .getSentMessageCount(), SEND_COUNT_8, "Message sending failed for 'durableTopicSameClientIDTopic2'"); - - long totalReceivingMessageCount = - consumerClient1.getReceivedMessageCount() + consumerClient2 - .getReceivedMessageCount() + consumerClient3.getReceivedMessageCount(); - Assert.assertEquals(totalReceivingMessageCount, SEND_COUNT_12, "Message receive count not equal to sent message " + - "count for 'durableTopicSameClientIDTopic1'."); - - totalReceivingMessageCount = - consumerClient4.getReceivedMessageCount() + consumerClient5 - .getReceivedMessageCount() + consumerClient6.getReceivedMessageCount(); - Assert.assertEquals(totalReceivingMessageCount, SEND_COUNT_8, "Message receive count not equal to sent message " + - "count for 'durableTopicSameClientIDTopic2'."); - } - - /** - * Restore to the previous configurations when the shared subscription test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicTestCase.java deleted file mode 100644 index ee24352a..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/DurableTopicTestCase.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test class for durable topics. Tests include the testing of durability properties by - * un-subscribing and resubscribing. - */ -public class DurableTopicTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send. - */ - private static final long SEND_COUNT = 1500L; - - /** - * Message count expected. - */ - private static final long EXPECTED_COUNT = 500L; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * 1. Start a durable topic subscription. - * 2. Send {@link #SEND_COUNT} messages. - * 3. After {@link #EXPECTED_COUNT} messages were received close the subscriber. - * 4. Subscribe again. After {@link #EXPECTED_COUNT} messages were received un-subscribe. - * 5. Subscribe again. Verify no more messages are coming. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performDurableTopicTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicTest"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig1.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig1.setDurable(true, "durableSubToDurableTopic1"); - consumerConfig1.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicTest"); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig1, true); - initialConsumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Wait until messages receive - AndesClientUtils - .waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Creating a second consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setUnSubscribeAfterEachMessageCount(EXPECTED_COUNT); - - // Creating clients - AndesClient secondaryConsumerClient = new AndesClient(consumerConfig2, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(secondaryConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Creating a third JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig2.clone(); - - // Creating clients - AndesClient tertiaryConsumerClient = new AndesClient(consumerConfig3, true); - tertiaryConsumerClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(tertiaryConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClientUtils.sleepForInterval(5000L); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(initialConsumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed for client 1."); - Assert.assertEquals(secondaryConsumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed for client 2."); - Assert.assertEquals(tertiaryConsumerClient - .getReceivedMessageCount(), 0L, "Messages received for client 3."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/HierarchicalTopicsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/HierarchicalTopicsTestCase.java deleted file mode 100644 index ddc7ce74..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/HierarchicalTopicsTestCase.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Tests topic subscriptions with Topic and Children(#) and Immediate Children(*). - */ -public class HierarchicalTopicsTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long EXPECTED_COUNT = 1000L; - - /** - * Message count expected - */ - private static final long SEND_COUNT = EXPECTED_COUNT; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * Un-matching hierarchical topic without wildcards should not receive message. - * 1. Create a first subscription under "games.cricket". - * 2. Publish messages to "games". - * 3. No messages should be received for the first subscription. - * 4. Close first subscriber. - * 5. Create a second subscription under "games.cricket". - * 6. Publish messages to "games.cricket". - * 7. Messages should receive for second subscriber. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performHierarchicalTopicsTopicOnlyTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - /** - * topic only option. Here we subscribe to games.cricket and verify that only messages - * specifically published to games.cricket is received - */ - //we should not get any message here - AndesClient receivingClient1 = getConsumerClientForTopic("games.cricket"); - receivingClient1.startClient(); - - AndesClient sendingClient1 = getPublishingClientForTopic("games"); - sendingClient1.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(receivingClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - //now we send messages specific to games.cricket topic. We should receive messages here - AndesClientUtils.sleepForInterval(1000); - - AndesClient receivingClient2 = getConsumerClientForTopic("games.cricket"); - receivingClient2.startClient(); - - AndesClient sendingClient2 = getPublishingClientForTopic("games.cricket"); - sendingClient2.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(receivingClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating publishers - Assert.assertEquals(sendingClient1 - .getSentMessageCount(), SEND_COUNT, "Publisher client1 failed to publish messages"); - Assert.assertEquals(sendingClient2 - .getSentMessageCount(), SEND_COUNT, "Publisher client2 failed to publish messages"); - - // Evaluating consumers - Assert.assertEquals(receivingClient1 - .getReceivedMessageCount(), 0, "Messages received when subscriber should not receive messages."); - Assert.assertEquals(receivingClient2 - .getReceivedMessageCount(), EXPECTED_COUNT, "Did not receive messages for games.cricket."); - } - - /** - * Immediate children option. Here you subscribe to the first level of sub-topics but not to the topic itself. - * 1. Create a first subscription under "games.*". - * 2. Publish messages to "games". - * 3. No messages should be received for the first subscription. - * 4. Close first subscription. - * 5. Create a second subscription under "games.*". - * 6. Publish messages to "games.football". - * 7. Messages should receive for second subscriber. - * 8. Close second subscription. - * 9. Create a third subscription under "games.*". - * 10. Publish messages to "games.cricket.sl". - * 11. No messages should be received for the third subscription. - * 12. Create a forth subscription under "*.cricket.sl". - * 13. Publish messages to "games.cricket.sl". - * 14. Messages should be received by forth subscriber. - * 15. No messages should be received for the first subscription. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performHierarchicalTopicsImmediateChildrenTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating clients - AndesClient consumerClient1 = getConsumerClientForTopic("games.*"); - consumerClient1.startClient(); - - AndesClient publisherClient1 = getPublishingClientForTopic("games"); - publisherClient1.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClientUtils.sleepForInterval(1000); - - // Creating clients - AndesClient consumerClient2 = getConsumerClientForTopic("games.*"); - consumerClient2.startClient(); - - AndesClient publisherClient2 = getPublishingClientForTopic("games.football"); - publisherClient2.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClientUtils.sleepForInterval(1000); - - // Creating clients - AndesClient consumerClient3 = getConsumerClientForTopic("games.*"); - consumerClient3.startClient(); - - AndesClient publisherClient3 = getPublishingClientForTopic("games.cricket.sl"); - publisherClient3.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient3, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClientUtils.sleepForInterval(1000); - - AndesClient consumerClient4 = getConsumerClientForTopic("*.cricket.sl"); - consumerClient4.startClient(); - - AndesClient publisherClient4 = getPublishingClientForTopic("games.cricket.sl"); - publisherClient4.startClient(); - - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient4, AndesClientConstants.DEFAULT_RUN_TIME); - - - // Evaluating publishers - Assert.assertEquals(publisherClient1.getSentMessageCount(), SEND_COUNT, - "Publisher publisherClient1 failed to publish messages."); - Assert.assertEquals(publisherClient2.getSentMessageCount(), SEND_COUNT, - "Publisher publisherClient2 failed to publish messages."); - Assert.assertEquals(publisherClient3.getSentMessageCount(), SEND_COUNT, - "Publisher publisherClient3 failed to publish messages."); - Assert.assertEquals(publisherClient4.getSentMessageCount(), SEND_COUNT, - "Publisher publisherClient4 failed to publish messages."); - - - // Evaluating consumers - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), 0, - "Messages received when subscriber consumerClient1 should not receive messages."); - - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), EXPECTED_COUNT, - "Did not receive messages for consumerClient2."); - - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), 0, - "Messages received when subscriber consumerClient3 should not receive messages."); - - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), EXPECTED_COUNT, - "Did not receive message count for consumerClient4."); - - - - } - - /** - * Topic and children option. Here messages published to topic itself and any level - * in the hierarchy should be received - * 1. Create a first subscription under "games.#". - * 2. Publish messages to "games". - * 3. Messages should receive for first subscriber. - * 4. Close first subscription. - * 5. Create a second subscription under "games.#". - * 6. Publish messages to "games.football.sl". - * 7. Messages should receive for second subscriber. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performHierarchicalTopicsChildrenTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - //we should get any message here - AndesClient consumerClient6 = getConsumerClientForTopic("games.#"); - consumerClient6.startClient(); - - AndesClient publisherClient6 = getPublishingClientForTopic("games"); - publisherClient6.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient6, AndesClientConstants.DEFAULT_RUN_TIME); - - //now we send messages to level 2 child. We should receive messages here - AndesClientUtils.sleepForInterval(1000); - - AndesClient consumerClient7 = getConsumerClientForTopic("games.#"); - consumerClient7.startClient(); - - AndesClient publisherClient7 = getPublishingClientForTopic("games.football.sl"); - publisherClient7.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient7, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating publishers - Assert.assertEquals(publisherClient6 - .getSentMessageCount(), SEND_COUNT, "Publisher publisherClient6 failed to publish messages."); - Assert.assertEquals(publisherClient7 - .getSentMessageCount(), SEND_COUNT, "Publisher publisherClient7 failed to publish messages."); - - // Evaluating consumers - Assert.assertEquals(consumerClient6 - .getReceivedMessageCount(), EXPECTED_COUNT, "Did not receive messages for consumerClient6."); - Assert.assertEquals(consumerClient7 - .getReceivedMessageCount(), EXPECTED_COUNT, "Did not receive messages for consumerClient7."); - } - - /** - * Creates an andes consumer client for a given topic name - * - * @param topicName Topic name - * @return The andes client. - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - private AndesClient getConsumerClientForTopic(String topicName) - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - return new AndesClient(consumerConfig, true); - } - - /** - * Create an andes publisher client for a given topic name - * - * @param topicName Topic name - * @return The andes client. - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - private AndesClient getPublishingClientForTopic(String topicName) - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - // Creating a JMS publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - return new AndesClient(publisherConfig, true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/InterTenantQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/InterTenantQueueTestCase.java deleted file mode 100644 index 484a93e1..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/InterTenantQueueTestCase.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.operations.utils.JMSClientHelper; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.Destination; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; - -import static org.testng.Assert.assertNull; - -/** - * This tests if a tenant user can create queues, send and receive messages. - */ -public class InterTenantQueueTestCase extends MBIntegrationBaseTest { - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Consumer from testtenant1 listens to messages from "testtenant1.com/tenant1queue" destination. - * 2. Publish messages to "testtenant1.com/www" by a tenant user from testtenant2. - * 3. No messages should be received by the consumer. - * - * @throws javax.jms.JMSException - * @throws javax.naming.NamingException - */ - @Test(groups = "wso2.mb", description = "Inter tenant queue publish test case") - public void performSingleQueueSendReceiveTestCase() - throws NamingException, JMSException, XPathExpressionException { - String queueName = "testtenant1.com/tenant1queue"; - InitialContext subscriberInitialContext = JMSClientHelper - .getInitialContextForQueue("tenant1user1!testtenant1.com", "tenant1user1", - "localhost", getAMQPPort().toString(), queueName); - InitialContext publisherInitialContext = JMSClientHelper - .getInitialContextForQueue("tenant2user1!testtenant2.com", "tenant2user1", - "localhost", getAMQPPort().toString(), queueName); - - // Initialize subscriber - ConnectionFactory subscriberConnectionFactory = (ConnectionFactory) subscriberInitialContext.lookup(JMSClientHelper.QUEUE_CONNECTION_FACTORY); - Connection subscriberConnection = subscriberConnectionFactory.createConnection(); - subscriberConnection.start(); - - Session subscriberSession = subscriberConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); - Destination subscriberDestination = (Destination) subscriberInitialContext.lookup(queueName); - MessageConsumer consumer = subscriberSession.createConsumer(subscriberDestination); - - // Initialize publisher - ConnectionFactory publisherConnectionFactory = (ConnectionFactory) publisherInitialContext.lookup(JMSClientHelper.QUEUE_CONNECTION_FACTORY); - Connection publisherConnection = publisherConnectionFactory.createConnection(); - publisherConnection.start(); - - Session publisherSession = publisherConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); - Destination publisherDestination = (Destination) publisherInitialContext.lookup(queueName); - MessageProducer producer = publisherSession.createProducer(publisherDestination); - - producer.send(publisherSession.createTextMessage("Test")); - - // Assuming latency is less than 5 seconds - Message message = consumer.receive(5000); - - assertNull(message, "Publisher was able to publish from a different domain"); - - // Close all connections - subscriberConnection.close(); - // publisher session will be closed by the server since it didn't had permissions - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSRoutingKeyPropertyTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSRoutingKeyPropertyTestCase.java deleted file mode 100644 index 0d20f5a6..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSRoutingKeyPropertyTestCase.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (c) 2016 WSO2 Inc. (http://wso2.com) All Rights Reserved. - * - * 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.lang3.StringUtils; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.AndesJMSConsumer; -import org.wso2.mb.integration.common.clients.AndesJMSPublisher; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.MessageProducer; -import javax.jms.TextMessage; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; - -/** - * Test cases to check that routing key value can be set as a JMS property. - */ -public class JMSRoutingKeyPropertyTestCase extends MBIntegrationBaseTest { - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesSetRoutingKeyValue = null; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - - // Get current "AndesSetRoutingKey" system property. - defaultAndesSetRoutingKeyValue = System.getProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY); - } - - /** - * Publishes few messages to a queue with setting "AndesSetRoutingKey" system property set to non-null value and - * check the correct routing key comes as a JMS property for each message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void queueRoutingKeyPropertyTestCase() throws AndesClientConfigurationException, XPathExpressionException, - IOException, JMSException, AndesClientException, NamingException { - System.setProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY, "1"); - long sendCount = 10; - final List messages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "RoutingKeyPropertyQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "RoutingKeyPropertyQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - messages.add(message); - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - for (Message message : messages) { - Assert.assertEquals(message.getStringProperty(AndesClientConstants - .JMS_ANDES_ROUTING_KEY_MESSAGE_PROPERTY), "RoutingKeyPropertyQueue", "Invalid value received for " + - "routing key property."); - } - } - - /** - * Publishes few messages to a topic with setting "AndesSetRoutingKey" system property set to non-null value and - * check the correct routing key comes as a JMS property for each message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void topicRoutingKeyPropertyTestCase() throws AndesClientConfigurationException, XPathExpressionException, - IOException, JMSException, AndesClientException, NamingException { - System.setProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY, "1"); - long sendCount = 10; - final List messages = new ArrayList<>(); - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "RoutingKeyPropertyTopic"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.TOPIC, "RoutingKeyPropertyTopic"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - messages.add(message); - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - for (Message message : messages) { - Assert.assertEquals(message.getStringProperty(AndesClientConstants - .JMS_ANDES_ROUTING_KEY_MESSAGE_PROPERTY), "RoutingKeyPropertyTopic", "Invalid value received for " + - "routing key property."); - - } - } - - /** - * Publishes few messages to a queue with setting "AndesSetRoutingKey" system property set to null value and check - * null comes as a JMS property "JMS_ANDES_ROUTING_KEY" for each message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void queueRoutingKeyPropertyNullTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - System.clearProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY); - long sendCount = 10; - final List messages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "RoutingKeyPropertyQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "RoutingKeyPropertyQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - messages.add(message); - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - for (Message message : messages) { - Assert.assertEquals(message.getStringProperty(AndesClientConstants - .JMS_ANDES_ROUTING_KEY_MESSAGE_PROPERTY), null, "Invalid value received for routing key property."); - } - } - - /** - * Publishes few messages to a topic with setting "AndesSetRoutingKey" system property set to null value and check - * null comes as a JMS property "JMS_ANDES_ROUTING_KEY" for each message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void topicRoutingKeyPropertyNullTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - System.clearProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY); - long sendCount = 10; - final List messages = new ArrayList<>(); - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "RoutingKeyPropertyTopic"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.TOPIC, "RoutingKeyPropertyTopic"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - messages.add(message); - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - for (Message message : messages) { - Assert.assertEquals(message.getStringProperty(AndesClientConstants - .JMS_ANDES_ROUTING_KEY_MESSAGE_PROPERTY), null, "Invalid value received for routing key property."); - - } - } - - /** - * Set default properties after test case. - */ - @AfterClass() - public void tearDown() { - // Setting system property "AndesAckWaitTimeOut" to default value. - if (StringUtils.isBlank(defaultAndesSetRoutingKeyValue)) { - System.clearProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY); - } else { - System.setProperty(AndesClientConstants.ANDES_SET_ROUTING_KEY, defaultAndesSetRoutingKeyValue); - } - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSSubscriberTransactionMessageReceiveOrderTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSSubscriberTransactionMessageReceiveOrderTestCase.java deleted file mode 100644 index d79d04e6..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSSubscriberTransactionMessageReceiveOrderTestCase.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class contains tests to verify if transacted rollback messages are redelivered - * to subscriber in order. - */ -public class JMSSubscriberTransactionMessageReceiveOrderTestCase extends MBIntegrationBaseTest { - - /** - * Message send count. - */ - private static final long SEND_COUNT = 10L; - - /** - * Number of rollback iterations. - */ - private static final int ROLLBACK_ITERATIONS = 5; - - /** - * Queue name which will used in transacted session rollback test. - */ - private static final String QUEUE_DESTINATION = "transactionRollbackQueue"; - - /** - * Total expected message count after rollback. - */ - private static final long EXPECTED_COUNT = SEND_COUNT * ROLLBACK_ITERATIONS; - - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - - /** - * 1. Start a queue receiver with transacted sessions. - * 2. Send 10 messages. - * 3. After 10 messages are received rollback session. - * 4. Do same 5 times. After 50 messages received commit the session and close subscriber. - * 5. Analyse and see if each rollback message is received in order five times. - * - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws javax.jms.JMSException - * @throws javax.naming.NamingException - * @throws java.io.IOException - * @throws CloneNotSupportedException - */ - @Test(groups = {"wso2.mb", "queue", "transactions"}) - public void performJMSSubscriberTransactionMessageReceiveOrderTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Create a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, QUEUE_DESTINATION); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.SESSION_TRANSACTED); - consumerConfig.setCommitAfterEachMessageCount(EXPECTED_COUNT); - consumerConfig.setRollbackAfterEachMessageCount(SEND_COUNT); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants. - FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Create JMS publisher configurations - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, QUEUE_DESTINATION); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Initialize consumer client - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - // Initialize queue publisher - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(initialConsumerClient, - AndesClientConstants.DEFAULT_RUN_TIME); - - // Check whether transacted rollback operation keeps message order while redelivering messages. - boolean isRollbackPreservesMessageOrder = - initialConsumerClient.checkIfTransactedRollbackPreservesOrder(SEND_COUNT); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, - "Message sending failed."); - Assert.assertEquals(initialConsumerClient.getReceivedMessageCount(), - EXPECTED_COUNT, "Message receiving failed."); - Assert.assertTrue(isRollbackPreservesMessageOrder, - "Expected message count was not delivered."); - } - - -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSSubscriberTransactionsSessionCommitRollbackTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSSubscriberTransactionsSessionCommitRollbackTestCase.java deleted file mode 100644 index b91fbf55..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/JMSSubscriberTransactionsSessionCommitRollbackTestCase.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.Map; - -/** - * Tests - */ -public class JMSSubscriberTransactionsSessionCommitRollbackTestCase extends MBIntegrationBaseTest { - - /** - * Message send count. - */ - private static final long SEND_COUNT = 10L; - - /** - * Number of rollback iterations. - */ - private static final int ROLLBACK_ITERATIONS = 5; - - /** - * Total expected message count after rollback. - */ - private static final long EXPECTED_COUNT = SEND_COUNT * ROLLBACK_ITERATIONS; - - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Start a queue receiver with transacted sessions. - * 2. Send 10 messages. - * 3. After 10 messages are received rollback session. - * 4. Do same 5 times. After 50 messages received commit the session and close subscriber. - * 5. Analyse and see if each message is duplicated five times. - * - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws CloneNotSupportedException - */ - @Test(groups = {"wso2.mb", "queue", "transactions"}) - public void performJMSSubscriberTransactionsSessionCommitRollbackTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "transactionQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.SESSION_TRANSACTED); - consumerConfig.setCommitAfterEachMessageCount(EXPECTED_COUNT); - consumerConfig.setRollbackAfterEachMessageCount(SEND_COUNT); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT/10L); - consumerConfig.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "transactionQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClientUtils.sleepForInterval(1000); - - Map duplicateMessages = initialConsumerClient.checkIfMessagesAreDuplicated(); - - boolean expectedCountDelivered = false; - // waiting till the number of deliveries is equal to {@link #ROLLBACK_ITERATIONS}. - if (duplicateMessages != null) { - for (Long messageIdentifier : duplicateMessages.keySet()) { - int numberOfTimesDelivered = duplicateMessages.get(messageIdentifier); - if (ROLLBACK_ITERATIONS == numberOfTimesDelivered) { - expectedCountDelivered = true; - } else { - expectedCountDelivered = false; - break; - } - } - } - - AndesClientUtils.sleepForInterval(2000); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(initialConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - Assert.assertTrue(expectedCountDelivered, "Expected message count was not delivered."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/LZ4CompressionTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/LZ4CompressionTestCase.java deleted file mode 100644 index 1c013103..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/LZ4CompressionTestCase.java +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; - -/** - * This class contains tests for AMQP message content validity, with compression. - */ -public class LZ4CompressionTestCase extends MBIntegrationBaseTest { - - /** - * Input file size is 256KB - */ - private static final int SIZE_TO_READ = 250 * 1024; - /** - * Message sent count - */ - private static final int SEND_COUNT = 1; - - /** - * Message expected count - */ - private static final int EXPECTED_COUNT = SEND_COUNT; - - /** - * Initialize the test as super tenant user - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set allowCompression to true so that broker will compress messages before storing into the database, and - * reduce maximum content chunk size to 100 from default value (65500); to create more content chunks - * from compressed content, to check chunk data retrieval. - * - * @throws XPathExpressionException - * @throws java.io.IOException - * @throws org.apache.commons.configuration.ConfigurationException - * @throws org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, ConfigurationException, - AutomationUtilException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_ALLOW_COMPRESSION, "true"); - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_MAX_CONTENT_CHUNK_SIZE, "100"); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Test the Queue message content integrity of a single message when compression is enabled, by comparing the - * sent and received message content which spreads over several message content chunks. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Compressed queue message content validation test case") - public void performQueueContentSendCompressQueueReceiveTestCase() throws AndesClientConfigurationException, IOException, - JMSException, NamingException, AndesClientException, XPathExpressionException { - - // Reading message content - char[] inputContent = new char[SIZE_TO_READ]; - - BufferedReader inputFileReader = new BufferedReader( - new FileReader(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB)); - inputFileReader.read(inputContent); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "QueueContentSendCompressReceive"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - // writing received messages. - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "QueueContentSendCompressReceive"); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - // message content will be read from this path and published - publisherConfig.setReadMessagesFromFilePath(AndesClientConstants - .MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Reading received message content - char[] outputContent = new char[SIZE_TO_READ]; - - BufferedReader outFileReader = - new BufferedReader(new FileReader(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES)); - outFileReader.read(outputContent); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - Assert.assertEquals(new String(outputContent), new String(inputContent), "Message content has been modified."); - } - - - /** - * Test the durable topic message content integrity of a single message when compression is enabled, by comparing - * the sent and received message content which spreads over several message content chunks. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Compressed durable topic message content validation test case") - public void performQueueContentSendCompressDurableTopicReceiveTestCase() throws AndesClientConfigurationException, IOException, - JMSException, NamingException, AndesClientException, XPathExpressionException { - - // Reading message content - char[] inputContent = new char[SIZE_TO_READ]; - - BufferedReader inputFileReader = new BufferedReader( - new FileReader(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB)); - inputFileReader.read(inputContent); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "DurableTopicContentSendCompressReceive"); - consumerConfig.setDurable(true, "compression-new1"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - // writing received messages. - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.TOPIC, "DurableTopicContentSendCompressReceive"); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - // message content will be read from this path and published - publisherConfig.setReadMessagesFromFilePath(AndesClientConstants - .MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Reading received message content - char[] outputContent = new char[SIZE_TO_READ]; - - BufferedReader outFileReader = - new BufferedReader(new FileReader(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES)); - outFileReader.read(outputContent); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - Assert.assertEquals(new String(outputContent), new String(inputContent), "Message content has been modified."); - } - - - - - /** - * Test the topic message content integrity of a single message when compression is enabled, by comparing - * the sent and received message content which spreads over several message content chunks. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Compressed topic message content validation test case") - public void performQueueContentSendCompressTopicReceiveTestCase() throws AndesClientConfigurationException, IOException, - JMSException, NamingException, AndesClientException, XPathExpressionException { - - // Reading message content - char[] inputContent = new char[SIZE_TO_READ]; - - BufferedReader inputFileReader = new BufferedReader( - new FileReader(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB)); - inputFileReader.read(inputContent); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "TopicContentSendCompressReceive"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - // writing received messages. - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.TOPIC, "TopicContentSendCompressReceive"); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - // message content will be read from this path and published - publisherConfig.setReadMessagesFromFilePath(AndesClientConstants - .MESSAGE_CONTENT_INPUT_FILE_PATH_WITHOUT_REPETITIONS_256KB); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Reading received message content - char[] outputContent = new char[SIZE_TO_READ]; - - BufferedReader outFileReader = - new BufferedReader(new FileReader(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES)); - outFileReader.read(outputContent); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - Assert.assertEquals(new String(outputContent), new String(inputContent), "Message content has been modified."); - } - - - /** - * Restore to the previous configurations when the message content compression test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MessageContentTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MessageContentTestCase.java deleted file mode 100644 index 375cd663..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MessageContentTestCase.java +++ /dev/null @@ -1,247 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSMessageType; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileWriter; -import java.io.IOException; -import java.io.FileReader; - -/** - * This class contains tests for message content validity. - */ -public class MessageContentTestCase extends MBIntegrationBaseTest { - - /** - * 256KB size. This is to create more than 3 message content chunks to check chunk data - * retrieval. - */ - private static final int SIZE_TO_READ = 250 * 1024; - /** - * Message sent count. - */ - private static final long SEND_COUNT = 1L; - - /** - * Message expected count. - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initialize the test as super tenant user. - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set allowCompression to false, so that broker won't compress messages - * - * @throws XPathExpressionException - * @throws java.io.IOException - * @throws org.apache.commons.configuration.ConfigurationException - * @throws org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, ConfigurationException, - AutomationUtilException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_ALLOW_COMPRESSION, "false"); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Test the message content integrity of a single message by comparing the sent and received - * message content which spreads over several message content chunks. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Message content validation test case") - public void performQueueContentSendReceiveTestCase() - throws AndesClientConfigurationException, IOException, JMSException, NamingException, - AndesClientException, XPathExpressionException { - - // Reading message content - char[] inputContent = new char[SIZE_TO_READ]; - try { - BufferedReader inputFileReader = - new BufferedReader(new FileReader(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB)); - inputFileReader.read(inputContent); - } catch (FileNotFoundException e) { - log.warn("Error locating input content from file : " + AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); - } catch (IOException e) { - log.warn("Error reading input content from file : " + AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); - } - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "QueueContentSendReceive"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - // writing received messages. - consumerConfig - .setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "QueueContentSendReceive"); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - // message content will be read from this path and published - publisherConfig - .setReadMessagesFromFilePath(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Reading received message content - char[] outputContent = new char[SIZE_TO_READ]; - - try { - BufferedReader inputFileReader = - new BufferedReader(new FileReader(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES)); - inputFileReader.read(outputContent); - } catch (FileNotFoundException e) { - log.warn("Error locating output content from file : " + AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); - } catch (IOException e) { - log.warn("Error reading output content from file : " + AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); - } - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - Assert.assertEquals(new String(outputContent), new String(inputContent), "Message content has been modified."); - } - - /** - * Test if Map messages containing multiple entries with 250K String sizes can be sent and received. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Message content validation test case") - public void performLargeStringMapMessageSendReceiveTestCase() - throws AndesClientConfigurationException, IOException, JMSException, NamingException, - AndesClientException, XPathExpressionException { - - String queueName = "LargeMapMessageQueue"; - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setJMSMessageType(JMSMessageType.MAP); - - //Write large map message to input file - BufferedWriter br = new BufferedWriter(new FileWriter(new File((AndesClientConstants - .MAP_MESSAGE_CONTENT_INPUT_FILE_PATH)))); - for (int i = 0; i < 3; i++) { - StringBuilder builder = new StringBuilder(""); - for (int j = 0; j < 250000; j++) { - builder.append("a"); - } - br.write(builder.toString()); - br.newLine(); - } - br.close(); - - // message content will be read from this path and published - publisherConfig.setReadMessagesFromFilePath(AndesClientConstants.MAP_MESSAGE_CONTENT_INPUT_FILE_PATH); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - } - - /** - * Restore to the previous configurations when the message content test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedDurableTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedDurableTopicTestCase.java deleted file mode 100644 index 4b9e87b9..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedDurableTopicTestCase.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Unit tests to ensure jms expiration works as expected with durable topics. - */ -public class MixedDurableTopicTestCase extends MBIntegrationBaseTest { - - /** - * Total message amount published - */ - private static final long SEND_COUNT = 1000L; - - /** - * Message amount published without an expiration - */ - private static final long SEND_COUNT_WITHOUT_EXPIRATION = 600L; - - /** - * Message content published with an expiration - */ - private static final long SEND_COUNT_WITH_EXPIRATION = SEND_COUNT - SEND_COUNT_WITHOUT_EXPIRATION; - - /** - * Amount of message expected by a subscriber - */ - private static final long EXPECTED_COUNT_BY_ONE_SUBSCRIBER = SEND_COUNT_WITHOUT_EXPIRATION / 2L; - - /** - * Expiration time for message with expiration time - */ - private static final long EXPIRATION_TIME = 5L; - - /** - * Initializing test case - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * 1. Start durable topic subscriber - * 2. Send 1000 messages with 400 messages having expiration - * 3. Stop subscriber after receiving 300 messages - * 4. Start subscriber - * 5. Verify that the subscriber has received remaining 300 messages. - * 6. Pass test case if and only if 600 messages in total have been received. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single durable topic send-receive test case with jms expiration") - public void performExpiryDurableTopicTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Creating a subscriber client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicWithExpiration"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT_BY_ONE_SUBSCRIBER); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT_BY_ONE_SUBSCRIBER / 10L); - consumerConfig.setDurable(true, "expirationSub"); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfigWithoutExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicWithExpiration"); - publisherConfigWithoutExpiration.setNumberOfMessagesToSend(SEND_COUNT_WITHOUT_EXPIRATION); - publisherConfigWithoutExpiration.setPrintsPerMessageCount(SEND_COUNT_WITHOUT_EXPIRATION / 10L); - - AndesJMSPublisherClientConfiguration publisherConfigWithExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "durableTopicWithExpiration"); - publisherConfigWithExpiration.setNumberOfMessagesToSend(SEND_COUNT_WITH_EXPIRATION); - publisherConfigWithExpiration.setPrintsPerMessageCount(SEND_COUNT_WITH_EXPIRATION / 10L); - publisherConfigWithExpiration.setJMSMessageExpiryTime(EXPIRATION_TIME); // Setting expiry time - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClient publisherClientWithoutExpiration = new AndesClient(publisherConfigWithoutExpiration, true); - publisherClientWithoutExpiration.startClient(); - - AndesClient publisherClientWithExpiration = new AndesClient(publisherConfigWithExpiration, true); - publisherClientWithExpiration.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Creating second subscriber client configuration - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = consumerConfig.clone(); - secondaryConsumerConfig.setUnSubscribeAfterEachMessageCount(EXPECTED_COUNT_BY_ONE_SUBSCRIBER); - secondaryConsumerConfig.setMaximumMessagesToReceived(Long.MAX_VALUE); - - // Creating second subscriber - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(secondaryConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Creating third subscriber - AndesClient tertiaryConsumerClient = new AndesClient(consumerConfig, true); - tertiaryConsumerClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(tertiaryConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClientWithoutExpiration.getSentMessageCount(), SEND_COUNT_WITHOUT_EXPIRATION, "Message send failed for publisher client without expiration"); - Assert.assertEquals(publisherClientWithExpiration.getSentMessageCount(), SEND_COUNT_WITH_EXPIRATION, "Message send failed for publisher client with expiration"); - - Assert.assertEquals(initialConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT_BY_ONE_SUBSCRIBER, "Message receiving failed for initial consumer client"); - Assert.assertEquals(secondaryConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT_BY_ONE_SUBSCRIBER, "Message receiving failed for secondary consumer client"); - Assert.assertEquals(tertiaryConsumerClient.getReceivedMessageCount(), 0L, "Message receiving failed for tertiaryConsumerClient"); - - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedQueueTestCase.java deleted file mode 100644 index 43694dde..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedQueueTestCase.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes unit tests to verify that messages with JMS expiration are properly removed when delivering to queues. - */ -public class MixedQueueTestCase extends MBIntegrationBaseTest { - - /** - * Initializing test case - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Subscribe to a queue. - * 2. Send messages with and without expiry as configured - * 3. Verify that only messages without expiry have been received and that both types of messages have been sent. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single queue send-receive test case with 50% expired messages") - public void performSingleQueueExpirySendReceiveTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Message send count - long sendCount = 1000L; - // Message count sent without expiration - long sendCountWithoutExpiration = sendCount / 2L; - // Message count sent with expiration - long sendCountWithExpiration = sendCount - sendCountWithoutExpiration; - // Expiration time for messages with expiration - long expirationTime = 1L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiration"); - consumerConfig.setMaximumMessagesToReceived(sendCountWithoutExpiration); - consumerConfig.setPrintsPerMessageCount(sendCountWithoutExpiration / 10L); - consumerConfig.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfigWithoutExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiration"); - publisherConfigWithoutExpiration.setNumberOfMessagesToSend(sendCountWithoutExpiration); - publisherConfigWithoutExpiration.setPrintsPerMessageCount(sendCountWithoutExpiration / 10L); - - AndesJMSPublisherClientConfiguration publisherConfigWithExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiration"); - publisherConfigWithExpiration.setNumberOfMessagesToSend(sendCountWithExpiration); - publisherConfigWithExpiration.setPrintsPerMessageCount(sendCountWithExpiration / 10L); - publisherConfigWithExpiration.setJMSMessageExpiryTime(expirationTime); // setting expiration time - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClientWithoutExpiration = new AndesClient(publisherConfigWithoutExpiration, true); - publisherClientWithoutExpiration.startClient(); - - AndesClient publisherClientWithExpiration = new AndesClient(publisherConfigWithExpiration, true); - publisherClientWithExpiration.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClientWithoutExpiration.getSentMessageCount(), sendCountWithoutExpiration, "Message send failed for publisher without expiration."); - Assert.assertEquals(publisherClientWithExpiration.getSentMessageCount(), sendCountWithExpiration, "Message send failed for publisher with expiration."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), sendCountWithoutExpiration, "Message receiving failed."); - } - - /** - * 1. Start two subscribers - * 2. Send messages with and without expiration as configured - * 3. Verify that the total number of messages received by both subscribers is equal to message count sent with no expiration. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "send messages to a queue which has two consumers with jms expiration") - public void performManyQueueExpirySendReceiveTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Message send count - long sendCount = 1000L; - // Message count sent without expiration - long sendCountWithoutExpiration = sendCount / 2L; - // Message count sent with expiration - long sendCountWithExpiration = sendCount - sendCountWithoutExpiration; - // Message count expected by one subscriber. Considering 2 consumers. - long expectedCountByOneSubscriber = sendCountWithoutExpiration / 2L; - // Expiration time for messages with expiration. - long expirationTime = 1L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration initialConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiryAndManyConsumers"); - initialConsumerConfig.setMaximumMessagesToReceived(expectedCountByOneSubscriber); - initialConsumerConfig.setPrintsPerMessageCount(expectedCountByOneSubscriber / 10L); - initialConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiryAndManyConsumers"); - secondaryConsumerConfig.setMaximumMessagesToReceived(expectedCountByOneSubscriber); - secondaryConsumerConfig.setPrintsPerMessageCount(expectedCountByOneSubscriber / 10L); - secondaryConsumerConfig.setAsync(false); - - // Creating a consumer client configuration - AndesJMSPublisherClientConfiguration publisherConfigWithoutExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiryAndManyConsumers"); - publisherConfigWithoutExpiration.setNumberOfMessagesToSend(sendCountWithoutExpiration); - publisherConfigWithoutExpiration.setPrintsPerMessageCount(sendCountWithoutExpiration / 10L); - - AndesJMSPublisherClientConfiguration publisherConfigWithExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueWithExpiryAndManyConsumers"); - publisherConfigWithExpiration.setPrintsPerMessageCount(sendCountWithExpiration / 10L); - publisherConfigWithExpiration.setNumberOfMessagesToSend(sendCountWithExpiration); - publisherConfigWithExpiration.setJMSMessageExpiryTime(expirationTime); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(initialConsumerConfig, true); - initialConsumerClient.startClient(); - - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClient publisherClientWithoutExpiration = new AndesClient(publisherConfigWithoutExpiration, true); - publisherClientWithoutExpiration.startClient(); - - AndesClient publisherClientWithExpiration = new AndesClient(publisherConfigWithExpiration, true); - publisherClientWithExpiration.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(secondaryConsumerClient); - - // Evaluating - Assert.assertEquals(publisherClientWithoutExpiration.getSentMessageCount(), sendCountWithoutExpiration, "Message send failed for publisher without expiration."); - Assert.assertEquals(publisherClientWithExpiration.getSentMessageCount(), sendCountWithExpiration, "Message send failed for publisher with expiration"); - - Assert.assertEquals(initialConsumerClient.getReceivedMessageCount(), expectedCountByOneSubscriber, "Message receiving failed for client 1."); - Assert.assertEquals(secondaryConsumerClient.getReceivedMessageCount(), expectedCountByOneSubscriber, "Message receiving failed for client 2."); - Assert.assertEquals(initialConsumerClient.getReceivedMessageCount() + secondaryConsumerClient.getReceivedMessageCount(), sendCountWithoutExpiration, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedTopicTestCase.java deleted file mode 100644 index 8d11be6e..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MixedTopicTestCase.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes unit tests to verify that messages with JMS expiration are properly removed when delivering to - * non-durable topics. - */ -public class MixedTopicTestCase extends MBIntegrationBaseTest { - - /** - * Total message count sent - */ - private static final long SEND_COUNT = 1000L; - - /** - * Message count sent without expiration - */ - private static final long SEND_COUNT_WITHOUT_EXPIRATION = 600L; - - /** - * Message count sent with expiration - */ - private static final long SEND_COUNT_WITH_EXPIRATION = SEND_COUNT - SEND_COUNT_WITHOUT_EXPIRATION; - - /** - * Expected message count - */ - private static final long EXPECTED_COUNT = SEND_COUNT_WITHOUT_EXPIRATION; - - /** - * Expiration time for messages with expiration time - */ - private static final long EXPIRATION_TIME = 5L; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Subscribe to a topic. - * 2. Send messages with and without expiry as configured - * 3. Verify that only messages without expiry have been received and that both types of messages have been sent. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single topic send-receive test case with jms expiration") - public void performSingleExpiryTopicSendReceiveTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "topicWithExpiry"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfigWithoutExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "topicWithExpiry"); - publisherConfigWithoutExpiration.setPrintsPerMessageCount(SEND_COUNT_WITHOUT_EXPIRATION / 10L); - publisherConfigWithoutExpiration.setNumberOfMessagesToSend(SEND_COUNT_WITHOUT_EXPIRATION); - - AndesJMSPublisherClientConfiguration publisherConfigWithExpiration = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "topicWithExpiry"); - publisherConfigWithExpiration.setPrintsPerMessageCount(SEND_COUNT_WITH_EXPIRATION / 10L); - publisherConfigWithExpiration.setNumberOfMessagesToSend(SEND_COUNT_WITH_EXPIRATION); - publisherConfigWithExpiration.setJMSMessageExpiryTime(EXPIRATION_TIME); // Setting expiry time - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClientWithoutExpiration = new AndesClient(publisherConfigWithoutExpiration, true); - publisherClientWithoutExpiration.startClient(); - - AndesClient publisherClientWithExpiration = new AndesClient(publisherConfigWithExpiration, true); - publisherClientWithExpiration.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClientWithoutExpiration.getSentMessageCount(), SEND_COUNT_WITHOUT_EXPIRATION, "Message send failed for publisherClientWithoutExpiration"); - Assert.assertEquals(publisherClientWithExpiration.getSentMessageCount(), SEND_COUNT_WITH_EXPIRATION, "Message send failed for publisherClientWithExpiration"); - - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed for consumerClient"); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantDurableTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantDurableTopicTestCase.java deleted file mode 100644 index 8a98687a..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantDurableTopicTestCase.java +++ /dev/null @@ -1,270 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.core.TopicRolePermission; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * Testing for multi tenant - Durable subscriber specific test case - *

- * Test case 1 - * 1. Start a Durable subscriber from a normal tenant (Not super tenant) - * (Topic - topictenant1.com/durableTenantTopic) - * 2. Send 200 messages to the the topic - * 3. Durable subscriber should receive all 200 messages - *

- * Test case 2 - * 1. Start 2 Durable subscribers from different tenant for the same topic - * 2. Start 2 publishers from different tenant for the same topic - * 3. Durable subscribers should receive the message from their tenant only. - */ -public class MultiTenantDurableTopicTestCase extends MBIntegrationBaseTest { - - public static final String PUBLISHER_ROLE = "topicPublisher"; - - private UserManagementClient userManagementClient; - - /** - * Initializing test - * - * @throws XPathExpressionException - * @throws RemoteException - * @throws UserAdminUserAdminException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, RemoteException, UserAdminUserAdminException { - super.init(TestUserMode.SUPER_TENANT_USER); - - // Logging into user management as admin and adding a new role to give permission for publishing/subscribe - userManagementClient = new UserManagementClient(backendURL, "admin@topictenant1.com", - "admin"); - - String[] publishers = {"topictenantuser1"}; - userManagementClient.addRole(PUBLISHER_ROLE, publishers, new String[]{}); - } - - /** - * Test case 1 - * 1. Start a Durable subscriber from a normal tenant (Not super tenant) - * (Topic - topictenant1.com/durableTenantTopic) - * 2. Send 200 messages to the the topic - * 3. Durable subscriber should receive all 200 messages - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single Tenant Test case") - public void performSingleTenantMultipleUserDurableTopicTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException, URISyntaxException, SAXException, - LoginAuthenticationExceptionException, XMLStreamException, LogoutAuthenticationExceptionException, - AndesAdminServiceBrokerManagerAdminException, AndesEventAdminServiceEventAdminException, AutomationUtilException { - - String destinationName = "topictenant1.com/durableTenantTopic"; - - int sendMessageCount = 200; - int expectedMessageCount = 200; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration adminConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "admin!topictenant1.com", "admin", - ExchangeType.TOPIC, destinationName); - adminConsumerConfig.setUnSubscribeAfterEachMessageCount(expectedMessageCount); - adminConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - adminConsumerConfig.setDurable(true, "topictenant1.com/multitenant1"); - adminConsumerConfig.setAsync(false); - - // Creating clients - AndesClient adminConsumerClient = new AndesClient(adminConsumerConfig, true); - adminConsumerClient.startClient(); - - - // Add permission to the created role to be able to publish/subscribe - TopicRolePermission topicRolePermission = new TopicRolePermission(); - topicRolePermission.setRoleName(PUBLISHER_ROLE); - topicRolePermission.setAllowedToSubscribe(true); - topicRolePermission.setAllowedToPublish(true); - - // Get the automation context for the tenant - AutomationContext tenantContext = new AutomationContext("MB", "mb001", "topictenant1", "topictenantuser1"); - - - LoginLogoutClient loginLogoutClient = new LoginLogoutClient(tenantContext); - String sessionCookie = loginLogoutClient.login(); - - TopicAdminClient topicAdminClient = - new TopicAdminClient(super.backendURL, sessionCookie); - - // Update permissions for the destination queue to be able to publish/subscribe from topictenantuser1 - topicAdminClient.updatePermissionForTopic(destinationName, topicRolePermission); - loginLogoutClient.logout(); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration tenantPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.TOPIC, destinationName); - tenantPublisherConfig.setNumberOfMessagesToSend(sendMessageCount); - tenantPublisherConfig.setPrintsPerMessageCount(sendMessageCount / 10L); - - AndesClient tenantPublisherClient = new AndesClient(tenantPublisherConfig, true); - tenantPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(adminConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(tenantPublisherClient - .getSentMessageCount(), sendMessageCount, "Sending failed for " + - "topictenantuser1!topictenant1.com."); - Assert.assertEquals(adminConsumerClient - .getReceivedMessageCount(), expectedMessageCount, "Message " + - "receiving failed for admin!topictenant1.com."); - } - - /** - * Test case 2 - * 1. Start 2 Durable subscribers from different tenant for the same topic - * 2. Start 2 publishers from different tenant for the same topic - * 3. Durable subscribers should receive the message from their tenant only. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Multiple Tenant Single Users Test") - public void performMultipleTenantDurableTopicTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - int sendMessageCount1 = 80; - int sendMessageCount2 = 120; - int expectedMessageCount = 200; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration tenant1ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant1.com/multitenantTopicDurable"); - tenant1ConsumerConfig.setUnSubscribeAfterEachMessageCount(expectedMessageCount); - tenant1ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant1ConsumerConfig.setDurable(true, "topictenant1.com/multi"); - tenant1ConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration tenant2ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant2.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant2.com/multitenantTopicDurable"); - tenant2ConsumerConfig.setUnSubscribeAfterEachMessageCount(expectedMessageCount); - tenant2ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant2ConsumerConfig.setDurable(true, "topictenant2.com/multi2"); - tenant2ConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration tenant1PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant1.com/multitenantTopicDurable"); - tenant1PublisherConfig.setNumberOfMessagesToSend(sendMessageCount1); - tenant1PublisherConfig.setPrintsPerMessageCount(sendMessageCount1 / 10L); - - AndesJMSPublisherClientConfiguration tenant2PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant2.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant2.com/multitenantTopicDurable"); - tenant2PublisherConfig.setNumberOfMessagesToSend(sendMessageCount2); - tenant2PublisherConfig.setPrintsPerMessageCount(sendMessageCount2 / 10L); - - // Creating clients - AndesClient tenant1ConsumerClient = new AndesClient(tenant1ConsumerConfig, true); - tenant1ConsumerClient.startClient(); - - AndesClient tenant2ConsumerClient = new AndesClient(tenant2ConsumerConfig, true); - tenant2ConsumerClient.startClient(); - - AndesClient tenant1PublisherClient = new AndesClient(tenant1PublisherConfig, true); - tenant1PublisherClient.startClient(); - - AndesClient tenant2PublisherClient = new AndesClient(tenant2PublisherConfig, true); - tenant2PublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(tenant1ConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(tenant2ConsumerClient); - - // Evaluating - Assert.assertEquals(tenant1PublisherClient - .getSentMessageCount(), sendMessageCount1, "Sending failed " + - "for tenant 1."); - Assert.assertEquals(tenant2PublisherClient - .getSentMessageCount(), sendMessageCount2, "Sending failed " + - "for tenant 2."); - Assert.assertEquals(tenant1ConsumerClient - .getReceivedMessageCount(), sendMessageCount1, "Tenant 1 " + - "Durable subscriber received incorrect number of message count."); - Assert.assertEquals(tenant2ConsumerClient - .getReceivedMessageCount(), sendMessageCount2, "Tenant 2 " + - "Durable subscriber received incorrect number of message count."); - } - - /** - * Cleans up the test case effects. Deletes created roles. - * - * @throws java.rmi.RemoteException - * @throws UserAdminUserAdminException - */ - @AfterClass(alwaysRun = true) - public void cleanUp() throws RemoteException, UserAdminUserAdminException { - // Deleting roles of the users used in the test case - userManagementClient.deleteRole(PUBLISHER_ROLE); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantQueueTestCase.java deleted file mode 100644 index 9ae6d515..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantQueueTestCase.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.andes.stub.admin.types.QueueRolePermission; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - - -/** - * Testing for multi tenant - Queue specific test case - *

- * Test case 1 - * 1. Start a client in a tenant(Normal tenant) which listens to a queue - * 2. Send 200 messages to the queue - * 3. Client should receive all 200 messages - *

- * Test case 2 - * 1. Start 2 receiving clients from different tenant for the same queue - * 2. Start 2 sending clients from different tenant for the same queue - * 3. Receiving clients should receive the message from their tenant only - */ -public class MultiTenantQueueTestCase extends MBIntegrationBaseTest { - - public static final String PUBLISHER_ROLE = "publisher"; - - private UserManagementClient userManagementClient; - /** - * Initializes the test case. - * - * @throws XPathExpressionException - * @throws RemoteException - * @throws UserAdminUserAdminException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, RemoteException, UserAdminUserAdminException { - super.init(TestUserMode.SUPER_TENANT_USER); - - - // Logging into user management as admin and adding a new role to give permission for publishing/subscribe - userManagementClient = new UserManagementClient(backendURL, "admin@topictenant1.com", - "admin"); - String[] publishers = {"topictenantuser1"}; - userManagementClient.addRole(PUBLISHER_ROLE, publishers, new String[]{}); - } - - /** - * Test case 1 - * 1. Start a client in a tenant(Normal tenant) which listens to a queue - * 2. Send 200 messages to the queue - * 3. Client should receive all 200 messages - * - * @throws JMSException - * @throws IOException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single Tenant Test") - public void performSingleTenantMultipleUserQueueTestCase() - throws JMSException, IOException, NamingException, AndesClientConfigurationException, - AndesClientException, LoginAuthenticationExceptionException, XPathExpressionException, - AndesAdminServiceBrokerManagerAdminException, URISyntaxException, SAXException, - LogoutAuthenticationExceptionException, XMLStreamException, AutomationUtilException { - int sendMessageCount = 200; - int expectedMessageCount = 200; - - String destinationName = "topictenant1.com/tenantQueue"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration adminConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "admin!topictenant1.com", "admin", - ExchangeType.QUEUE, destinationName); - adminConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - adminConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - adminConsumerConfig.setAsync(false); - - // Creating clients - AndesClient adminConsumerClient = new AndesClient(adminConsumerConfig, true); - adminConsumerClient.startClient(); - - - // Add permission to be able to publish - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(PUBLISHER_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - - // Get the automation context for the tenant - AutomationContext tenantContext = new AutomationContext("MB", "mb001", "topictenant1", "topictenantuser1"); - - - LoginLogoutClient loginLogoutClient = new LoginLogoutClient(tenantContext); - String sessionCookie = loginLogoutClient.login(); - AndesAdminClient andesAdminClient = - new AndesAdminClient(super.backendURL, sessionCookie); - - // Update permissions for the destination queue to be able to publish/subscribe from topictenantuser1 - andesAdminClient.updatePermissionForQueue(destinationName, queueRolePermission); - loginLogoutClient.logout(); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration tenantPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.QUEUE, destinationName); - tenantPublisherConfig.setNumberOfMessagesToSend(sendMessageCount); - tenantPublisherConfig.setPrintsPerMessageCount(sendMessageCount / 10L); - - - AndesClient tenantPublisherClient = new AndesClient(tenantPublisherConfig, true); - tenantPublisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(adminConsumerClient, - AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(tenantPublisherClient.getSentMessageCount(), sendMessageCount, - "Sending failed for tenant 1 user 1."); - Assert.assertEquals(adminConsumerClient.getReceivedMessageCount(), expectedMessageCount, - "Message receiving failed for admin of tenant 1."); - } - - /** - * Test case 2 - * 1. Start 2 receiving clients from different tenant for the same queue - * 2. Start 2 sending clients from different tenant for the same queue - * 3. Receiving clients should receive the message from their tenant only - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Multiple Tenant Single Users Test") - public void performMultipleTenantQueueTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - int sendMessageCount1 = 80; - int sendMessageCount2 = 120; - int expectedMessageCount = 200; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration tenant1ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.QUEUE, "topictenant1.com/multitenantQueue"); - tenant1ConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - tenant1ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant1ConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration tenant2ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant2.com", - "topictenantuser1", ExchangeType.QUEUE, "topictenant2.com/multitenantQueue"); - tenant2ConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - tenant2ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant2ConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration tenant1PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.QUEUE, "topictenant1.com/multitenantQueue"); - tenant1PublisherConfig.setNumberOfMessagesToSend(sendMessageCount1); - tenant1PublisherConfig.setPrintsPerMessageCount(sendMessageCount1 / 10L); - - AndesJMSPublisherClientConfiguration tenant2PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant2.com", - "topictenantuser1", ExchangeType.QUEUE, "topictenant2.com/multitenantQueue"); - tenant2PublisherConfig.setNumberOfMessagesToSend(sendMessageCount2); - tenant2PublisherConfig.setPrintsPerMessageCount(sendMessageCount2 / 10L); - - // Creating clients - AndesClient tenant1ConsumerClient = new AndesClient(tenant1ConsumerConfig, true); - tenant1ConsumerClient.startClient(); - - AndesClient tenant2ConsumerClient = new AndesClient(tenant2ConsumerConfig, true); - tenant2ConsumerClient.startClient(); - - AndesClient tenant1PublisherClient = new AndesClient(tenant1PublisherConfig, true); - tenant1PublisherClient.startClient(); - - AndesClient tenant2PublisherClient = new AndesClient(tenant2PublisherConfig, true); - tenant2PublisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(tenant1ConsumerClient, - AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(tenant2ConsumerClient); - - // Evaluating - Assert.assertEquals(tenant1PublisherClient.getSentMessageCount(), sendMessageCount1, - "Sending failed for tenant 1."); - Assert.assertEquals(tenant2PublisherClient.getSentMessageCount(), sendMessageCount2, - "Sending failed for tenant 2."); - Assert.assertEquals(tenant1ConsumerClient.getReceivedMessageCount(), sendMessageCount1, - "Tenant 1 client received incorrect number of message count."); - Assert.assertEquals(tenant2ConsumerClient.getReceivedMessageCount(), sendMessageCount2, - "Tenant 2 client received incorrect number of message count."); - } - - /** - * Cleans up the test case effects. Deletes created roles. - * - * @throws java.rmi.RemoteException - * @throws UserAdminUserAdminException - */ - @AfterClass(alwaysRun = true) - public void cleanUp() throws RemoteException, UserAdminUserAdminException { - // Deleting roles of the users used in the test case - userManagementClient.deleteRole(PUBLISHER_ROLE); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantTopicTestCase.java deleted file mode 100644 index 990cc24c..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultiTenantTopicTestCase.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Testing for multi tenant - Topic specific test case - *

- * Test case 1 - * 1. Start a 3 subscribers in same tenant(Normal tenant) who listens to the same topic - * 2. Send 200 messages to the topic - * 3. All 3 subscribers should receive all 200 messages - *

- * Test case 2 - * 1. Start 2 subscribers from different tenant for the same topic - * 2. Start 2 publishers from different tenant for the same topic - * 3. Subscribers should receive the message from their tenant only - */ -public class MultiTenantTopicTestCase extends MBIntegrationBaseTest { - - /** - * Initializes test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Test case 1 - * 1. Admin under topictenant1.com domain creates consumer for "topictenant1.com/tenantTopic". - * 2. topictenantuser1 user under topictenant1.com domain tries to use - * "topictenant1.com/tenantTopic". - * 3.topictenantuser1 user fails to use "topictenant1.com/tenantTopic" destination as no - * permissions were given. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single Tenant with multiple Users Test", - expectedExceptions = JMSException.class) - public void performSingleTenantMultipleUserTopicTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - int sendMessageCount = 200; - int expectedMessageCount = 200; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration adminConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "admin!topictenant1.com", "admin", - ExchangeType.TOPIC, "topictenant1.com/tenantTopic"); - adminConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - adminConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - adminConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration tenant1ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "tenant1user2!topictenant1.com", - "tenant1user2", ExchangeType.TOPIC, "topictenant1.com/tenantTopic"); - tenant1ConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - tenant1ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant1ConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration tenant1PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "admin!topictenant1.com", "admin", - ExchangeType.TOPIC, "topictenant1.com/tenantTopic"); - tenant1PublisherConfig.setNumberOfMessagesToSend(sendMessageCount); - tenant1PublisherConfig.setPrintsPerMessageCount(sendMessageCount / 10L); - - // Creating clients - AndesClient adminConsumerClient = new AndesClient(adminConsumerConfig, true); - adminConsumerClient.startClient(); - - AndesClient tenant1ConsumerClient = new AndesClient(tenant1ConsumerConfig, true); - tenant1ConsumerClient.startClient(); - - AndesClient tenant2PublisherClient = new AndesClient(tenant1PublisherConfig, true); - tenant2PublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(adminConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(tenant1ConsumerClient); - - // Evaluating - Assert.assertEquals(tenant2PublisherClient - .getSentMessageCount(), sendMessageCount, "Sending failed for" + - " tenant1user2!topictenant1.com."); - Assert.assertEquals(adminConsumerClient - .getReceivedMessageCount(), expectedMessageCount, "Message " + - "receiving failed for admin!topictenant1.com."); - Assert.assertEquals(tenant1ConsumerClient - .getReceivedMessageCount(), expectedMessageCount, "Message " + - "receiving failed for tenant1user2!topictenant1.com."); - - } - - /** - * Test case 2 - * 1. Start 2 subscribers from different tenant for the same topic - * 2. Start 2 publishers from different tenant for the same topic - * 3. Subscribers should receive the message from their tenant only - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Multiple Tenant Single Users Test") - public void performMultipleTenantTopicTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - int sendMessageCount1 = 120; - int sendMessageCount2 = 80; - int expectedMessageCount = 200; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration tenant1ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant1.com/multitenantTopic"); - tenant1ConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - tenant1ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant1ConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration tenant2ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant2.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant2.com/multitenantTopic"); - tenant2ConsumerConfig.setMaximumMessagesToReceived(expectedMessageCount); - tenant2ConsumerConfig.setPrintsPerMessageCount(expectedMessageCount / 10L); - tenant2ConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration tenant1PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant1.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant1.com/multitenantTopic"); - tenant1PublisherConfig.setNumberOfMessagesToSend(sendMessageCount1); - tenant1PublisherConfig.setPrintsPerMessageCount(sendMessageCount1 / 10L); - - AndesJMSPublisherClientConfiguration tenant2PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "topictenantuser1!topictenant2.com", - "topictenantuser1", ExchangeType.TOPIC, "topictenant2.com/multitenantTopic"); - tenant2PublisherConfig.setNumberOfMessagesToSend(sendMessageCount2); - tenant2PublisherConfig.setPrintsPerMessageCount(sendMessageCount2 / 10L); - - // Creating clients - AndesClient tenant1ConsumerClient = new AndesClient(tenant1ConsumerConfig, true); - tenant1ConsumerClient.startClient(); - - AndesClient tenant2ConsumerClient = new AndesClient(tenant2ConsumerConfig, true); - tenant2ConsumerClient.startClient(); - - AndesClient tenant1PublisherClient = new AndesClient(tenant1PublisherConfig, true); - tenant1PublisherClient.startClient(); - - AndesClient tenant2PublisherClient = new AndesClient(tenant2PublisherConfig, true); - tenant2PublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(tenant1ConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(tenant2ConsumerClient); - - // Evaluating - Assert.assertEquals(tenant1PublisherClient - .getSentMessageCount(), sendMessageCount1, "Sending failed " + - "for tenant 1."); - Assert.assertEquals(tenant2PublisherClient - .getSentMessageCount(), sendMessageCount2, "Sending failed" + - " for tenant 2."); - Assert.assertEquals(tenant1ConsumerClient - .getReceivedMessageCount(), sendMessageCount1, "Tenant 1 " + - "client received incorrect number of message count."); - Assert.assertEquals(tenant2ConsumerClient - .getReceivedMessageCount(), sendMessageCount2, "Tenant 2 " + - "client received incorrect number of message count."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultipleQueueSendReceiveTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultipleQueueSendReceiveTestCase.java deleted file mode 100644 index c8b8866a..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultipleQueueSendReceiveTestCase.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Performs test cases where there are multiple senders and receivers for queues. - */ -public class MultipleQueueSendReceiveTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 2000L; - - /** - * Expected message count to receive - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializing test case - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Use two queues q1, q2. 2 subscribers for q1 and one subscriber for q2. - * 2. Use two publishers for q1 and one for q2. - * 3. Check if messages were received correctly. - * - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws CloneNotSupportedException - * @throws JMSException - * @throws NamingException - * @throws IOException - */ - @Test(groups = {"wso2.mb", "queue"},enabled = false) - public void performMultipleQueueSendReceiveTestCase() - throws AndesClientConfigurationException, AndesClientException, JMSException, - IOException, NamingException, CloneNotSupportedException, - XPathExpressionException { - - // Creating a consumer client configurations - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "multipleQueue1"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig1.setPrintsPerMessageCount(EXPECTED_COUNT/10L); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setDestinationName("multipleQueue2"); - consumerConfig2.setAsync(false); - - // Creating a publisher client configurations - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "multipleQueue1"); - publisherConfig1.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig1.setPrintsPerMessageCount(SEND_COUNT/10L); - - AndesJMSPublisherClientConfiguration publisherConfig2 = publisherConfig1.clone(); - publisherConfig2.setDestinationName("multipleQueue2"); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, 2, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig1, 2, true); - publisherClient1.startClient(); - - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - publisherClient2.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - long sentMessageCount = publisherClient1.getSentMessageCount() + publisherClient2.getSentMessageCount(); - long receivedMessageCount = consumerClient1.getReceivedMessageCount() + consumerClient2.getReceivedMessageCount(); - - Assert.assertEquals(sentMessageCount, 3 * SEND_COUNT, "Expected message count was not sent."); - Assert.assertEquals(receivedMessageCount, 3 * EXPECTED_COUNT, "Expected message count was not received."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultipleTopicPublishSubscribeTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultipleTopicPublishSubscribeTestCase.java deleted file mode 100644 index a3aa58cf..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/MultipleTopicPublishSubscribeTestCase.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test case for multiple publishers and subscribers for topics - */ -public class MultipleTopicPublishSubscribeTestCase extends MBIntegrationBaseTest { - - private static final long SEND_COUNT_1000 = 1000L; - private static final long SEND_COUNT_2000 = 2000L; - private static final long ADDITIONAL = 10L; - - // Expect little more to check if no more messages are received - private static final long EXPECTED_COUNT_4010 = 4000L + ADDITIONAL; - private static final long EXPECTED_COUNT_1010 = 1000L + ADDITIONAL; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * 1. Use two topics t1, t2. 2 subscribers for t1 and one subscriber for t2. - * 2. Use two publishers for t1 and one for t2. - * 3. Check if messages were received correctly. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performMultipleTopicPublishSubscribeTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configurations - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "multipleTopic2"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT_4010); - consumerConfig1.setPrintsPerMessageCount(EXPECTED_COUNT_4010 / 10); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "multipleTopic1"); - consumerConfig2.setMaximumMessagesToReceived(EXPECTED_COUNT_1010); - consumerConfig2.setPrintsPerMessageCount(EXPECTED_COUNT_1010 / 10); - consumerConfig2.setAsync(false); - - // Creating a publisher client configurations - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "multipleTopic2"); - publisherConfig1.setPrintsPerMessageCount(100L); - publisherConfig1.setNumberOfMessagesToSend(SEND_COUNT_2000); - - AndesJMSPublisherClientConfiguration publisherConfig2 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "multipleTopic1"); - publisherConfig2.setPrintsPerMessageCount(100L); - publisherConfig2.setNumberOfMessagesToSend(SEND_COUNT_1000); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, 2, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig1, 2, true); - publisherClient1.startClient(); - - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - publisherClient2.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - Assert.assertEquals(publisherClient1.getSentMessageCount(), SEND_COUNT_2000 * 2L, "Publisher publisherClient1 failed to publish messages"); - Assert.assertEquals(publisherClient2.getSentMessageCount(), SEND_COUNT_1000, "Publisher publisherClient2 failed to publish messages"); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), (EXPECTED_COUNT_4010 - ADDITIONAL) * 2L, - "Did not receive expected message count for consumerClient1."); - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), EXPECTED_COUNT_1010 - ADDITIONAL, - "Did not receive expected message count for consumerClient2."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/PerMessageAcknowledgementsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/PerMessageAcknowledgementsTestCase.java deleted file mode 100644 index 81bb7468..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/PerMessageAcknowledgementsTestCase.java +++ /dev/null @@ -1,643 +0,0 @@ -/* - * Copyright (c) 2016 WSO2 Inc. (http://wso2.com) All Rights Reserved. - * - * 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.AndesJMSConsumer; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.MessageProducer; -import javax.jms.TextMessage; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; - -/** - * This class contains test cases related to per message acknowledgments. - */ -public class PerMessageAcknowledgementsTestCase extends MBIntegrationBaseTest { - private Log log = LogFactory.getLog(PerMessageAcknowledgementsTestCase.class); - - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesAckWaitTimeOut = null; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, IOException, AutomationUtilException, ConfigurationException { - super.init(TestUserMode.SUPER_TENANT_USER); - - // Updating the redelivery attempts to 1 to speed up the test case. - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + - File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - // Changing "maximumRedeliveryAttempts" value to "1" in broker.xml - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "1"); - // Restarting server - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - - // Get current "AndesAckWaitTimeOut" system property. - defaultAndesAckWaitTimeOut = System.getProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "3000"); - } - - /** - * This test publishes 10 messages and the subscriber rejects the first message and then wait for the redelivered - * message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void firstMessageInvalidOnlyPerAckQueueMessageListenerTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - long sendCount = 10; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "firstMessageInvalidOnlyPerAckQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "firstMessageInvalidOnlyPerAckQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - private boolean receivedFirstMessage = false; - - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (!receivedFirstMessage && "#0".equals(textMessage.getText())) { - receivedFirstMessage = true; - } else { - message.acknowledge(); - } - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. #" + - Integer.toString(i) + " expected."); - } - - Assert.assertEquals(receivedMessages.get(10), "#0", "Invalid messages received. #0 expected."); - - Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); - } - - /** - * This test publishes 10 messages and the subscriber rejects all message and then wait for the redelivered - * message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void allUnacknowledgeMessageListenerPerAckTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - long sendCount = 10; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "allUnacknowledgePerAckQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "allUnacknowledgePerAckQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (receivedMessages.contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount * 2; i++) { - if (i < sendCount) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. " + - "#" + Integer.toString(i) + "" + - " expected."); - } else { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i - 10), "Invalid messages " + - "received. #" + Integer - .toString(i - 10) + - " expected."); - } - } - - Assert.assertEquals(receivedMessages.size(), sendCount * 2, "Message receiving failed."); - } - - /** - * This test publishes 10 messages and the subscriber rejects a message after each 3 received messages and then wait - * for the redelivered message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void oneByOneUnacknowledgeMessageListenerPerAckTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - long sendCount = 10; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "oneByOneUnacknowledgePerAckQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "oneByOneUnacknowledgePerAckQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (Integer.parseInt(textMessage.getText().split("#")[1]) % 3 != 0 || receivedMessages.contains - (textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. #" + - Integer.toString(i) + " expected."); - } - - Assert.assertEquals(receivedMessages.get(10), "#0", "Invalid messages received. #0 expected."); - Assert.assertEquals(receivedMessages.get(11), "#3", "Invalid messages received. #3 expected."); - Assert.assertEquals(receivedMessages.get(12), "#6", "Invalid messages received. #6 expected."); - Assert.assertEquals(receivedMessages.get(13), "#9", "Invalid messages received. #9 expected."); - - Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); - } - - /** - * This test publishes 10 messages and the subscriber rejects first 4 messages and then wait for the redelivered - * message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void firstFewUnacknowledgeMessageListenerPerAckTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - long sendCount = 10; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "firstFewUnacknowledgePerAckQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "firstFewUnacknowledgePerAckQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (Integer.parseInt(textMessage.getText().split("#")[1]) >= 4 || receivedMessages.contains - (textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. #" + - Integer.toString(i) + " expected."); - } - - Assert.assertEquals(receivedMessages.get(10), "#0", "Invalid messages received. #0 expected."); - Assert.assertEquals(receivedMessages.get(11), "#1", "Invalid messages received. #1 expected."); - Assert.assertEquals(receivedMessages.get(12), "#2", "Invalid messages received. #2 expected."); - Assert.assertEquals(receivedMessages.get(13), "#3", "Invalid messages received. #3 expected."); - - Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); - } - - /** - * This test publishes 10 messages and the subscriber rejects the 8th message and then wait for the redelivered - * message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void unacknowledgeMiddleMessageMessageListenerPerAckTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - long sendCount = 10; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "unacknowledgeMiddleMessagePerAckQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "unacknowledgeMiddleMessagePerAckQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (!textMessage.getText().equals("#7") || receivedMessages.contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. #" + - Integer.toString(i) + " expected."); - } - - Assert.assertEquals(receivedMessages.get(10), "#7", "Invalid messages received. #7 expected."); - - Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); - } - - /** - * This test publishes 1000 messages and the subscriber reject each 100th message and then wait for the redelivered - * message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void oneByOneUnacknowledgeMessageListenerForMultipleMessagesPerAckTestCase() throws - AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 1000; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "oneByOneUnacknowledgeQueuePerAckMultiple"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "oneByOneUnacknowledgeQueuePerAckMultiple"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (Integer.parseInt(textMessage.getText().split("#")[1]) % 100 != 0 || receivedMessages.contains - (textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. #" + - Integer.toString(i) + " expected."); - } - - Assert.assertEquals(receivedMessages.get(1000), "#0", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1001), "#100", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1002), "#200", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1003), "#300", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1004), "#400", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1005), "#500", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1006), "#600", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1007), "#700", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1008), "#800", "Invalid messages received."); - Assert.assertEquals(receivedMessages.get(1009), "#900", "Invalid messages received."); - - Assert.assertEquals(receivedMessages.size(), sendCount + 10, "Message receiving failed."); - } - - /** - * This test publishes 1000 messages and the subscriber accepts all message and then wait for the redelivered - * message. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void allAcknowledgeMessageListenerForMultipleMessagesTestCase() throws AndesClientConfigurationException, - XPathExpressionException, IOException, JMSException, AndesClientException, NamingException { - long sendCount = 1000; - final List receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "allAcknowledgeMultiplePerAckQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort() - , ExchangeType.QUEUE, "allAcknowledgeMultiplePerAckQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - message.acknowledge(); - receivedMessages.add(textMessage.getText()); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - MessageProducer sender = publisherClient.getPublishers().get(0).getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = publisherClient.getPublishers().get(0).getSession().createTextMessage("#" + - Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2); - log.info("Received Messages : " + receivedMessages); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i), "#" + Integer.toString(i), "Invalid messages received. #" + - Integer.toString(i) + " expected."); - } - - Assert.assertEquals(receivedMessages.size(), sendCount, "Message receiving failed."); - } - - /** - * This method will restore all the configurations back. Following configurations will be restored. 1. - * AndesAckWaitTimeOut system property. 2. Delete all destination created in the test case. 3. Restore default - * broker.xml and restart server. - * - * @throws IOException - * @throws AutomationUtilException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws LogoutAuthenticationExceptionException - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException, AndesAdminServiceBrokerManagerAdminException, - LogoutAuthenticationExceptionException { - if (StringUtils.isBlank(defaultAndesAckWaitTimeOut)) { - System.clearProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, defaultAndesAckWaitTimeOut); - } - - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - AndesAdminClient andesAdminClient = new AndesAdminClient(super.backendURL, sessionCookie); - - andesAdminClient.deleteQueue("firstMessageInvalidOnlyPerAckQueue"); - andesAdminClient.deleteQueue("allUnacknowledgePerAckQueue"); - andesAdminClient.deleteQueue("oneByOneUnacknowledgePerAckQueue"); - andesAdminClient.deleteQueue("firstFewUnacknowledgePerAckQueue"); - andesAdminClient.deleteQueue("unacknowledgeMiddleMessagePerAckQueue"); - andesAdminClient.deleteQueue("oneByOneUnacknowledgeQueuePerAckMultiple"); - andesAdminClient.deleteQueue("allAcknowledgeMultiplePerAckQueue"); - loginLogoutClientForAdmin.logout(); - - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/PurgeMessagesTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/PurgeMessagesTestCase.java deleted file mode 100644 index d6be718d..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/PurgeMessagesTestCase.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.Test; -import org.testng.annotations.BeforeClass; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.andes.server.queue.DLCQueueUtils; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; - -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.carbon.andes.stub.admin.types.Message; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; - -/** - * Testing tasks relevant to queue purging and queue deletion - * Once a queue is purged or deleted, messages both in the queue and the DLC should be deleted - */ -public class PurgeMessagesTestCase extends MBIntegrationBaseTest { - - private static final String TEST_QUEUE_PURGE = "purgeTestQueue"; - private static final String TEST_QUEUE_DELETE = "deleteTestQueue"; - - /** - * Initializes test case - * - * @throws XPathExpressionException - */ - @BeforeClass() - public void init() throws XPathExpressionException, MalformedURLException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set values TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS = 1 and - * ANDES_ACK_WAIT_TIMEOUT_PROPERTY = 1 - * so that the time taken for the massages to get moved into DLC is at a minimum - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, - ConfigurationException, SAXException, XMLStreamException, LoginAuthenticationExceptionException, - URISyntaxException, AutomationUtilException { - ; - super.serverManager = new ServerConfigurationManager(automationContext); - - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - //Set values TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS = 1 and - //ANDES_ACK_WAIT_TIMEOUT_PROPERTY = 1 - //so that the time taken for the massages to get moved into DLC is at a minimum - configurationEditor.updateProperty(AndesConfiguration - .TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "1"); - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "1"); - - //andesAdminClient.deleteQueue(DLCQueueUtils.identifyTenantInformationAndGenerateDLCString(TEST_QUEUE_PURGE)); - //We should restart the server witht he new configuration values - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - - /** - * Test case 1 - * 1. Start 2 publishers and consumers for 2 separate queues, 'purgeTestQueue' and 'deleteTestQueue' with both - * consumers set to CLIENT_ACKNOWLEDGE mode - * 2. Publish 25 messages to 'purgeTestQueue' and 75 messages to 'deleteTestQueue' - * 2. 100 messages should get moved into DLC after a while -test - * 3. Purge queue 'puregeTestQueue' - * 4. only 75 messages should be remaining in DLC -test - * 5. Delete 'deleteTestQueue' - * 6. No messages should be remaining in DLC - test - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - - @Test(groups = "wso2.mb", description = "Let messages get moved to DLC and check messages deleted in DLC in queue" - + " purge and deletion") - public void performQueuePurgeTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, AndesAdminServiceBrokerManagerAdminException, AutomationUtilException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, XPathExpressionException, - LoginAuthenticationExceptionException, XMLStreamException, CloneNotSupportedException { - - //Setting values for the sent and received message counts - long sendToPurgeQueueCount = 25L; - long sendToDeleteQueueCount = 75L; - long expectedMessageCount = 1000; - - // Logging in - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TEST_QUEUE_PURGE); - consumerConfig1.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 100L); - consumerConfig1.setAsync(false); - - //Cloning consumer configuration with a different destination queue - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setDestinationName(TEST_QUEUE_DELETE); - - //Creating 2 consumers with the 2 configurations - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - // Creating publisher configuration with destination queue = 'purgeTestQueue' and message count = 25 - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TEST_QUEUE_PURGE); - publisherConfig1.setNumberOfMessagesToSend(sendToPurgeQueueCount); - publisherConfig1.setPrintsPerMessageCount(sendToPurgeQueueCount / 5L); - - // Creating publisher configuration with destination queue = 'deleteTestQueue' and message count = 75 - AndesJMSPublisherClientConfiguration publisherConfig2 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TEST_QUEUE_DELETE); - publisherConfig2.setNumberOfMessagesToSend(sendToDeleteQueueCount); - publisherConfig2.setPrintsPerMessageCount(sendToDeleteQueueCount / 5L); - - //Creating publishers - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - publisherClient1.startClient(); - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - publisherClient2.startClient(); - - //Receiving messages until message count gets stagnant and - //Once done, stop client - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.waitForMessagesAndShutdown(consumerClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - //Creating admin client - AndesAdminClient admin = new AndesAdminClient(super.backendURL, sessionCookie); - - //testing if DLC queue is created - Assert.assertNotNull(admin.getDlcQueue(), "DLC queue not created"); - - //Testing if 100 messages are moved to DLC - Message[] messagesInDLC = admin.browseQueue(DLCQueueUtils.identifyTenantInformationAndGenerateDLCString - (TEST_QUEUE_PURGE), 0, 200); - Assert.assertEquals(messagesInDLC.length, 100, "Messages have not been moved to DLC."); - - //Purging 'purgeTestQueue' queue - admin.purgeQueue(TEST_QUEUE_PURGE); - - //Put a thread sleep so that we can make sure that the queue is deleted before testing its existence - AndesClientUtils.sleepForInterval(1000); - - //Testing if the queue is deleted, it should not have been deleted - Assert.assertNotNull(admin.getQueueByName(TEST_QUEUE_PURGE), "The queue has been deleted"); - - //Testing if messages for queue are removed from DLC as well - //Remaining number of messages in DLC should be 75 (destined to deleteTestQueue) - messagesInDLC = admin.browseQueue(DLCQueueUtils.identifyTenantInformationAndGenerateDLCString - (TEST_QUEUE_PURGE), 0, 200); - Assert.assertEquals(messagesInDLC.length, 75, "Messages in DLC for " + TEST_QUEUE_PURGE + " not deleted"); - - //Deleting 'deleteTestQueue' - admin.deleteQueue(TEST_QUEUE_DELETE); - - //Put a thread sleep so that we can make sure that the queue is deleted before testing its existence - AndesClientUtils.sleepForInterval(1000); - - //Testing if queue is not deleted - Assert.assertNull(admin.getQueueByName(TEST_QUEUE_DELETE), "Queue is not deleted"); - - //Testing if messages in DLC are all deleted - messagesInDLC = admin.browseQueue(DLCQueueUtils.identifyTenantInformationAndGenerateDLCString - (TEST_QUEUE_DELETE), 0, 200); - Assert.assertNull(messagesInDLC, "Messages remaining in DLC"); - - //Logging out - loginLogoutClientForAdmin.logout(); - } - - /** - * Revert changed configuration, purge and delete the queue. - * - * @throws XPathExpressionException - * @throws IOException - */ - @AfterClass() - public void cleanup() throws Exception { - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - AndesAdminClient andesAdminClient = - new AndesAdminClient(super.backendURL, sessionCookie); - - andesAdminClient.deleteQueue(TEST_QUEUE_PURGE); - andesAdminClient.deleteQueue(DLCQueueUtils.identifyTenantInformationAndGenerateDLCString(TEST_QUEUE_PURGE)); - - loginLogoutClientForAdmin.logout(); - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueMessageRedeliveryWithAckTimeOutTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueMessageRedeliveryWithAckTimeOutTestCase.java deleted file mode 100644 index cfeee49e..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueMessageRedeliveryWithAckTimeOutTestCase.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test case where client acknowledgement is not given when needed and that messages gets - * redelivered through dead letter channel. - */ -public class QueueMessageRedeliveryWithAckTimeOutTestCase extends MBIntegrationBaseTest { - - /** - * Default acknowledge waiting time - */ - private static final long DEFAULT_ACK_WAIT_TIMEOUT = 10L; - - /** - * Number of messages to send - */ - private static final long SEND_COUNT = 1L; - - /** - * Initializing test case - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Subscribe to a single queue using Client Ack - * 2. This subscriber will wait a long time for messages (defaultAckWaitTimeout*defaultMaxRedeliveryAttempts) - * 3. Subscriber will never ack for messages - * 4. Subscriber will receive same message until defaultMaxRedeliveryAttempts breached - * 5. After that message will be written to dlc - * 6. No more message should be delivered after written to DLC - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueueMessageRedeliveryWithAckTimeOutTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty("AndesAckWaitTimeOut", Long.toString(DEFAULT_ACK_WAIT_TIMEOUT * 1000L)); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "redeliveryQueue"); - consumerConfig.setMaximumMessagesToReceived(5L); - consumerConfig.setAcknowledgeAfterEachMessageCount(200L); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "redeliveryQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, 3, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2L); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message send failed."); - // The received count is higher than the sent count as the sent message is redelivered till 'defaultMaxRedeliveryAttempts' is reached. - Assert.assertTrue(consumerClient.getReceivedMessageCount() > SEND_COUNT, "Did not receive expected message count."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueMessageSequentialAndDuplicateTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueMessageSequentialAndDuplicateTestCase.java deleted file mode 100644 index 06fc77d0..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueMessageSequentialAndDuplicateTestCase.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test case to identify whether messages are received in order and the received messages does not - * contains duplicates. - */ -public class QueueMessageSequentialAndDuplicateTestCase extends MBIntegrationBaseTest { - - private static final long SEND_COUNT = 1000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Send 1000 messages and subscribe them for a single queue (set expected count to more than 1000 so it will wait) - * 2. Check if messages were received in order - * 3. Check if there are any duplicates - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueueMessageSequentialAndDuplicateTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueueDuplication"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT + 10L); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - // writing received messages to a file - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueueDuplication"); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message send failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed"); - Assert.assertTrue(consumerClient.checkIfMessagesAreInOrder(), "Messages are not in order"); - Assert.assertEquals(consumerClient.checkIfMessagesAreDuplicated().keySet().size(), 0, "Duplicate message are available."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueSubscriptionsBreakAndReceiveTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueSubscriptionsBreakAndReceiveTestCase.java deleted file mode 100644 index ebc8e4b3..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueSubscriptionsBreakAndReceiveTestCase.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - - -/** - * Test class to verify breaking the consumers from time to time to make sure that at the end all - * messages are delivered. - */ -public class QueueSubscriptionsBreakAndReceiveTestCase extends MBIntegrationBaseTest { - - /** - * Number of messages to send - */ - private static final long SEND_COUNT = 1000L; - - /** - * Number of subscribers - */ - private static final int NUMBER_OF_SUBSCRIPTION_BREAKS = 5; - - /** - * Number of messages expected by one subscriber/consumer - */ - private static final long EXPECTED_COUNT_BY_EACH_SUBSCRIBER = SEND_COUNT / NUMBER_OF_SUBSCRIPTION_BREAKS; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * 1. Subscribe to a single queue which will take 1/5 messages of sent and stop - * 2. Send messages to the queue - * 3. Close and resubscribe 5 times to the queue. Each subscriber should get 200 messages each. - * 4. Verify message count is equal to the sent total - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueueSubscriptionsBreakAndReceiveTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - CloneNotSupportedException, AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "breakSubscriberQueue"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT_BY_EACH_SUBSCRIBER); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT_BY_EACH_SUBSCRIBER / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "breakSubscriberQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient firstConsumerClient = new AndesClient(consumerConfig, true); - firstConsumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(firstConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(firstConsumerClient.getReceivedMessageCount(), EXPECTED_COUNT_BY_EACH_SUBSCRIBER, "Message receiving failed for first consumer."); - - long totalMessageCountReceived = firstConsumerClient.getReceivedMessageCount(); - - // Using a loop to create consumers and receive expected messages - for (int count = 1; count < NUMBER_OF_SUBSCRIPTION_BREAKS; count++) { - AndesClient newConsumerClient = new AndesClient(consumerConfig, true); - newConsumerClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(newConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2L); - - totalMessageCountReceived = totalMessageCountReceived + newConsumerClient.getReceivedMessageCount(); - AndesClientUtils.sleepForInterval(1000L); - } - - // Evaluating received total message count - Assert.assertEquals(totalMessageCountReceived, SEND_COUNT, "Expected message count was not received."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueTestCase.java deleted file mode 100644 index 56a63890..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueTestCase.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test cases for queue related scenarios. - */ -public class QueueTestCase extends MBIntegrationBaseTest { - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Create queue names "singleQueue". - * 2. Publish 1000 messages to queue. - * 3. Consumer should receive 1000 messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single queue send-receive test case") - public void performSingleQueueSendReceiveTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - long sendCount = 1000L; - long expectedCount = 1000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueue"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - } - - /** - * 1. Create a topic named "subTopicPubQueue" - * 2. Create a subscriber for that topic. - * 3. Publish messages to a queue that has the same name as "subTopicPubQueue". - * 4. Subscriber should not receive any messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "subscribe to a topic and send message to a queue which has the same name" + - " as queue") - public void performSubTopicPubQueueTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - long sendCount = 1000L; - long expectedCount = 1000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "subTopicPubQueue"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "subTopicPubQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), 0, "Messages should have not received"); - } - - /** - * 1. Create 2 consumers for queue name "queueManyConsumers" - * 2. Publish 3000 message to queue name "queueManyConsumers" - * 3. Total messages received by both consumers should be 3000 messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "send large number of messages to a queue which has two consumers") - public void performManyConsumersTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - long sendCount = 3000L; - long expectedCount = 3000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueManyConsumers"); - consumerConfig1.setMaximumMessagesToReceived(expectedCount); - consumerConfig1.setPrintsPerMessageCount(expectedCount / 10L); - consumerConfig1.setAsync(false); - - // Creating a publisher client configuration - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueManyConsumers"); - consumerConfig2.setMaximumMessagesToReceived(expectedCount); - consumerConfig2.setPrintsPerMessageCount(100L); - consumerConfig2.setAsync(false); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "queueManyConsumers"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(100L); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - // Waiting for all messages - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - long msgCountFromClient1 = consumerClient1.getReceivedMessageCount(); - long msgCountFromClient2 = consumerClient2.getReceivedMessageCount(); - - Assert.assertEquals(msgCountFromClient1 + msgCountFromClient2, expectedCount, - "Did not received expected message count"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueUserAuthorizationTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueUserAuthorizationTestCase.java deleted file mode 100644 index 4aca45fc..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/QueueUserAuthorizationTestCase.java +++ /dev/null @@ -1,560 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.andes.stub.admin.types.QueueRolePermission; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.carbon.user.mgt.stub.types.carbon.FlaggedName; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class contains the test cases related to user authorization and queues - */ -public class QueueUserAuthorizationTestCase extends MBIntegrationBaseTest { - /** - * The logger used to log information, warnings, errors, etc. - */ - private static final Logger log = LoggerFactory.getLogger(QueueUserAuthorizationTestCase.class); - - /** - * Permission path for creating a queue - */ - private static final String ADD_QUEUE_PERMISSION = "/permission/admin/manage/queue/add"; - - /** - * Roles for the test case scenarios - */ - private static final String CREATE_PUB_SUB_QUEUE_ROLE = "create_pub_sub_queue_role"; - private static final String PUB_SUB_QUEUE_ROLE = "pub_sub_queue_role"; - private static final String NO_PERMISSION_QUEUE_ROLE = "no_permission_queue_role"; - - /** - * Prefix for internal roles for topics - */ - private static final String QUEUE_PREFIX = "Q_"; - - private UserManagementClient userManagementClient; - - /** - * Initializes before a test method. Removes users of admin group if exists. Adds new roles - * with permissions. - * - * @throws Exception - */ - @BeforeMethod(alwaysRun = true) - public void initialize() throws Exception { - super.init(TestUserMode.SUPER_TENANT_ADMIN); - - String[] createPubSubUsers = new String[]{"authUser1", "authUser2"}; - String[] pubSubUsers = new String[]{"authUser3", "authUser4"}; - String[] noPermissionUsers = new String[]{"authUser5"}; - String[] allUsers = - new String[]{"authUser1", "authUser2", "authUser3", "authUser4", "authUser5"}; - - // Logging into user management as admin - userManagementClient = new UserManagementClient(backendURL, "admin", "admin"); - - // Removing admin permission for all users - userManagementClient.updateUserListOfRole(FrameworkConstants.ADMIN_ROLE, null, allUsers); - - // Adding roles along with users - userManagementClient - .addRole(CREATE_PUB_SUB_QUEUE_ROLE, createPubSubUsers, new String[]{ADD_QUEUE_PERMISSION}); - userManagementClient.addRole(PUB_SUB_QUEUE_ROLE, pubSubUsers, new String[]{}); - userManagementClient.addRole(NO_PERMISSION_QUEUE_ROLE, noPermissionUsers, new String[]{}); - } - - /** - * Cleans up the test case effects. Created roles and internal queue related roles are created. - * - * @throws java.rmi.RemoteException - * @throws UserAdminUserAdminException - */ - @AfterMethod(alwaysRun = true) - public void cleanUpAfterScenario() throws RemoteException, UserAdminUserAdminException { - // Deleting roles of the users used in the test case - userManagementClient.deleteRole(CREATE_PUB_SUB_QUEUE_ROLE); - userManagementClient.deleteRole(PUB_SUB_QUEUE_ROLE); - userManagementClient.deleteRole(NO_PERMISSION_QUEUE_ROLE); - - // Deleting internal roles specific to queues - FlaggedName[] allRoles = userManagementClient.getAllRolesNames("*", 10); - for (FlaggedName allRole : allRoles) { - if (QUEUE_PREFIX.contains(allRole.getItemName())) { - userManagementClient.deleteRole(allRole.getItemName()); - } - } - } - - /** - * User creates a queue and then publishes and consumes messages. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueuePermissionTestCase() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException { - this.createPublishAndSubscribeFromUser("authUser1", "authQueue1"); - } - - /** - * User1 and User2 exists in the same role where create queue permission is assigned. - * User1 creates a queue and then publishes and consumes messages. - * User2 tries to publish and consume messages. But unable to succeed. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - */ - @Test(groups = {"wso2.mb", "queue"}, expectedExceptions = JMSException.class, expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performQueuePermissionSameRoleUsersWithNoPublishOrConsume() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException { - this.createPublishAndSubscribeFromUser("authUser1", "authQueue2"); - this.createPublishAndSubscribeFromUser("authUser2", "authQueue2"); - } - - /** - * User1 and User2 exists in the same role where create queue permission is assigned. - * User1 creates a queue and then publishes and consumes messages. - * Add publish and consume permissions to the role in which User1 exists. - * User2 tries to publish and consume messages. User2 succeeds. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueuePermissionSameRoleUsersWithPublishOrConsume() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - XMLStreamException, LogoutAuthenticationExceptionException, URISyntaxException, - SAXException, AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - this.createPublishAndSubscribeFromUser("authUser1", "authQueue3"); - - // Adding publish subscribe permissions of 'authQueue3' to 'create_pub_sub_queue_role' role. - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(CREATE_PUB_SUB_QUEUE_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - this.updateQueueRoleConsumePublishPermission("authQueue3", queueRolePermission); - log.info("Consume and publish permissions updated for " + CREATE_PUB_SUB_QUEUE_ROLE); - - this.createPublishAndSubscribeFromUser("authUser2", "authQueue3"); - } - - /** - * User1 and User2 exists in the same role where create queue permission is assigned. - * Admin(UI) creates a queue and then publishes and consumes messages. - * Add publish and consume permissions to the role in which User1 and User2 exists. - * User1 and User2 tries to publish and consume messages. User2 succeeds. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueuePermissionSameRoleUsersWithAdminCreated() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - XMLStreamException, LogoutAuthenticationExceptionException, URISyntaxException, - SAXException, AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - // "superAdmin" refers to the admin - this.createPublishAndSubscribeFromUser("superAdmin", "authQueue8"); - - // Adding publish subscribe permissions of 'authQueue8' to 'create_pub_sub_queue_role' role. - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(CREATE_PUB_SUB_QUEUE_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - this.updateQueueRoleConsumePublishPermission("authQueue8", queueRolePermission); - log.info("Consumer and publish permissions updated for " + CREATE_PUB_SUB_QUEUE_ROLE); - - this.createPublishAndSubscribeFromUser("authUser1", "authQueue8"); - this.createPublishAndSubscribeFromUser("authUser2", "authQueue8"); - } - - /** - * User1 is in Role1 where there is queue creating permissions. - * User5 is in Role2 where there are no create queue permissions. - * User1 creates a queue and then publishes and consumes messages. - * User5 tries to publish and consume messages. User5 fails. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws XPathExpressionException - * @throws IOException - */ - @Test(groups = {"wso2.mb", "queue"}, expectedExceptions = JMSException.class, expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performQueuePermissionDifferentRoleUsersWithNoPermissions() - throws JMSException, NamingException, AndesClientConfigurationException, - AndesClientException, XPathExpressionException, IOException { - this.createPublishAndSubscribeFromUser("authUser1", "authQueue4"); - this.createPublishAndSubscribeFromUser("authUser5", "authQueue4"); - } - - /** - * User1 exists in a role where create queue permission is assigned. - * User1 creates a queue and then publishes and consumes messages. - * User1 is removed from the role. - * User1 tries to publish and consume messages. User1 fails. - * - * @throws RemoteException - * @throws UserAdminUserAdminException - */ - @Test(groups = {"wso2.mb", "queue"}, expectedExceptions = JMSException.class, expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performQueuePermissionSameUserRemovedFromRole() - throws IOException, UserAdminUserAdminException, JMSException, NamingException, - AndesClientConfigurationException, AndesClientException, - XPathExpressionException { - this.createPublishAndSubscribeFromUser("authUser1", "authQueue5"); - - // Removing authUser1 from create_pub_sub_queue_role and Internal/Q_authQueue5 - userManagementClient - .addRemoveRolesOfUser("authUser1", new String[]{NO_PERMISSION_QUEUE_ROLE}, - new String[]{CREATE_PUB_SUB_QUEUE_ROLE, "Internal/Q_authQueue5"}); - log.info("Removing authUser1 from " + CREATE_PUB_SUB_QUEUE_ROLE + " and Internal/Q_authQueue5"); - - this.createPublishAndSubscribeFromUser("authUser1", "authQueue5"); - } - - /** - * User1 and User2 exists in the same role where create queue permission is assigned. - * User1 creates a queue and then publishes and consumes messages. - * Admin assigns publishing and consuming permissions to the role in which User1 and User2 are - * in. - * User1 is removed from the role. - * User2 tries to publish and consume messages. User2 succeeds. - * - * @throws IOException - * @throws LoginAuthenticationExceptionException - * @throws URISyntaxException - * @throws LogoutAuthenticationExceptionException - * @throws XMLStreamException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws SAXException - * @throws XPathExpressionException - * @throws UserAdminUserAdminException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueuePermissionSameRoleAssignedPermissions() - throws IOException, LoginAuthenticationExceptionException, URISyntaxException, - LogoutAuthenticationExceptionException, XMLStreamException, - AndesAdminServiceBrokerManagerAdminException, SAXException, - XPathExpressionException, UserAdminUserAdminException, JMSException, - AndesClientConfigurationException, AndesClientException, NamingException, AutomationUtilException { - this.createPublishAndSubscribeFromUser("authUser1", "authQueue6"); - - // Adding publish subscribe permissions of 'authQueue6' to 'create_pub_sub_queue_role' role. - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(CREATE_PUB_SUB_QUEUE_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - this.updateQueueRoleConsumePublishPermission("authQueue6", queueRolePermission); - log.info("Consumer and publish permissions updated for " + CREATE_PUB_SUB_QUEUE_ROLE); - - // Removing authUser1 from create_pub_sub_queue_role and Internal/Q_authQueue6 - userManagementClient - .addRemoveRolesOfUser("authUser1", new String[]{NO_PERMISSION_QUEUE_ROLE}, - new String[]{CREATE_PUB_SUB_QUEUE_ROLE, "Internal/Q_authQueue6"}); - log.info("Removing authUser1 from " + CREATE_PUB_SUB_QUEUE_ROLE + " and Internal/Q_authQueue6"); - - this.createPublishAndSubscribeFromUser("authUser2", "authQueue6"); - } - - /** - * User3 is in Role2 where there are no create queue permissions. - * Admin creates a queue and then publishes and consumes messages. - * Admin assigns publishing and consuming permissions to Role2. - * User3 tries to publish and consume messages. User3 succeeds. - * - * @throws IOException - * @throws XPathExpressionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws LogoutAuthenticationExceptionException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueuePermissionDifferentRolesAssignedPermissions() - throws IOException, XPathExpressionException, - AndesAdminServiceBrokerManagerAdminException, URISyntaxException, SAXException, - XMLStreamException, UserAdminUserAdminException, - LoginAuthenticationExceptionException, LogoutAuthenticationExceptionException, - JMSException, AndesClientConfigurationException, AndesClientException, - NamingException, AutomationUtilException { - // "superAdmin" refers to the admin - this.createPublishAndSubscribeFromUser("superAdmin", "authQueue7"); - - // Adding publish subscribe permissions of 'authQueue7' to 'pub_sub_queue_role' role. - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(PUB_SUB_QUEUE_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - this.updateQueueRoleConsumePublishPermission("authQueue7", queueRolePermission); - log.info("Consumer and publish permissions updated for " + PUB_SUB_QUEUE_ROLE); - - this.createPublishAndSubscribeFromUser("authUser3", "authQueue7"); - } - - /** - * User1 is in Role1 where there are create queue permissions. - * User3 is in Role2 where there are no create queue permissions. - * Admin creates a queue and then publishes and consumes messages. - * Admin assigns publishing and consuming permissions to Role2. - * User1 tries to publish and consume messages. User1 fails. - * - * @throws IOException - * @throws XPathExpressionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws LogoutAuthenticationExceptionException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}, expectedExceptions = JMSException.class, expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performQueuePermissionDifferentRolesNoPermissions() - throws IOException, XPathExpressionException, - AndesAdminServiceBrokerManagerAdminException, URISyntaxException, SAXException, - XMLStreamException, UserAdminUserAdminException, - LoginAuthenticationExceptionException, LogoutAuthenticationExceptionException, - JMSException, AndesClientConfigurationException, AndesClientException, - NamingException, AutomationUtilException { - // "superAdmin" refers to the admin - this.createPublishAndSubscribeFromUser("superAdmin", "authQueue9"); - - // Adding publish subscribe permissions of 'authQueue9' to 'pub_sub_queue_role' role. - QueueRolePermission queueRolePermission = new QueueRolePermission(); - queueRolePermission.setRoleName(PUB_SUB_QUEUE_ROLE); - queueRolePermission.setAllowedToConsume(true); - queueRolePermission.setAllowedToPublish(true); - this.updateQueueRoleConsumePublishPermission("authQueue9", queueRolePermission); - log.info("Consumer and publish permissions updated for " + PUB_SUB_QUEUE_ROLE); - - this.createPublishAndSubscribeFromUser("authUser1", "authQueue9"); - } - - /** - * Deleting the queues that were created. - * - * @throws IOException - * @throws XPathExpressionException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @AfterClass() - public void cleanUpQueues() - throws IOException, XPathExpressionException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, - XMLStreamException, LoginAuthenticationExceptionException, - AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - AndesAdminClient andesAdminClient = - new AndesAdminClient(super.backendURL, sessionCookie); - - andesAdminClient.deleteQueue("authQueue1"); - andesAdminClient.deleteQueue("authQueue2"); - andesAdminClient.deleteQueue("authQueue3"); - andesAdminClient.deleteQueue("authQueue4"); - andesAdminClient.deleteQueue("authQueue5"); - andesAdminClient.deleteQueue("authQueue6"); - andesAdminClient.deleteQueue("authQueue7"); - andesAdminClient.deleteQueue("authQueue8"); - andesAdminClient.deleteQueue("authQueue9"); - - loginLogoutClientForAdmin.logout(); - } - - /** - * Runs a test case where a consumer and publisher is created and published with a given user - * key from the automation.xml. - * - * @param userKey The user key mentioned in the automation.xml for a specific user. - * @param destinationName The destination name of the queue. - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - private void createPublishAndSubscribeFromUser(String userKey, String destinationName) - throws XPathExpressionException, AndesClientConfigurationException, IOException, - JMSException, AndesClientException, NamingException { - long sendCount = 10L; - long expectedCount = 10L; - - AutomationContext userAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, userKey); - User contextUser = userAutomationContext.getContextTenant().getContextUser(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration - consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - contextUser.getUserNameWithoutDomain(), contextUser.getPassword(), - ExchangeType.QUEUE, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - contextUser.getUserNameWithoutDomain(), contextUser.getPassword(), - ExchangeType.QUEUE, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending " + - "failed for user : " + contextUser.getUserNameWithoutDomain()); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message " + - "receiving failed for user : " + contextUser.getUserNameWithoutDomain()); - } - - /** - * Assigning consuming publishing permissions of a queue to a role. - * - * @param queueName The queue name - * @param permissions New permissions for the role. can be publish, consume. - * @throws XPathExpressionException - * @throws IOException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws LogoutAuthenticationExceptionException - * @throws UserAdminUserAdminException - */ - public void updateQueueRoleConsumePublishPermission(String queueName, - QueueRolePermission permissions) - throws XPathExpressionException, IOException, URISyntaxException, SAXException, - XMLStreamException, LoginAuthenticationExceptionException, - AndesAdminServiceBrokerManagerAdminException, - LogoutAuthenticationExceptionException, - UserAdminUserAdminException, AutomationUtilException { - - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - AndesAdminClient andesAdminClient = - new AndesAdminClient(super.backendURL, sessionCookie); - andesAdminClient.updatePermissionForQueue(queueName, permissions); - loginLogoutClientForAdmin.logout(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/RedeliveryDelayTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/RedeliveryDelayTestCase.java deleted file mode 100644 index 5e782bbd..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/RedeliveryDelayTestCase.java +++ /dev/null @@ -1,1171 +0,0 @@ -/* - * Copyright (c) 2016 WSO2 Inc. (http://wso2.com) All Rights Reserved. - * - * 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.AndesJMSConsumer; -import org.wso2.mb.integration.common.clients.AndesJMSPublisher; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageListener; -import javax.jms.MessageProducer; -import javax.jms.TextMessage; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.List; - -/** - * Following test cases are related to redelivery delay feature for rejected messages. - */ -public class RedeliveryDelayTestCase extends MBIntegrationBaseTest { - private Log log = LogFactory.getLog(RedeliveryDelayTestCase.class); - - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesAckWaitTimeOut = null; - private String defaultAndesRedeliveryDelay = null; - - /** - * Initializing test case. - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, IOException, AutomationUtilException, ConfigurationException { - super.init(TestUserMode.SUPER_TENANT_USER); - - // Updating the redelivery attempts to 1 to speed up the test case. - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + - File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - // Changing "maximumRedeliveryAttempts" value to "1" in broker.xml - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "1"); - // Restarting server - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - - // Get current "AndesAckWaitTimeOut" system property. - defaultAndesAckWaitTimeOut = System.getProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "0"); - - // Get current "AndesRedeliveryDelay" system property. - defaultAndesRedeliveryDelay = System.getProperty(AndesClientConstants.ANDES_REDELIVERY_DELAY_PROPERTY); - - System.setProperty(AndesClientConstants.ANDES_REDELIVERY_DELAY_PROPERTY, "10000"); - } - - /** - * This test publishes 10 messages and the subscriber rejects the first message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void firstMessageInvalidOnlyQueueMessageListenerTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstMessageInvalidOnlyQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstMessageInvalidOnlyQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - private boolean receivedFirstMessage = false; - - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (!receivedFirstMessage && "#0".equals(textMessage.getText())) { - receivedFirstMessage = true; - } else { - message.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects the first message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * Here message receive method is used instead of the message listener to receive messages. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void firstMessageInvalidOnlyQueueMessageReceiverTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstMessageInvalidOnlyReceiverQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstMessageInvalidOnlyReceiverQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - final MessageConsumer receiver = andesJMSConsumer.getReceiver(); - Thread messageReceivingThread = new Thread() { - private boolean receivedFirstMessage = false; - public void run() { - while (receiver != null) { - try { - TextMessage textMessage = (TextMessage) receiver.receive(); - if (!receivedFirstMessage && "#0".equals(textMessage.getText())) { - receivedFirstMessage = true; - } else { - textMessage.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - } - }; - messageReceivingThread.start(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); - - } - - - /** - * This test publishes 10 messages and the subscriber rejects all message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void allUnacknowledgeMessageListenerTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - int sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "multipleUnacknowledgeQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "multipleUnacknowledgeQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (getMessageList(receivedMessages).contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount * 2; i++) { - if (i < sendCount) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } else { - validateMessageContentAndDelay(receivedMessages, i - sendCount, i, - "#" + Integer.toString(i - sendCount)); - } - } - - Assert.assertEquals(receivedMessages.size(), sendCount * 2, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects all message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * Here message receive method is used instead of the message listener to receive messages. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void allUnacknowledgeMessageReceiverTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - int sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "multipleUnacknowledgeReceiverQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "multipleUnacknowledgeReceiverQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - final MessageConsumer receiver = andesJMSConsumer.getReceiver(); - Thread messageReceivingThread = new Thread() { - public void run() { - while (receiver != null) { - try { - TextMessage textMessage = (TextMessage) receiver.receive(); - if (getMessageList(receivedMessages).contains(textMessage.getText())) { - textMessage.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - } - }; - messageReceivingThread.start(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount * 2; i++) { - if (i < sendCount) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } else { - validateMessageContentAndDelay(receivedMessages, i - sendCount, i, - "#" + Integer.toString(i - sendCount)); - } - } - - Assert.assertEquals(receivedMessages.size(), sendCount * 2, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects a message after each 3 received messages and then wait - * for the redelivered message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void oneByOneUnacknowledgeMessageListenerTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (Integer.parseInt(textMessage.getText().split("#")[1]) % 3 != 0 || - getMessageList(receivedMessages).contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); - validateMessageContentAndDelay(receivedMessages, 1, 11, "#3"); - validateMessageContentAndDelay(receivedMessages, 2, 12, "#6"); - validateMessageContentAndDelay(receivedMessages, 3, 13, "#9"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects a message after each 3 received messages and then wait - * for the redelivered message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * Here message receive method is used instead of the message listener to receive messages. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void oneByOneUnacknowledgeMessageReceiverTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeReceiverQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeReceiverQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - final MessageConsumer receiver = andesJMSConsumer.getReceiver(); - Thread messageReceivingThread = new Thread() { - public void run() { - while (receiver != null) { - try { - TextMessage textMessage = (TextMessage) receiver.receive(); - if (Integer.parseInt(textMessage.getText().split("#")[1]) % 3 != 0 || - getMessageList(receivedMessages).contains(textMessage.getText())) { - textMessage.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - } - }; - messageReceivingThread.start(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); - validateMessageContentAndDelay(receivedMessages, 1, 11, "#3"); - validateMessageContentAndDelay(receivedMessages, 2, 12, "#6"); - validateMessageContentAndDelay(receivedMessages, 3, 13, "#9"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects first 4 messages and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void firstFewUnacknowledgeMessageListenerTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstFewUnacknowledgeQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstFewUnacknowledgeQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (Integer.parseInt(textMessage.getText().split("#")[1]) >= 4 || - getMessageList(receivedMessages).contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); - validateMessageContentAndDelay(receivedMessages, 1, 11, "#1"); - validateMessageContentAndDelay(receivedMessages, 2, 12, "#2"); - validateMessageContentAndDelay(receivedMessages, 3, 13, "#3"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects first 4 messages and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * Here message receive method is used instead of the message listener to receive messages. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void firstFewUnacknowledgeMessageReceiverTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstFewUnacknowledgeReceiverQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "firstFewUnacknowledgeReceiverQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - final MessageConsumer receiver = andesJMSConsumer.getReceiver(); - Thread messageReceivingThread = new Thread() { - public void run() { - while (receiver != null) { - try { - TextMessage textMessage = (TextMessage) receiver.receive(); - if (Integer.parseInt(textMessage.getText().split("#")[1]) >= 4 || - getMessageList(receivedMessages).contains(textMessage.getText())) { - textMessage.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - } - }; - messageReceivingThread.start(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 10, "#0"); - validateMessageContentAndDelay(receivedMessages, 1, 11, "#1"); - validateMessageContentAndDelay(receivedMessages, 2, 12, "#2"); - validateMessageContentAndDelay(receivedMessages, 3, 13, "#3"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 4, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects the 8th message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void unacknowledgeMiddleMessageMessageListenerTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "unacknowledgeMiddleMessageQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "unacknowledgeMiddleMessageQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (!textMessage.getText().equals("#7") || - getMessageList(receivedMessages).contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 6, 10, "#7"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); - } - - - /** - * This test publishes 10 messages and the subscriber rejects the 8th message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * Here message receive method is used instead of the message listener to receive messages. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void unacknowledgeMiddleMessageMessageReceiverTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 10; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "unacknowledgeMiddleMessageReceiverQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "unacknowledgeMiddleMessageReceiverQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - final MessageConsumer receiver = andesJMSConsumer.getReceiver(); - Thread messageReceivingThread = new Thread() { - public void run() { - while (receiver != null) { - try { - TextMessage textMessage = (TextMessage) receiver.receive(); - if (!textMessage.getText().equals("#7") || - getMessageList(receivedMessages).contains(textMessage.getText())) { - textMessage.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - } - }; - messageReceivingThread.start(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 6, 10, "#7"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 1, "Message receiving failed."); - } - - - /** - * This test publishes 1000 messages and the subscriber reject each 100th message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void oneByOneUnacknowledgeMessageListenerForMultipleMessagesTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 1000; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeMessageListenerForMultiple"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeMessageListenerForMultiple"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - MessageConsumer receiver = andesJMSConsumer.getReceiver(); - receiver.setMessageListener(new MessageListener() { - @Override - public void onMessage(Message message) { - try { - TextMessage textMessage = (TextMessage) message; - if (Integer.parseInt(textMessage.getText().split("#")[1]) % 100 != 0 || - getMessageList(receivedMessages).contains(textMessage.getText())) { - message.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - }); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 1000, "#0"); - validateMessageContentAndDelay(receivedMessages, 99, 1001, "#100"); - validateMessageContentAndDelay(receivedMessages, 199, 1002, "#200"); - validateMessageContentAndDelay(receivedMessages, 299, 1003, "#300"); - validateMessageContentAndDelay(receivedMessages, 399, 1004, "#400"); - validateMessageContentAndDelay(receivedMessages, 499, 1005, "#500"); - validateMessageContentAndDelay(receivedMessages, 599, 1006, "#600"); - validateMessageContentAndDelay(receivedMessages, 699, 1007, "#700"); - validateMessageContentAndDelay(receivedMessages, 799, 1008, "#800"); - validateMessageContentAndDelay(receivedMessages, 899, 1009, "#900"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 10, "Message receiving failed."); - } - - - /** - * This test publishes 1000 messages and the subscriber reject each 100th message and then wait for the redelivered - * message. - *

- * The redelivered message is tested against the same message content with the original message and the timestamps - * are also checked against the original message timestamp to make sure that the message was delayed. - * Here message receive method is used instead of the message listener to receive messages. - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void oneByOneUnacknowledgeMessageReceiverForMultipleMessagesTestCase() - throws AndesClientConfigurationException, XPathExpressionException, IOException, JMSException, - AndesClientException, NamingException { - long sendCount = 1000; - final List> receivedMessages = new ArrayList<>(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeMessageReceiverForMultipleQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.PER_MESSAGE_ACKNOWLEDGE); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "oneByOneUnacknowledgeMessageReceiverForMultipleQueue"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - final AndesJMSConsumer andesJMSConsumer = consumerClient.getConsumers().get(0); - final MessageConsumer receiver = andesJMSConsumer.getReceiver(); - Thread messageReceivingThread = new Thread() { - public void run() { - while (receiver != null) { - try { - TextMessage textMessage = (TextMessage) receiver.receive(); - if (Integer.parseInt(textMessage.getText().split("#")[1]) % 100 != 0 || - getMessageList(receivedMessages).contains(textMessage.getText())) { - textMessage.acknowledge(); - } - receivedMessages.add(ImmutablePair.of(textMessage.getText(), Calendar.getInstance())); - andesJMSConsumer.getReceivedMessageCount().incrementAndGet(); - } catch (JMSException e) { - throw new RuntimeException("Exception occurred when receiving messages.", e); - } - } - } - }; - messageReceivingThread.start(); - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher andesJMSPublisher = publisherClient.getPublishers().get(0); - MessageProducer sender = andesJMSPublisher.getSender(); - for (int i = 0; i < sendCount; i++) { - TextMessage textMessage = andesJMSPublisher.getSession().createTextMessage("#" + Integer.toString(i)); - sender.send(textMessage); - } - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2); - log.info("Received Messages : " + getMessageList(receivedMessages)); - - for (int i = 0; i < sendCount; i++) { - Assert.assertEquals(receivedMessages.get(i).getLeft(), "#" + Integer.toString(i), - "Invalid messages received. #" + Integer.toString(i) + " expected."); - } - - validateMessageContentAndDelay(receivedMessages, 0, 1000, "#0"); - validateMessageContentAndDelay(receivedMessages, 99, 1001, "#100"); - validateMessageContentAndDelay(receivedMessages, 199, 1002, "#200"); - validateMessageContentAndDelay(receivedMessages, 299, 1003, "#300"); - validateMessageContentAndDelay(receivedMessages, 399, 1004, "#400"); - validateMessageContentAndDelay(receivedMessages, 499, 1005, "#500"); - validateMessageContentAndDelay(receivedMessages, 599, 1006, "#600"); - validateMessageContentAndDelay(receivedMessages, 699, 1007, "#700"); - validateMessageContentAndDelay(receivedMessages, 799, 1008, "#800"); - validateMessageContentAndDelay(receivedMessages, 899, 1009, "#900"); - - Assert.assertEquals(receivedMessages.size(), sendCount + 10, "Message receiving failed."); - } - - /** - * This method will restore all the configurations back. - * Following configurations will be restored. - * 1. AndesAckWaitTimeOut system property. - * 2. AndesRedeliveryDelay system property. - * 3. Deleted all destination created in this test class. - * 4. Restore default broker.xml and restart server. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass() - public void tearDown() - throws IOException, AutomationUtilException, LogoutAuthenticationExceptionException, - AndesAdminServiceBrokerManagerAdminException { - if (StringUtils.isBlank(defaultAndesAckWaitTimeOut)) { - System.clearProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, defaultAndesAckWaitTimeOut); - } - - if (StringUtils.isBlank(defaultAndesRedeliveryDelay)) { - System.clearProperty(AndesClientConstants.ANDES_REDELIVERY_DELAY_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_REDELIVERY_DELAY_PROPERTY, defaultAndesRedeliveryDelay); - } - - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(super.automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - AndesAdminClient andesAdminClient = new AndesAdminClient(super.backendURL, sessionCookie); - - andesAdminClient.deleteQueue("firstMessageInvalidOnlyQueue"); - andesAdminClient.deleteQueue("firstMessageInvalidOnlyReceiverQueue"); - andesAdminClient.deleteQueue("multipleUnacknowledgeQueue"); - andesAdminClient.deleteQueue("multipleUnacknowledgeReceiverQueue"); - andesAdminClient.deleteQueue("oneByOneUnacknowledgeQueue"); - andesAdminClient.deleteQueue("oneByOneUnacknowledgeReceiverQueue"); - andesAdminClient.deleteQueue("firstFewUnacknowledgeQueue"); - andesAdminClient.deleteQueue("firstFewUnacknowledgeReceiverQueue"); - andesAdminClient.deleteQueue("unacknowledgeMiddleMessageQueue"); - andesAdminClient.deleteQueue("unacknowledgeMiddleMessageReceiverQueue"); - andesAdminClient.deleteQueue("oneByOneUnacknowledgeMessageListenerForMultiple"); - andesAdminClient.deleteQueue("oneByOneUnacknowledgeMessageReceiverForMultipleQueue"); - loginLogoutClientForAdmin.logout(); - - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - } - - /** - * Validates message content of redelivered messages against original message. Validate that the redelivery delay - * has occurred. - * - * @param receivedMessages The received message list. - * @param originalMessageIndex The index of the origin message in the received message list. - * @param redeliveredMessageIndex The index of the redelivered message in the received message list. - * @param expectedMessageContent The expected message content. - */ - private void validateMessageContentAndDelay( - List> receivedMessages, - int originalMessageIndex, - int redeliveredMessageIndex, - String expectedMessageContent) { - // Validate message content - String messageContent = receivedMessages.get(redeliveredMessageIndex).getLeft(); - Assert.assertEquals(messageContent, expectedMessageContent, "Invalid messages received."); - - // Validate delay - Calendar originalMessageCalendar = receivedMessages.get(originalMessageIndex).getRight(); - log.info("Original message timestamp for " + messageContent + " : " + - originalMessageCalendar.getTimeInMillis()); - originalMessageCalendar.add(Calendar.SECOND, 10); - log.info("Minimum redelivered timestamp for " + messageContent + " : " + - originalMessageCalendar.getTimeInMillis()); - Calendar redeliveredMessageCalendar = receivedMessages.get(redeliveredMessageIndex).getRight(); - log.info("Timestamp of redelivered for " + messageContent + " message : " + - redeliveredMessageCalendar.getTimeInMillis()); - Assert.assertTrue(originalMessageCalendar.compareTo(redeliveredMessageCalendar) <= 0, - "Message received before the redelivery delay"); - } - - /** - * Gets the received messages to a list. - * - * @param receivedMessages The list of received messages as a pair of message content and time received. - * @return A list of message content. - */ - private List getMessageList(List> receivedMessages) { - List messages = new ArrayList<>(); - for (ImmutablePair receivedMessage : receivedMessages) { - messages.add(receivedMessage.getLeft()); - } - return messages; - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SSLSendReceiveTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SSLSendReceiveTestCase.java deleted file mode 100644 index 6be12464..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SSLSendReceiveTestCase.java +++ /dev/null @@ -1,188 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - - -/** - * Send messages using SSL and receive messages using SSL - */ -public class SSLSendReceiveTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 100L; - - /** - * Message count expected - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializes test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Creates a queue named "SSLSingleQueue". - * 2. Consumer listens to receiving messages using an ssl connection. - * 3. Publisher publishes messages using an ssl connection. - * 4. Consumer should receive all messages sent. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue", "security"}) - public void performSingleQueueSendReceiveTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - // Creating ssl connection string elements - // The following keystore path and truststore path should be as follows regardless the OS(platform). - String keyStorePath = System.getProperty("carbon.home").replace("\\", "/") + "/repository/resources/security/" + - "wso2carbon.jks"; - String trustStorePath = System.getProperty("carbon.home").replace("\\", "/") + "/repository/resources/" + - "security/client-truststore.jks"; - String keyStorePassword = "wso2carbon"; - String trustStorePassword = "wso2carbon"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration( - "admin", "admin", "127.0.0.1", getSecureAMQPPort(), ExchangeType.QUEUE, "SSLSingleQueue", - "RootCA", trustStorePath, trustStorePassword, keyStorePath, - keyStorePassword); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration( - "admin", "admin", "127.0.0.1", getSecureAMQPPort(), ExchangeType.QUEUE, "SSLSingleQueue", - "RootCA", trustStorePath, trustStorePassword, keyStorePath, - keyStorePassword); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating consumer client - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from consumerClient"); - } - - - /** - * 1. Creates a queue named "SSLSingleQueue". - * 2. Consumer listens to receiving messages using an ssl connection where consumer does not provide the keystore - * to connect. - * 3. Publisher publishes messages using an ssl connection. - * 4. Consumer should receive all messages sent. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue", "security"}) - public void performKeyStoreOptionalTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - // Creating ssl connection string elements - // The following truststore path should be as follows regardless the OS(platform). - String trustStorePath = System.getProperty("carbon.home").replace("\\", "/") + "/repository/resources/" + - "security/client-truststore.jks"; - String trustStorePassword = "wso2carbon"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration( - "admin", "admin", "127.0.0.1", getSecureAMQPPort(), ExchangeType.QUEUE, "SSLSingleQueue", - "RootCA", trustStorePath, trustStorePassword, null, - null); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration( - "admin", "admin", "127.0.0.1", getSecureAMQPPort(), ExchangeType.QUEUE, "SSLSingleQueue", - "RootCA", trustStorePath, trustStorePassword, null, - null); - - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating consumer client - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from consumerClient"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SelectorsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SelectorsTestCase.java deleted file mode 100644 index 17737b2a..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SelectorsTestCase.java +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.AndesJMSPublisher; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.JMSHeaderPropertyType; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test case to test functionality of selectors. Selectors can be used to filter messages received - * for the consumer. - */ -public class SelectorsTestCase extends MBIntegrationBaseTest { - - /** - * Message count sent - */ - private static final long SEND_COUNT = 10L; - - /** - * Expected message count - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializes test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Create a consumer that accepts messages with JMSType message header value having as AAA - * 2. Publish messages that does not have JMSType value as AAA - * 3. Verify that no messages are received by receiver. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "send-receive test case with jms selectors without conforming messages") - public void performQueueSendWithReceiverHavingSelectorsButNoModifiedPublisherSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberJMSType"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setSelectors("JMSType='AAA'"); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberJMSType"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), 0, "Message receiving failed."); - } - - /** - * 1. Create a consumer that accepts messages with JMSType message header value having as AAA - * 2. Publish messages that does have JMSType value as AAA - * 3. Verify that all sent messages received by receiver. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performQueueSendWithModifiedPublisherSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberAndPublisherJMSType"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setSelectors("JMSType='AAA'"); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberAndPublisherJMSType"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setJMSType("AAA"); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - } - - /** - * 1. Create a consumer that accepts message which are published 1 second after the current time. - * 2. Publisher sends messages with a delay. - * 3. Consumer will receive a certain amount of messages. But will not receive all messages. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performQueueSendWithTimestampBasedSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberJMSTimestamp"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setSelectors("JMSTimestamp > " + Long.toString(System.currentTimeMillis() + 1000L)); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberJMSTimestamp"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setRunningDelay(300L); // Setting publishing delay - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed"); - Assert.assertTrue(consumerClient - .getReceivedMessageCount() < EXPECTED_COUNT, "Message receiving failed."); - } - - /** - * 1. Create a consumer that filters out message which has the "location" property as "wso2.trace". - * 2. 2 publishers will send messages with one having location as "wso2.trace" and another having - * "wso2.palmgrove". - * 3. Consumer should only receive messages having "wso2.trace". - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performQueueReceiverCustomPropertyBasedSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberCustomProperty"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setSelectors("location = 'wso2.trace'"); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration initialPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberCustomProperty"); - initialPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT / 2L); - initialPublisherConfig.setJMSHeaderProperty("location", "wso2.trace", JMSHeaderPropertyType.STRING); - - - AndesJMSPublisherClientConfiguration secondaryPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "jmsSelectorSubscriberCustomProperty"); - secondaryPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT / 2L); - secondaryPublisherConfig.setJMSHeaderProperty("location", "wso2.palmgrove", JMSHeaderPropertyType.STRING); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient initialPublisherClient = new AndesClient(initialPublisherConfig, true); - initialPublisherClient.startClient(); - - AndesClient secondaryPublisherClient = new AndesClient(secondaryPublisherConfig, true); - secondaryPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(initialPublisherClient.getSentMessageCount(), SEND_COUNT / 2L, - "Message sending failed for first client"); - Assert.assertEquals(secondaryPublisherClient.getSentMessageCount(), SEND_COUNT / 2L, - "Message sending failed for second client"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), SEND_COUNT / 2L, - "Message receiving failed."); - - } - - /** - * 1. Create consumer that filters out messages having "location" as "wso2.trace" and "JMSType" as "MyMessage". - * 2. Create 2 publisher. One publisher publishing with messages having "location" as "wso2.trace" - * and "JMSType" as "MyMessage" in message header. Other having "location" as "wso2.palmGrove" - * and "JMSType" as "otherMessage" in message header. - * 3. Consumer should only receive messages having header "location" as "wso2.trace" and "JMSType" as "MyMessage". - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performQueueReceiverCustomPropertyAndJMSTypeBasedSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "jmsSelectorSubscriberCustomPropertyAndJMSType"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setSelectors("location = 'wso2.trace' AND JMSType='myMessage'"); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration initialPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "jmsSelectorSubscriberCustomPropertyAndJMSType"); - initialPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT / 2L); - initialPublisherConfig.setJMSType("myMessage"); - initialPublisherConfig.setJMSHeaderProperty("location", "wso2.trace", JMSHeaderPropertyType.STRING); - - AndesJMSPublisherClientConfiguration secondaryPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, - "jmsSelectorSubscriberCustomPropertyAndJMSType"); - secondaryPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT / 2L); - secondaryPublisherConfig.setJMSType("otherMessage"); - secondaryPublisherConfig.setJMSHeaderProperty("location", "wso2.palmGrove", JMSHeaderPropertyType.STRING); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient initialPublisherClient = new AndesClient(initialPublisherConfig, true); - initialPublisherClient.startClient(); - - AndesClient secondaryPublisherClient = new AndesClient(secondaryPublisherConfig, true); - secondaryPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(initialPublisherClient.getSentMessageCount(), SEND_COUNT / 2L, - "Message sending failed for first client"); - Assert.assertEquals(secondaryPublisherClient.getSentMessageCount(), SEND_COUNT / 2L, - "Message sending failed for second client"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), SEND_COUNT / 2L, - "Message receiving failed."); - } - - /** - * 1. Create consumer that filters out messages having "location" as "wso2.palmgrove" or "JMSType" as "MyMessage". - * 2. Create 2 publisher. One publisher publishing with messages having "location" as "wso2.trace" - * and "JMSType" as "MyMessage" in message header. Other having "location" as "wso2.palmGrove" - * and "JMSType" as "otherMessage" in message header. - * 3. Consumer should receive all sent messages. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performQueueReceiverCustomPropertyOrJMSTypeBasedSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "jmsSelectorSubscriberCustomPropertyOrJMSType"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setSelectors("location = 'wso2.palmGrove' OR JMSType='myMessage'"); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration initialPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "jmsSelectorSubscriberCustomPropertyOrJMSType"); - initialPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT / 2L); - initialPublisherConfig.setJMSType("myMessage"); - initialPublisherConfig.setJMSHeaderProperty("location", "wso2.trace", JMSHeaderPropertyType.STRING); - - AndesJMSPublisherClientConfiguration secondaryPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "jmsSelectorSubscriberCustomPropertyOrJMSType"); - secondaryPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT / 2L); - secondaryPublisherConfig.setJMSType("otherMessage"); - secondaryPublisherConfig.setJMSHeaderProperty("location", "wso2.palmGrove", JMSHeaderPropertyType.STRING); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient initialPublisherClient = new AndesClient(initialPublisherConfig, true); - initialPublisherClient.startClient(); - - AndesClient secondaryPublisherClient = new AndesClient(secondaryPublisherConfig, true); - secondaryPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(initialPublisherClient.getSentMessageCount(), SEND_COUNT / 2L, - "Message sending failed for first client"); - Assert.assertEquals(secondaryPublisherClient.getSentMessageCount(), SEND_COUNT / 2L, - "Message sending failed for second client"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), SEND_COUNT, - "Message receiving failed."); - } - - /** - * 1. Create a queue consumer with selector releaseYear < '1980'. - * 2. Create a queue consumer with selector releaseYear < '1960' - * 3. Create a queue publisher with jms header property releaseYear = '1960' - * Only the first consumer should get the messages - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb") - public void performMultipleQueueReceiversWithSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configurations - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "MultipleQueueReceiversWithSelectors"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig1.setSelectors("releaseYear < 1980"); - consumerConfig1.setAsync(false); - - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "MultipleQueueReceiversWithSelectors"); - consumerConfig2.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig2.setSelectors("releaseYear < 1960"); - consumerConfig2.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration initialPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, - "MultipleQueueReceiversWithSelectors"); - initialPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - initialPublisherConfig.setJMSHeaderProperty("releaseYear", 1970L, JMSHeaderPropertyType - .LONG); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient initialPublisherClient = new AndesClient(initialPublisherConfig, true); - initialPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - Assert.assertEquals(initialPublisherClient.getSentMessageCount(), SEND_COUNT, - "Message sending failed for client"); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), EXPECTED_COUNT, - "Message receiving failed for consumer 1."); - Assert.assertEquals(consumerClient2 - .getReceivedMessageCount(), 0, - "Unexpected message count received."); - } - - - /** - * 1. Create a topic consumer with selector releaseYear < '1980'. - * 2. Create a topic consumer with selector releaseYear < '1960' - * 3. Create a topic publisher with jms header property releaseYear = '1960' - * Only the first consumer should get the messages - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb") - public void performMultipleTopicReceiversWithSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configurations - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, - "MultipleTopicReceiversWithSelectors"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig1.setSelectors("releaseYear < 1980"); - consumerConfig1.setAsync(false); - - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, - "MultipleTopicReceiversWithSelectors"); - consumerConfig2.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig2.setSelectors("releaseYear < 1960"); - consumerConfig2.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration initialPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, - "MultipleTopicReceiversWithSelectors"); - initialPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - initialPublisherConfig.setJMSHeaderProperty("releaseYear", 1970L, JMSHeaderPropertyType - .LONG); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient initialPublisherClient = new AndesClient(initialPublisherConfig, true); - initialPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - Assert.assertEquals(initialPublisherClient.getSentMessageCount(), SEND_COUNT, - "Message sending failed for client"); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), EXPECTED_COUNT, - "Message sending failed for consumer client 1"); - Assert.assertEquals(consumerClient2 - .getReceivedMessageCount(), 0, - "Unexpected message count received"); - } - - /** - * 1. Create a durable topic consumer with selector releaseYear < '1980'. - * 2. Create a durable topic consumer with selector releaseYear < '1960' - * 3. Create a topic publisher with jms header property releaseYear = '1960' - * Only the first consumer should get the messages - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb") - public void performMultipleDurableTopicReceiversWithSelectors() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a initial JMS consumer client configurations - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, - "MultipleDurableTopicReceiversWithSelectors"); - consumerConfig1.setDurable(true, "selectorSub1"); - consumerConfig1.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig1.setSelectors("releaseYear < 1980"); - consumerConfig1.setAsync(false); - - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, - "MultipleDurableTopicReceiversWithSelectors"); - consumerConfig2.setDurable(true, "selectorSub2"); - consumerConfig2.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig2.setSelectors("releaseYear < 1960"); - consumerConfig2.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration initialPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, - "MultipleDurableTopicReceiversWithSelectors"); - initialPublisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - initialPublisherConfig.setJMSHeaderProperty("releaseYear", 1970L , JMSHeaderPropertyType - .LONG); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient initialPublisherClient = new AndesClient(initialPublisherConfig, true); - initialPublisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - - // Evaluating - Assert.assertEquals(initialPublisherClient.getSentMessageCount(), SEND_COUNT, - "Message sending failed for client"); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), EXPECTED_COUNT, - "Message sending failed for consumer client 1"); - Assert.assertEquals(consumerClient2 - .getReceivedMessageCount(), 0, - "Unexpected message count received"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SingleTopicPublishSubscribeTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SingleTopicPublishSubscribeTestCase.java deleted file mode 100644 index 7d884650..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SingleTopicPublishSubscribeTestCase.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Subscribe to a topic and send 1000 messages and verify if messages are being received - */ -public class SingleTopicPublishSubscribeTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 1000L; - - /** - * Expected message count - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializes test case - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * 1. Creates a topic name "hasith". - * 2. Subscriber subscribes to "hasitha" topic. - * 3. Publisher publishes messages to "hasitha" topic. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performSingleTopicPublishSubscribeTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "hasitha"); - // To check if more than expected messages are received - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT + 10); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "hasitha"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message send failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receive error from consumerClient"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SlowestSubscriptionRateMsgDeliveryStrategyTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SlowestSubscriptionRateMsgDeliveryStrategyTestCase.java deleted file mode 100644 index 4cb8e6d3..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SlowestSubscriptionRateMsgDeliveryStrategyTestCase.java +++ /dev/null @@ -1,207 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; - -/** - * This class bares test cases with "SLOWEST_SUB_RATE" topic message delivery strategy - */ -public class SlowestSubscriptionRateMsgDeliveryStrategyTestCase extends MBIntegrationBaseTest { - - private static final String SLOWEST_SUB_RATE_TOPIC = "slowestSubRateTopic"; - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass() - public void init() throws XPathExpressionException, MalformedURLException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set topicMessageDeliveryStrategy to SLOWEST_SUB_RATE_TOPIC so that broker will deliver the messages - * - * @throws XPathExpressionException - * @throws java.io.IOException - * @throws org.apache.commons.configuration.ConfigurationException - * @throws org.xml.sax.SAXException - * @throws javax.xml.stream.XMLStreamException - * @throws org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException - * @throws java.net.URISyntaxException - * @throws org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, - ConfigurationException, SAXException, XMLStreamException, LoginAuthenticationExceptionException, - URISyntaxException, AutomationUtilException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration - .PERFORMANCE_TUNING_TOPIC_MESSAGE_DELIVERY_STRATEGY, "SLOWEST_SUB_RATE"); - - //reduce this to 200 from default value (1000) so that delivery strategy is effective fast - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_ACK_HANDLING_MAX_UNACKED_MESSAGES, - "2"); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - - } - - /** - * 1. place subscriber A for SLOWEST_SUB_RATE_TOPIC with delay 0 - * 2. place subscriber B for SLOWEST_SUB_RATE_TOPIC with delay 0 - * 3. place subscriber C for SLOWEST_SUB_RATE_TOPIC with delay 200 milliseconds - * 4. place subscriber D for SLOWEST_SUB_RATE_TOPIC with delay 300 milliseconds - * - * Verify all messages are received at the end. When fast subscriber has got all messages, slowest subscriber - * also should have got all the messages - * - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws javax.jms.JMSException - * @throws javax.naming.NamingException - * @throws IOException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientException - * @throws XPathExpressionException - * @throws CloneNotSupportedException - */ - @Test(groups = "wso2.mb", description = "Test server with SLOWEST_SUB_RATE topic message delivery strategy") - public void performDiscardAllowedTopicMessageDelivery() throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException, CloneNotSupportedException { - - //Setting values for the sent and received message counts - long sendToSlowestSubRateTopicCount = 1000; - long expectedMessageCountPerSubscriber = sendToSlowestSubRateTopicCount; - - //setting up subscriber A - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, SLOWEST_SUB_RATE_TOPIC); - consumerConfig1.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCountPerSubscriber); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCountPerSubscriber / 10L); - consumerConfig1.setAsync(false); - - - //setting up subscriber B - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - - - //setting up subscriber C - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - consumerConfig3.setRunningDelay(100); - - //setting up subscriber D - AndesJMSConsumerClientConfiguration consumerConfig4 = consumerConfig1.clone(); - consumerConfig4.setRunningDelay(200); - - //starting consumers - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - AndesClient consumerClient4 = new AndesClient(consumerConfig4, true); - consumerClient4.startClient(); - - // Creating publisher configuration - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, SLOWEST_SUB_RATE_TOPIC); - publisherConfig1.setNumberOfMessagesToSend(sendToSlowestSubRateTopicCount); - publisherConfig1.setPrintsPerMessageCount(sendToSlowestSubRateTopicCount / 5L); - - //start publisher - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - publisherClient1.startClient(); - - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient4, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient3); - AndesClientUtils.shutdownClient(consumerClient2); - AndesClientUtils.shutdownClient(consumerClient1); - //AndesClientUtils.waitForMessagesAndShutdown(consumerClient3, 200*expectedMessageCountPerSubscriber); - - //these are very slow subscribers - //AndesClientUtils.waitForMessagesAndShutdown(consumerClient3, 200*expectedMessageCountPerSubscriber); - //AndesClientUtils.waitForMessagesAndShutdown(consumerClient4, 200*expectedMessageCountPerSubscriber); - - //verify all messages are published - Assert.assertEquals(sendToSlowestSubRateTopicCount, publisherClient1.getSentMessageCount()); - - //verify all messages are received - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedMessageCountPerSubscriber , "Did not " - + "receive expected message count for consumerClient1"); - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient2"); - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient3"); - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedMessageCountPerSubscriber, "Did not " - + "receive expected message count for consumerClient4"); - - } - - /** - * Restore to the previous configurations when the shared subscription test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SubTopicUserAuthorizationTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SubTopicUserAuthorizationTestCase.java deleted file mode 100644 index 1136a9bc..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/SubTopicUserAuthorizationTestCase.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.carbon.user.mgt.stub.types.carbon.FlaggedName; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class contains the test cases related to user authorization and sub topics - */ -public class SubTopicUserAuthorizationTestCase extends MBIntegrationBaseTest { - - /** - * Permission path for creating a topic - */ - private static final String ADD_TOPIC_PERMISSION = "/permission/admin/manage/topic/add"; - - /** - * Roles for the test case scenarios - */ - private static final String CREATE_PUB_SUB_TOPIC_ROLE = "create_pub_sub_topic_role"; - private static final String PUB_SUB_TOPIC_ROLE = "pub_sub_topic_role"; - private static final String NO_PERMISSION_TOPIC_ROLE = "no_permission_topic_role"; - - /** - * Prefix for internal roles for topics - */ - private static final String TOPIC_PREFIX = "T_"; - - private UserManagementClient userManagementClient; - - /** - * Initializes before a test method. Removes users of admin group if exists. Adds new roles with - * permissions. - * - * @throws Exception - */ - @BeforeMethod(alwaysRun = true) - public void initialize() throws Exception { - super.init(TestUserMode.SUPER_TENANT_ADMIN); - - String[] createPubSubUsers = new String[]{"authUser1", "authUser2"}; - String[] pubSubUsers = new String[]{"authUser3", "authUser4"}; - String[] noPermissionUsers = new String[]{"authUser5"}; - String[] allUsers = - new String[]{"authUser1", "authUser2", "authUser3", "authUser4", "authUser5"}; - - // Logging into user management as admin - userManagementClient = new UserManagementClient(backendURL, "admin", "admin"); - - // Removing admin permission for all users - userManagementClient.updateUserListOfRole(FrameworkConstants.ADMIN_ROLE, null, allUsers); - - // Adding roles along with users if roles does not exist. - userManagementClient - .addRole(CREATE_PUB_SUB_TOPIC_ROLE, createPubSubUsers, new String[]{ADD_TOPIC_PERMISSION}); - userManagementClient.addRole(PUB_SUB_TOPIC_ROLE, pubSubUsers, new String[]{}); - userManagementClient.addRole(NO_PERMISSION_TOPIC_ROLE, noPermissionUsers, new String[]{}); - } - - /** - * Cleans up the test case effects. Created roles and internal role related roles are deleted. - * - * @throws RemoteException - * @throws UserAdminUserAdminException - */ - @AfterMethod(alwaysRun = true) - public void cleanUp() throws RemoteException, UserAdminUserAdminException { - // Deleting roles of the users used in the test case - userManagementClient.deleteRole(CREATE_PUB_SUB_TOPIC_ROLE); - userManagementClient.deleteRole(PUB_SUB_TOPIC_ROLE); - userManagementClient.deleteRole(NO_PERMISSION_TOPIC_ROLE); - - // Deleting internal roles specific to topics - FlaggedName[] allRoles = userManagementClient.getAllRolesNames("*", 10); - for (FlaggedName allRole : allRoles) { - if (allRole.getItemName().contains(TOPIC_PREFIX)) { - userManagementClient.deleteRole(allRole.getItemName()); - } - } - } - - - /** - * authUser1 user creates a sub topic and then publishes and consumes messages. - * authUser1 should be able to create and publish to sub topic. - * - * @throws IOException - * @throws UserAdminUserAdminException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - * @throws AndesClientConfigurationException - */ - @Test(groups = {"wso2.mb"}) - public void performSubTopicPermissionWithAuthorizedUserTestCase() - throws IOException, UserAdminUserAdminException, XPathExpressionException, - NamingException, JMSException, AndesClientException, - AndesClientConfigurationException { - this.createPublishAndSubscribeFromUsers("authUser1", "authUser1", "authTopic1.authSubTopic1"); - } - - - /** - * authUser2 user creates topic and publish messages. - * authUser2 user creates sub topic under existing topic and publish messages. - * authUser2 should be able to create subtopic. - * - * @throws IOException - * @throws UserAdminUserAdminException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - * @throws AndesClientConfigurationException - */ - @Test(groups = {"wso2.mb"}) - public void performSubTopicPermissionWithDifferentAuthorizedUserTestCase() - throws IOException, UserAdminUserAdminException, XPathExpressionException, - NamingException, JMSException, AndesClientException, - AndesClientConfigurationException { - this.createPublishAndSubscribeFromUsers("authUser2", "authUser2", "authTopic2"); - this.createPublishAndSubscribeFromUsers("authUser2", "authUser2", "authTopic2.authSubTopic2"); - - } - - /** - * User1 creates a topic and then publishes and consumes messages. - * User2 tries to create sub topic user existing topic created by User1. But unable to succeed. - * JMSException exception is expected. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = JMSException.class, - expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performTopicPermissionSameRoleUsersWithNoPublishOrConsume() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException { - this.createPublishAndSubscribeFromUsers("authUser1", "authUser1" , "authTopic3"); - this.createPublishAndSubscribeFromUsers("authUser3", "authUser3", "authTopic3.authSubTopic3"); - } - - /** - * Deleting the topics that were created. - * - * @throws XPathExpressionException - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XMLStreamException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesEventAdminServiceEventAdminException - * @throws LogoutAuthenticationExceptionException - */ - @AfterClass() - public void cleanUpTopics() - throws XPathExpressionException, LoginAuthenticationExceptionException, IOException, - XMLStreamException, URISyntaxException, SAXException, - AndesEventAdminServiceEventAdminException, - LogoutAuthenticationExceptionException, AutomationUtilException { - LoginLogoutClient loginLogoutClientForUser = new LoginLogoutClient(this.automationContext); - String sessionCookie = loginLogoutClientForUser.login(); - TopicAdminClient topicAdminClient = - new TopicAdminClient(this.backendURL, sessionCookie); - topicAdminClient.removeTopic("authTopic1"); - topicAdminClient.removeTopic("authTopic2"); - topicAdminClient.removeTopic("authTopic3"); - - loginLogoutClientForUser.logout(); - - } - - - - /** - * Runs a test case where a consumer and publisher is created and published with a given user - * key from the automation.xml. - * - * @param topicConsumeUser user defined in automation.xml for consume from a topic. - * @param topicPublishUser user defined in automation.xml for publish to a topic. - * @param destinationName topic destination. - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - private void createPublishAndSubscribeFromUsers(String topicConsumeUser, String topicPublishUser, - String destinationName) - throws XPathExpressionException, AndesClientConfigurationException, IOException, - JMSException, AndesClientException, NamingException { - - long sendCount = 100L; - long expectedCount = 100L; - - // get context for topic consume user - AutomationContext topicConsumeUserAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, topicConsumeUser); - User consumeUser = topicConsumeUserAutomationContext.getContextTenant().getContextUser(); - - // get context for topic publisher user - AutomationContext topicPublishUserAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, topicPublishUser); - User publishUser = topicPublishUserAutomationContext.getContextTenant().getContextUser(); - - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration - consumerConfig = - new AndesJMSConsumerClientConfiguration( getAMQPPort(), - consumeUser.getUserNameWithoutDomain(), consumeUser.getPassword(), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration( getAMQPPort(), - publishUser.getUserNameWithoutDomain(), publishUser.getPassword(), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending " + - "failed for user : " + consumeUser.getUserNameWithoutDomain()); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message " + - "receiving failed for user : " + publishUser.getUserNameWithoutDomain()); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TemporaryTopicSubscriptionVerificationTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TemporaryTopicSubscriptionVerificationTestCase.java deleted file mode 100644 index 87d0d7bb..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TemporaryTopicSubscriptionVerificationTestCase.java +++ /dev/null @@ -1,232 +0,0 @@ -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -/** - * Test class to test temporary topics work along with subscriptions. - */ -public class TemporaryTopicSubscriptionVerificationTestCase extends MBIntegrationBaseTest { - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Put a topic subscriber - * 2. Receive some of the messages and close. - * 3. Resubscribe to same topic and see if messages are received. - * 4. Messages should not be receiving - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}, - description = "Single topic subscriber subscribe-close-re-subscribe test case") - public void performSingleTopicSubscribeCloseResubscribeTest() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException, XPathExpressionException { - - long sendCount = 1000L; - long expectedCount = 200L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration initialConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "singleSubscribeAndCloseTopic"); - initialConsumerConfig.setMaximumMessagesToReceived(expectedCount); - initialConsumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - initialConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "singleSubscribeAndCloseTopic"); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(initialConsumerConfig, true); - initialConsumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - - // Creating a second consumer client configuration - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "singleSubscribeAndCloseTopic"); - secondaryConsumerConfig.setMaximumMessagesToReceived(1L); - secondaryConsumerConfig.setAsync(false); - - // Creating a seconds publisher client configuration - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(secondaryConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), sendCount, "Message send failed"); - Assert.assertEquals(initialConsumerClient - .getReceivedMessageCount(), expectedCount, "Initial consumer failed to receive messages"); - Assert.assertEquals(secondaryConsumerClient - .getReceivedMessageCount(), 0, "Message received after re-subscribing for a temporary topic."); - } - - /** - * 1. Put a topic subscriber - * 2. Put another topic subscriber. It will receive some of the messages and close - * 3. Resubscribe to same topic and see if messages are received. (while first subscriber is still getting messages) - * 4. Messages should not be receiving - * - * @throws ExecutionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}, description = "Single topic subscriber subscribe-close-" + - "re-subscribe test case with multiple " + - "subscriptions") - public void performMultipleTopicSubscribeCloseResubscribeTest() - throws ExecutionException, AndesClientConfigurationException, NamingException, - JMSException, - IOException, AndesClientException, XPathExpressionException { - - long sendCount = 1000L; - long expectedCountByClient1 = 1000L; - long expectedCountByClient2 = 200L; - - ExecutorService service = Executors.newSingleThreadExecutor(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration initialConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "multiSubscribeAndCloseTopic"); - initialConsumerConfig.setMaximumMessagesToReceived(expectedCountByClient1); - initialConsumerConfig.setPrintsPerMessageCount(expectedCountByClient1 / 10L); - initialConsumerConfig.setRunningDelay(100L); // Setting a delay in consuming each message. - initialConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "multiSubscribeAndCloseTopic"); - secondaryConsumerConfig.setMaximumMessagesToReceived(expectedCountByClient2); - secondaryConsumerConfig.setPrintsPerMessageCount(expectedCountByClient2 / 10L); - secondaryConsumerConfig.setRunningDelay(100L); // Setting a delay in publishing each message. - secondaryConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "multiSubscribeAndCloseTopic"); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating consumer clients - AndesClient initialConsumerClient = new AndesClient(initialConsumerConfig, true); - initialConsumerClient.startClient(); - - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - // Schedule another subscriber to run after 'first client is closed' - ConcurrentReceiverTask receiverTask = new ConcurrentReceiverTask(); - Future future = service.submit(receiverTask); - - // Creating publisher client - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(secondaryConsumerClient); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), sendCount, "Message send failed"); - - Assert.assertEquals(initialConsumerClient - .getReceivedMessageCount(), expectedCountByClient1, "Message receiving failed by client 1."); - Assert.assertEquals(secondaryConsumerClient - .getReceivedMessageCount(), expectedCountByClient2, "Message receiving failed by client 2."); - - try { - Boolean newReceivingClientResult = future.get(); - Assert.assertFalse(newReceivingClientResult, - "Message received after re-subscribing for a temporary topic when" + - " another subscription to same topic is around."); - } catch (InterruptedException e) { - //ignore - } - } - - /** - * Inner class that run another consumer - */ - private class ConcurrentReceiverTask implements Callable { - - /** - * {@inheritDoc} - */ - @Override - public Boolean call() throws Exception { - // waiting - TimeUnit.SECONDS.sleep(30); - // Re-subscribe and see if messages are coming - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration newConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "multiSubscribeAndCloseTopic"); - newConsumerConfig.setMaximumMessagesToReceived(1L); - newConsumerConfig.setAsync(false); - - // Creating clients - AndesClient newConsumerClient = new AndesClient(newConsumerConfig, true); - newConsumerClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(newConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - return newConsumerClient.getReceivedMessageCount() == 1L; - } - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantCreateQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantCreateQueueTestCase.java deleted file mode 100644 index 99be8567..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantCreateQueueTestCase.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This tests if a tenant user can create queues, send and receive messages. - */ -public class TenantCreateQueueTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 100L; - - /** - * Message count expected - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Consumer listens to messages from "testtenant1.com/www" destination. Consumer listening - * as a tenant. - * 2. Publish messages to "testtenant1.com/www" by a tenant. - * 3. Send message count should be received by the consumer. - * - * @throws IOException - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single queue send-receive test case") - public void performSingleQueueSendReceiveTestCase() throws IOException, - AndesClientConfigurationException, - JMSException, - NamingException, - AndesClientException, - XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "tenant1user1!testtenant1.com", - "tenant1user1", ExchangeType.QUEUE, "testtenant1.com/www"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "tenant1user1!testtenant1.com", - "tenant1user1", ExchangeType.QUEUE, "testtenant1.com/www"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.sleepForInterval(10000); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "TENANT 1 send failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT, "TENANT 1 receive failed"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantDeadLetterChannelTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantDeadLetterChannelTestCase.java deleted file mode 100644 index 0fe2d59e..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantDeadLetterChannelTestCase.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.apache.commons.lang3.StringUtils; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.andes.stub.admin.types.Queue; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This test case contains test to check if messages goes to correct - * tenants dead letter channel. - */ -public class TenantDeadLetterChannelTestCase extends MBIntegrationBaseTest { - - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesAckWaitTimeOut = null; - - /** - * Name of tenant's dlc queue - */ - private String tenantDlcQueueName = "dlctenant1.com/DeadLetterChannel"; - - /** - * Name of super tenant's dlc queue - */ - private String superTenantDlcQueueName = "DeadLetterChannel"; - - /** - * Initializes the test case. - * - * @throws XPathExpressionException - * @throws java.rmi.RemoteException - * @throws org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, RemoteException, - UserAdminUserAdminException { - super.init(TestUserMode.SUPER_TENANT_USER); - - // Get current "AndesAckWaitTimeOut" system property. - defaultAndesAckWaitTimeOut = System.getProperty(AndesClientConstants. - ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - - - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "0"); - - } - - /** - * Set default properties after test case. - */ - @AfterClass() - public void tearDown() { - // Setting system property "AndesAckWaitTimeOut" to default value. - if (StringUtils.isBlank(defaultAndesAckWaitTimeOut)) { - System.clearProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, - defaultAndesAckWaitTimeOut); - } - } - - - /** - * This test case will test functionality of tenant dead letter channel in a queue scenario. - * 1. Publish 1 queue message to tenant. - * 2. Add consumer for the queue message. - * 3. Consumer do not acknowledge for the queue message. - * 4. Message will put into tenant dlc after retry sending queue message 10 times. - * 5. Number of messages in tenant dlc should be equal to 1. - * 6. Number of messages in super tenant dlc should be equal to 0. - * - * @throws JMSException - * @throws IOException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws LoginAuthenticationExceptionException - * @throws XPathExpressionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws URISyntaxException - * @throws SAXException - * @throws LogoutAuthenticationExceptionException - * @throws XMLStreamException - */ - @Test(groups = "wso2.mb", description = "Tenant dead letter channel test case for queues") - public void performTenantDeadLetterChannelQueueTestCase() - throws JMSException, IOException, NamingException, AndesClientConfigurationException, - AndesClientException, LoginAuthenticationExceptionException, - XPathExpressionException, - AndesAdminServiceBrokerManagerAdminException, URISyntaxException, SAXException, - LogoutAuthenticationExceptionException, XMLStreamException, AutomationUtilException { - - int sendMessageCount = 1; - - Queue tenantUserDlcQueue; - - Queue superAdminDlcQueue; - - String destinationName = "dlctenant1.com/tenantQueue"; - - // Get the automation context for the dlctenant1 - AutomationContext tenantContext = new AutomationContext("MB", "mb001", "dlctenant1", - "dlctenantuser1"); - - LoginLogoutClient loginLogoutClient = new LoginLogoutClient(tenantContext); - String sessionCookie = loginLogoutClient.login(); - AndesAdminClient andesClient = - new AndesAdminClient(super.backendURL, sessionCookie); - loginLogoutClient.logout(); - - // purge if there are any dlc messages in dlctenant1 user - andesClient.purgeQueue(tenantDlcQueueName); - - // Get the automation context for the superTenant - AutomationContext superTenantContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, - FrameworkConstants.SUPER_TENANT_ADMIN); - - LoginLogoutClient loginLogoutSuperTenant = new LoginLogoutClient(superTenantContext); - String SuperTenantSessionCookie = loginLogoutSuperTenant.login(); - AndesAdminClient andesAdminClient = - new AndesAdminClient(super.backendURL, SuperTenantSessionCookie - ); - loginLogoutSuperTenant.logout(); - - // purge if there are any dlc messages in super tenant admin - andesClient.purgeQueue(superTenantDlcQueueName); - - - // Create a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "dlctenantuser1!dlctenant1.com", - "dlctenantuser1", ExchangeType.QUEUE, - destinationName); - // Add manual client acknowledgement in configuration - consumerConfig - .setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - // Acknowledge a message only after 200 messages are received - consumerConfig - .setAcknowledgeAfterEachMessageCount(200L); - consumerConfig.setPrintsPerMessageCount(sendMessageCount); - consumerConfig.setAsync(false); - - // Create consumer client with given consumerConfig - AndesClient consumerClient = new AndesClient(consumerConfig, true); - // Start consumer client - consumerClient.startClient(); - - // Create a publisher client configuration - AndesJMSPublisherClientConfiguration tenantPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "dlctenantuser1!dlctenant1.com", - "dlctenantuser1", ExchangeType.QUEUE, - destinationName); - tenantPublisherConfig.setNumberOfMessagesToSend(sendMessageCount); - tenantPublisherConfig.setPrintsPerMessageCount(sendMessageCount); - - // Create a publisher client with given configuration - AndesClient tenantPublisherClient = new AndesClient(tenantPublisherConfig, true); - // Start publisher client - tenantPublisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, - AndesClientConstants.DEFAULT_RUN_TIME); - - // Get tenant's dlc queue - tenantUserDlcQueue = andesClient.getDlcQueue(); - - // Get super tenant dlc queue - superAdminDlcQueue = andesAdminClient.getDlcQueue(); - - // Evaluating - Assert.assertEquals(tenantUserDlcQueue.getMessageCount(), sendMessageCount, - "failure on tenant dlc queue path"); - Assert.assertEquals(superAdminDlcQueue.getMessageCount(), 0, - "failure on super tenant dlc queue path"); - } - - /** - * This test case will test the functionality of messages being moved to tenant dead letter channel in a durable - * topic subscription scenario. - * 1. Add a durable subscription for a topic in tenant. - * 1. Publish 1 message to the topic. - * 3. Consumer do not acknowledge for the message. - * 4. Message will put into tenant dlc after retry sending queue message 10 times. - * 5. Number of messages in tenant dlc should be equal to 1. - * 6. Number of messages in super tenant dlc should be equal to 0. - * - * @throws JMSException - * @throws IOException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws LoginAuthenticationExceptionException - * @throws XPathExpressionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws URISyntaxException - * @throws SAXException - * @throws LogoutAuthenticationExceptionException - * @throws XMLStreamException - */ - @Test(groups = "wso2.mb", description = "Tenant dead letter channel test case for durable subscriptions") - public void performTenantDeadLetterChannelDurableTopicSubscriptionTestCase() - throws JMSException, IOException, NamingException, AndesClientConfigurationException, - AndesClientException, LoginAuthenticationExceptionException, - XPathExpressionException, - AndesAdminServiceBrokerManagerAdminException, URISyntaxException, SAXException, - LogoutAuthenticationExceptionException, XMLStreamException, AutomationUtilException { - - int sendMessageCount = 1; - String topicName = "dlctenant1.com/tenantTopic"; - String subscriptionId = "dlctenant1.com/tenantSub"; - - // Get the automation context for the dlctenant1 - AutomationContext tenantContext = new AutomationContext("MB", "mb001", "dlctenant1", "dlctenantuser1"); - - LoginLogoutClient loginLogoutClient = new LoginLogoutClient(tenantContext); - String sessionCookie = loginLogoutClient.login(); - AndesAdminClient andesClient = new AndesAdminClient(super.backendURL, sessionCookie); - loginLogoutClient.logout(); - - // purge if there are any dlc messages in dlctenant1 user - andesClient.purgeQueue(tenantDlcQueueName); - - // Get the automation context for the superTenant - AutomationContext superTenantContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, - FrameworkConstants.SUPER_TENANT_ADMIN); - - LoginLogoutClient loginLogoutSuperTenant = new LoginLogoutClient(superTenantContext); - String SuperTenantSessionCookie = loginLogoutSuperTenant.login(); - AndesAdminClient andesAdminClient = new AndesAdminClient(super.backendURL, SuperTenantSessionCookie); - loginLogoutSuperTenant.logout(); - - // purge if there are any dlc messages in super tenant admin - andesClient.purgeQueue(superTenantDlcQueueName); - - - // Create a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "dlctenantuser1!dlctenant1.com", - "dlctenantuser1", ExchangeType.TOPIC, topicName); - // Add manual client acknowledgement in configuration - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setDurable(true, subscriptionId); - consumerConfig.setSubscriptionID(subscriptionId); - // Acknowledge a message only after 200 messages are received - consumerConfig.setAcknowledgeAfterEachMessageCount(200L); - consumerConfig.setPrintsPerMessageCount(sendMessageCount); - consumerConfig.setAsync(false); - - // Create consumer client with given consumerConfig - AndesClient consumerClient = new AndesClient(consumerConfig, true); - // Start consumer client - consumerClient.startClient(); - - // Create a publisher client configuration - AndesJMSPublisherClientConfiguration tenantPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "dlctenantuser1!dlctenant1.com", - "dlctenantuser1", ExchangeType.TOPIC, topicName); - tenantPublisherConfig.setNumberOfMessagesToSend(sendMessageCount); - tenantPublisherConfig.setPrintsPerMessageCount(sendMessageCount); - - // Create a publisher client with given configuration - AndesClient tenantPublisherClient = new AndesClient(tenantPublisherConfig, true); - // Start publisher client - tenantPublisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Get tenant's dlc queue - Queue tenantUserDlcQueue = andesClient.getDlcQueue(); - - // Get super tenant dlc queue - Queue superAdminDlcQueue = andesAdminClient.getDlcQueue(); - - // Evaluating - Assert.assertEquals(tenantUserDlcQueue.getMessageCount(), sendMessageCount, - "failure on tenant dlc durable topic subscription path"); - Assert.assertEquals(superAdminDlcQueue.getMessageCount(), 0, - "failure on super tenant dlc durable topic subscription path"); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantDeleteQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantDeleteQueueTestCase.java deleted file mode 100644 index 06d8342e..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TenantDeleteQueueTestCase.java +++ /dev/null @@ -1,127 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This tests if a tenant user can create queues and check if they can be deleted and recreate the same queue. - * See https://wso2.org/jira/browse/MB-1080 - */ -public class TenantDeleteQueueTestCase extends MBIntegrationBaseTest { - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * Following steps are done by the admin user - * 1. Create a queue. - * 2. Delete the queue. - * 3. Recreate a queue with same name. - * 4. Delete the queue. - * - * @throws IOException - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performCreateDeleteQueueAdminTestCase() throws Exception { - - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(automationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - String backEndUrl = automationContext.getContextUrls().getBackEndUrl(); - - AndesAdminClient andesAdminClient = new AndesAdminClient(backEndUrl, sessionCookie); - - automationContext.getContextTenant().getContextUser().getUserName(); - - andesAdminClient.createQueue("deleteAdminQueue"); - - andesAdminClient.deleteQueue("deleteAdminQueue"); - - AndesClientUtils.sleepForInterval(5000); - - andesAdminClient.createQueue("deleteAdminQueue"); - - andesAdminClient.deleteQueue("deleteAdminQueue"); - - loginLogoutClientForAdmin.logout(); - } - - /** - * Following steps are done by a tenant user - * 1. Create a queue. - * 2. Delete the queue. - * 3. Recreate a queue with same name. - * 4. Delete the queue. - * - * @throws IOException - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb") - public void performCreateDeleteQueueTenantTestCase() throws Exception { - AutomationContext userAutomationContext = new AutomationContext("MB", TestUserMode.TENANT_USER); - - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(userAutomationContext); - String sessionCookie = loginLogoutClientForAdmin.login(); - String backEndUrl = userAutomationContext.getContextUrls().getBackEndUrl(); - - AndesAdminClient andesAdminClient = new AndesAdminClient(backEndUrl, sessionCookie); - - userAutomationContext.getContextTenant().getContextUser().getUserName(); - - andesAdminClient.createQueue("deleteTenantQueue"); - - andesAdminClient.deleteQueue(userAutomationContext.getContextTenant().getDomain() + "/deleteTenantQueue"); - - AndesClientUtils.sleepForInterval(5000); - - andesAdminClient.createQueue("deleteTenantQueue"); - - andesAdminClient.deleteQueue(userAutomationContext.getContextTenant().getDomain() + "/deleteTenantQueue"); - - loginLogoutClientForAdmin.logout(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicMessageSequentialAndDuplicateTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicMessageSequentialAndDuplicateTestCase.java deleted file mode 100644 index 9e8af475..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicMessageSequentialAndDuplicateTestCase.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test class to test that message received for a topic are in order and also not duplicated. - */ -public class TopicMessageSequentialAndDuplicateTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 1000L; - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Send messages to a single topic and receive them. - * 2. Listen for some more time to see if there are duplicates coming. - * 3. Check if messages were received in order. - * 4. Check if messages have any duplicates. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicMessageSequentialAndDuplicateTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "singleTopicSequentialAndDuplicate"); - consumerConfig.setMaximumMessagesToReceived(SEND_COUNT); - consumerConfig.setPrintsPerMessageCount(SEND_COUNT/10L); - // file path to write received messages - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.TOPIC, "singleTopicSequentialAndDuplicate"); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT/10L); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), SEND_COUNT, "Message receiving failed."); - - Assert.assertTrue(consumerClient.checkIfMessagesAreInOrder(), "Messages are not in order."); - Assert.assertEquals(consumerClient.checkIfMessagesAreDuplicated().keySet().size(), 0, "Duplicate messages received."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicTestCase.java deleted file mode 100644 index e49e4778..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicTestCase.java +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test class for topics - */ -public class TopicTestCase extends MBIntegrationBaseTest { - - /** - * Initializes test case - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Creates consumer that consumes messages from "singleTopic" topic. - * 2. Publisher sends messages to topic "singleTopic". - * 3. Consumer receives all sent messages. - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single topic send-receive test case") - public void performSingleTopicSendReceiveTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - long sendCount = 1000L; - long expectedCount = 1000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "singleTopic"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "singleTopic"); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, - AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message send failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message " + - "receiving failed."); - } - - /** - * 1. Create 3 consumers. - * - "commontopic" topic for admin user. - * - "commontopic" topic for tenant1user1 - * - "commontopic" topic for tenant2user1 - * 2. Create 3 publishers. - * - "commontopic" topic for admin user. - * - "commontopic" topic for tenant1user1 - * - "commontopic" topic for tenant2user1 - * 3. Each consumer will receive the sent count. - * - * @throws AndesClientConfigurationException - * @throws CloneNotSupportedException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "") - public void performMultipleTenantTopicSendReceiveTestCase() - throws AndesClientConfigurationException, CloneNotSupportedException, JMSException, - NamingException, - IOException, AndesClientException, XPathExpressionException { - long sendCount = 100L; - long expectedCount = 100L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration adminConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "admin", "admin", ExchangeType.TOPIC, - "commontopic"); - adminConsumerConfig.setMaximumMessagesToReceived(expectedCount); - adminConsumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - adminConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration tenant1ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "tenant1user1!testtenant1.com", - "tenant1user1", ExchangeType.TOPIC, "testtenant1.com/commontopic"); - tenant1ConsumerConfig.setMaximumMessagesToReceived(expectedCount); - tenant1ConsumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - tenant1ConsumerConfig.setAsync(false); - - AndesJMSConsumerClientConfiguration tenant2ConsumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), "tenant2user1!testtenant2.com", - "tenant2user1", ExchangeType.TOPIC, "testtenant2.com/commontopic"); - tenant2ConsumerConfig.setMaximumMessagesToReceived(expectedCount); - tenant2ConsumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - tenant2ConsumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration adminPublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "admin", "admin", - ExchangeType.TOPIC, "commontopic"); - adminPublisherConfig.setNumberOfMessagesToSend(sendCount); - adminPublisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - AndesJMSPublisherClientConfiguration tenant1PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "tenant1user1!testtenant1.com", - "tenant1user1", ExchangeType.TOPIC, "testtenant1.com/commontopic"); - tenant1PublisherConfig.setNumberOfMessagesToSend(sendCount); - tenant1PublisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - AndesJMSPublisherClientConfiguration tenant2PublisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), "tenant2user1!testtenant2.com", - "tenant2user1", ExchangeType.TOPIC, "testtenant2.com/commontopic"); - tenant2PublisherConfig.setNumberOfMessagesToSend(sendCount); - tenant2PublisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient adminConsumerClient = new AndesClient(adminConsumerConfig, true); - AndesClient tenant1ConsumerClient = new AndesClient(tenant1ConsumerConfig, true); - AndesClient tenant2ConsumerClient = new AndesClient(tenant2ConsumerConfig, true); - - AndesClient adminPublisherClient = new AndesClient(adminPublisherConfig, true); - AndesClient tenant1PublisherClient = new AndesClient(tenant1PublisherConfig, true); - AndesClient tenant2PublisherClient = new AndesClient(tenant2PublisherConfig, true); - - adminConsumerClient.startClient(); - tenant1ConsumerClient.startClient(); - tenant2ConsumerClient.startClient(); - - adminPublisherClient.startClient(); - tenant1PublisherClient.startClient(); - tenant2PublisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(adminConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.waitForMessagesAndShutdown(tenant1ConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.waitForMessagesAndShutdown(tenant2ConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(adminPublisherClient.getSentMessageCount(), sendCount, "Sending " + - "failed for admin."); - Assert.assertEquals(tenant1PublisherClient.getSentMessageCount(), sendCount, "Sending " + - " failed for tenant 1."); - Assert.assertEquals(tenant2PublisherClient.getSentMessageCount(), sendCount, "Sending " + - " failed for tenant 2."); - - Assert.assertEquals(adminConsumerClient.getReceivedMessageCount(), expectedCount, - "Message receiving failed for admin."); - Assert.assertEquals(tenant1ConsumerClient.getReceivedMessageCount(), expectedCount, - "Message receiving failed for tenant 1."); - Assert.assertEquals(tenant2ConsumerClient.getReceivedMessageCount(), expectedCount, - "Message receiving failed for tenant 2."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicUserAuthorizationTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicUserAuthorizationTestCase.java deleted file mode 100644 index 31d0e7ce..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TopicUserAuthorizationTestCase.java +++ /dev/null @@ -1,671 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.core.TopicRolePermission; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.carbon.user.mgt.stub.types.carbon.FlaggedName; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class contains the test cases related to user authorization and topics - */ -public class TopicUserAuthorizationTestCase extends MBIntegrationBaseTest { - /** - * The logger used to log information, warnings, errors, etc. - */ - private static final Logger log = LoggerFactory.getLogger(TopicUserAuthorizationTestCase.class); - - /** - * Permission path for creating a topic - */ - private static final String ADD_TOPIC_PERMISSION = "/permission/admin/manage/topic/add"; - - /** - * Roles for the test case scenarios - */ - private static final String CREATE_PUB_SUB_TOPIC_ROLE = "create_pub_sub_topic_role"; - private static final String PUB_SUB_TOPIC_ROLE = "pub_sub_topic_role"; - private static final String NO_PERMISSION_TOPIC_ROLE = "no_permission_topic_role"; - - /** - * Prefix for internal roles for topics - */ - private static final String TOPIC_PREFIX = "T_"; - - private UserManagementClient userManagementClient; - - /** - * Initializes before a test method. Removes users of admin group if exists. Adds new roles with - * permissions. - * - * @throws Exception - */ - @BeforeMethod(alwaysRun = true) - public void initialize() throws Exception { - super.init(TestUserMode.SUPER_TENANT_ADMIN); - - String[] createPubSubUsers = new String[]{"authUser1", "authUser2"}; - String[] pubSubUsers = new String[]{"authUser3", "authUser4"}; - String[] noPermissionUsers = new String[]{"authUser5"}; - String[] allUsers = - new String[]{"authUser1", "authUser2", "authUser3", "authUser4", "authUser5"}; - - // Logging into user management as admin - userManagementClient = new UserManagementClient(backendURL, "admin", "admin"); - - // Removing admin permission for all users - userManagementClient.updateUserListOfRole(FrameworkConstants.ADMIN_ROLE, null, allUsers); - - // Adding roles along with users if roles does not exist. - userManagementClient - .addRole(CREATE_PUB_SUB_TOPIC_ROLE, createPubSubUsers, new String[]{ADD_TOPIC_PERMISSION}); - userManagementClient.addRole(PUB_SUB_TOPIC_ROLE, pubSubUsers, new String[]{}); - userManagementClient.addRole(NO_PERMISSION_TOPIC_ROLE, noPermissionUsers, new String[]{}); - } - - /** - * Cleans up the test case effects. Created roles and internal role related roles are created. - * - * @throws RemoteException - * @throws UserAdminUserAdminException - */ - @AfterMethod(alwaysRun = true) - public void cleanUp() throws RemoteException, UserAdminUserAdminException { - // Deleting roles of the users used in the test case - userManagementClient.deleteRole(CREATE_PUB_SUB_TOPIC_ROLE); - userManagementClient.deleteRole(PUB_SUB_TOPIC_ROLE); - userManagementClient.deleteRole(NO_PERMISSION_TOPIC_ROLE); - - // Deleting internal roles specific to topics - FlaggedName[] allRoles = userManagementClient.getAllRolesNames("*", 10); - for (FlaggedName allRole : allRoles) { - if (allRole.getItemName().contains(TOPIC_PREFIX)) { - userManagementClient.deleteRole(allRole.getItemName()); - } - } - } - - /** - * User creates a topic and then publishes and consumes messages. - * - * @throws IOException - * @throws UserAdminUserAdminException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - * @throws AndesClientConfigurationException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicPermissionTestCase() - throws IOException, UserAdminUserAdminException, XPathExpressionException, - NamingException, JMSException, AndesClientException, - AndesClientConfigurationException { - this.createPublishAndSubscribeFromUser("authUser1", "authTopic1"); - - } - - /** - * User1 and User2 exists in the same role where create topic permission is assigned. - * User1 creates a topic and then publishes and consumes messages. - * User2 tries to publish and consume messages. But unable to succeed. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = JMSException.class, - expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performTopicPermissionSameRoleUsersWithNoPublishOrConsume() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException { - this.createPublishAndSubscribeFromUser("authUser1", "authTopic2"); - this.createPublishAndSubscribeFromUser("authUser2", "authTopic2"); - } - - /** - * User1 and User2 exists in the same role where create topic permission is assigned. - * User1 creates a topic and then publishes and consumes messages. - * Add publish and consume permissions to the role in which User1 exists. - * User2 tries to publish and consume messages. User2 succeeds. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws AndesEventAdminServiceEventAdminException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicPermissionSameRoleUsersWithPublishOrConsume() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - AndesEventAdminServiceEventAdminException, XMLStreamException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, - AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - this.createPublishAndSubscribeFromUser("authUser1", "authTopic3"); - - // Adding publish subscribe permissions of 'authTopic3' to 'create_pub_sub_topic_role' role. - TopicRolePermission topicRolePermission = new TopicRolePermission(); - topicRolePermission.setRoleName(CREATE_PUB_SUB_TOPIC_ROLE); - topicRolePermission.setAllowedToSubscribe(true); - topicRolePermission.setAllowedToPublish(true); - this.updateTopicRoleConsumePublishPermission("authTopic3", topicRolePermission); - log.info("Consumer and publish permissions updated for " + CREATE_PUB_SUB_TOPIC_ROLE); - - this.createPublishAndSubscribeFromUser("authUser2", "authTopic3"); - } - - /** - * User1 and User2 exists in the same role where create topic permission is assigned. - * Admin(UI) creates a topic and then publishes and consumes messages. - * Add publish and consume permissions to the role in which User1 and User2 exists. - * User1 and User2 tries to publish and consume messages. User2 succeeds. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws AndesEventAdminServiceEventAdminException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicPermissionSameRoleUsersWithAdminCreated() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - AndesEventAdminServiceEventAdminException, XMLStreamException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, - AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - // "superAdmin" refers to the admin - this.createPublishAndSubscribeFromUser("superAdmin", "authTopic8"); - - // Adding publish subscribe permissions of 'authTopic8' to 'create_pub_sub_topic_role' role. - TopicRolePermission topicRolePermission = new TopicRolePermission(); - topicRolePermission.setRoleName(CREATE_PUB_SUB_TOPIC_ROLE); - topicRolePermission.setAllowedToSubscribe(true); - topicRolePermission.setAllowedToPublish(true); - this.updateTopicRoleConsumePublishPermission("authTopic8", topicRolePermission); - log.info("Consumer and publish permissions updated for " + CREATE_PUB_SUB_TOPIC_ROLE); - - this.createPublishAndSubscribeFromUser("authUser1", "authTopic8"); - this.createPublishAndSubscribeFromUser("authUser2", "authTopic8"); - } - - /** - * Admin add subscription to topic and subscribe. - * Admin unsubscribe from topic after receiving expected message count - * Delete topic admin created - * User1 create topic with the same name - * - * Expected results - User1 must be able to successfully create and subscribe to topic - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - * @throws XPathExpressionException - * @throws IOException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicPermissionWithAdminCreateAndUnscribe() - throws AndesClientConfigurationException, NamingException, JMSException, AndesClientException, - XPathExpressionException, IOException, AutomationUtilException, AndesEventAdminServiceEventAdminException { - // "superAdmin" refers to the admin - this.createPublishSubscribeAndUnsubscribeFromUser("superAdmin", "authTopic10"); - - // delete topic admin created - LoginLogoutClient loginLogoutClientForUser = new LoginLogoutClient(this.automationContext); - String sessionCookie = loginLogoutClientForUser.login(); - TopicAdminClient topicAdminClient = - new TopicAdminClient(this.backendURL, sessionCookie); - topicAdminClient.removeTopic("authTopic10"); - - // user1 subscribe with same topic name where previously created, unsubscribe and deleted by admin - this.createPublishSubscribeAndUnsubscribeFromUser("authUser1", "authTopic10"); - } - - /** - * User1 is in Role1 where there is topic creating permissions. - * User5 is in Role2 where there are no create topic permissions. - * User1 creates a topic and then publishes and consumes messages. - * User5 tries to publish and consume messages. User5 fails. - * - * @throws IOException - * @throws UserAdminUserAdminException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - * @throws AndesClientConfigurationException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = JMSException.class, - expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performTopicPermissionDifferentRoleUsersWithNoPermissions() - throws IOException, UserAdminUserAdminException, XPathExpressionException, - NamingException, JMSException, AndesClientException, - AndesClientConfigurationException { - this.createPublishAndSubscribeFromUser("authUser1", "authTopic4"); - this.createPublishAndSubscribeFromUser("authUser5", "authTopic4"); - } - - /** - * User1 exists in a role where create topic permission is assigned. - * User1 creates a topic and then publishes and consumes messages. - * User1 is removed from the role. - * User1 tries to publish and consume messages. User1 fails. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = JMSException.class, - expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performTopicPermissionSameUserRemovedFromRole() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException { - this.createPublishAndSubscribeFromUser("authUser1", "authTopic5"); - - // Removing authUser1 from create_pub_sub_topic_role and Internal/T_authTopic5 - userManagementClient - .addRemoveRolesOfUser("authUser1", new String[]{NO_PERMISSION_TOPIC_ROLE}, - new String[]{CREATE_PUB_SUB_TOPIC_ROLE, "Internal/T_authTopic5"}); - log.info("Removing authUser1 from " + CREATE_PUB_SUB_TOPIC_ROLE + " and Internal/T_authTopic5"); - - this.createPublishAndSubscribeFromUser("authUser1", "authTopic5"); - } - - /** - * User1 and User2 exists in the same role where create topic permission is assigned. - * User1 creates a topic and then publishes and consumes messages. - * Admin assigns publishing and consuming permissions to the role in which User1 and User2 are in. - * User1 is removed from the role. - * User2 tries to publish and consume messages. User2 succeeds. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws AndesEventAdminServiceEventAdminException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicPermissionSameRoleAssignedPermissions() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - AndesEventAdminServiceEventAdminException, XMLStreamException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, - AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - this.createPublishAndSubscribeFromUser("authUser1", "authTopic6"); - - // Adding publish subscribe permissions of 'authTopic6' to 'create_pub_sub_topic_role' role. - TopicRolePermission topicRolePermission = new TopicRolePermission(); - topicRolePermission.setRoleName(CREATE_PUB_SUB_TOPIC_ROLE); - topicRolePermission.setAllowedToSubscribe(true); - topicRolePermission.setAllowedToPublish(true); - updateTopicRoleConsumePublishPermission("authTopic6", topicRolePermission); - log.info("Consumer and publish permissions updated for " + CREATE_PUB_SUB_TOPIC_ROLE); - - // Removing authUser1 from create_pub_sub_topic_role and Internal/T_authTopic6 - userManagementClient - .addRemoveRolesOfUser("authUser1", new String[]{NO_PERMISSION_TOPIC_ROLE}, - new String[]{CREATE_PUB_SUB_TOPIC_ROLE, "Internal/T_authTopic6"}); - - this.createPublishAndSubscribeFromUser("authUser2", "authTopic6"); - - } - - /** - * User3 is in Role2 where there are no create topic permissions. - * Admin creates a topic and then publishes and consumes messages. - * Admin assigns publishing and consuming permissions to Role2. - * User3 tries to publish and consume messages. User3 succeeds. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws AndesEventAdminServiceEventAdminException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicPermissionDifferentRolesAssignedPermissions() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - AndesEventAdminServiceEventAdminException, XMLStreamException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, - AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - this.createPublishAndSubscribeFromUser("superAdmin", "authTopic7"); - - // Adding publish subscribe permissions of 'authTopic7' to 'pub_sub_topic_role' role. - TopicRolePermission topicRolePermission = new TopicRolePermission(); - topicRolePermission.setRoleName(PUB_SUB_TOPIC_ROLE); - topicRolePermission.setAllowedToSubscribe(true); - topicRolePermission.setAllowedToPublish(true); - this.updateTopicRoleConsumePublishPermission("authTopic7", topicRolePermission); - log.info("Consumer and publish permissions updated for " + PUB_SUB_TOPIC_ROLE); - - this.createPublishAndSubscribeFromUser("authUser3", "authTopic7"); - } - - /** - * User1 is in Role1 where there are create topic permissions. - * User3 is in Role2 where there are no create topic permissions. - * Admin creates a topic and then publishes and consumes messages. - * Admin assigns publishing and consuming permissions to Role2. - * User1 tries to publish and consume messages. User1 fails. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws UserAdminUserAdminException - * @throws LoginAuthenticationExceptionException - * @throws AndesEventAdminServiceEventAdminException - * @throws XMLStreamException - * @throws LogoutAuthenticationExceptionException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - @Test(groups = {"wso2.mb", "topic"}, expectedExceptions = JMSException.class, - expectedExceptionsMessageRegExp = ".*Permission denied.*") - public void performTopicPermissionDifferentRolesNoPermissions() - throws AndesClientConfigurationException, NamingException, IOException, - XPathExpressionException, AndesClientException, JMSException, - UserAdminUserAdminException, LoginAuthenticationExceptionException, - AndesEventAdminServiceEventAdminException, XMLStreamException, - LogoutAuthenticationExceptionException, URISyntaxException, SAXException, - AndesAdminServiceBrokerManagerAdminException, AutomationUtilException { - this.createPublishAndSubscribeFromUser("superAdmin", "authTopic9"); - - // Adding publish subscribe permissions of 'authTopic9' to 'pub_sub_topic_role' role. - TopicRolePermission topicRolePermission = new TopicRolePermission(); - topicRolePermission.setRoleName(PUB_SUB_TOPIC_ROLE); - topicRolePermission.setAllowedToSubscribe(true); - topicRolePermission.setAllowedToPublish(true); - this.updateTopicRoleConsumePublishPermission("authTopic9", topicRolePermission); - log.info("Consumer and publish permissions updated for " + PUB_SUB_TOPIC_ROLE); - - this.createPublishAndSubscribeFromUser("authUser1", "authTopic9"); - } - - /** - * Deleting the topics that were created. - * - * @throws XPathExpressionException - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XMLStreamException - * @throws URISyntaxException - * @throws SAXException - * @throws AndesEventAdminServiceEventAdminException - * @throws LogoutAuthenticationExceptionException - */ - @AfterClass() - public void cleanUpTopics() - throws XPathExpressionException, LoginAuthenticationExceptionException, IOException, - XMLStreamException, URISyntaxException, SAXException, - AndesEventAdminServiceEventAdminException, - LogoutAuthenticationExceptionException, AutomationUtilException { - LoginLogoutClient loginLogoutClientForUser = new LoginLogoutClient(this.automationContext); - String sessionCookie = loginLogoutClientForUser.login(); - TopicAdminClient topicAdminClient = - new TopicAdminClient(this.backendURL, sessionCookie); - topicAdminClient.removeTopic("authTopic1"); - topicAdminClient.removeTopic("authTopic2"); - topicAdminClient.removeTopic("authTopic3"); - topicAdminClient.removeTopic("authTopic4"); - topicAdminClient.removeTopic("authTopic5"); - topicAdminClient.removeTopic("authTopic6"); - topicAdminClient.removeTopic("authTopic7"); - topicAdminClient.removeTopic("authTopic8"); - topicAdminClient.removeTopic("authTopic9"); - - loginLogoutClientForUser.logout(); - - } - - /** - * Runs a test case where a consumer and publisher is created and published with a given user - * key from the automation.xml. - * - * @param userKey The user key mentioned in the automation.xml for a specific user. - * @param destinationName The destination name of the topic. - * @throws XPathExpressionException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws IOException - * @throws javax.jms.JMSException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientException - * @throws javax.naming.NamingException - */ - private void createPublishAndSubscribeFromUser(String userKey, String destinationName) - throws XPathExpressionException, AndesClientConfigurationException, IOException, - JMSException, AndesClientException, NamingException { - long sendCount = 10L; - long expectedCount = 10L; - - AutomationContext userAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, userKey); - User contextUser = userAutomationContext.getContextTenant().getContextUser(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration - consumerConfig = - new AndesJMSConsumerClientConfiguration( getAMQPPort(), - contextUser.getUserNameWithoutDomain(), contextUser.getPassword(), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration( getAMQPPort(), - contextUser.getUserNameWithoutDomain(), contextUser.getPassword(), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending " + - "failed for user : " + contextUser.getUserNameWithoutDomain()); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message " + - "receiving failed for user : " + contextUser.getUserNameWithoutDomain()); - } - - /** - * Runs a test case where a consumer and publisher is created and published with a given user - * key from the automation.xml. Subscriber get unsubscribe after receiving expected message count. - * - * @param userKey The user key mentioned in the automation.xml for a specific user. - * @param destinationName The destination name of the topic. - * @throws XPathExpressionException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws IOException - * @throws javax.jms.JMSException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientException - * @throws javax.naming.NamingException - */ - private void createPublishSubscribeAndUnsubscribeFromUser(String userKey, String destinationName) - throws XPathExpressionException, AndesClientConfigurationException, IOException, - JMSException, AndesClientException, NamingException { - long sendCount = 10L; - long expectedCount = 10L; - - AutomationContext userAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, userKey); - User contextUser = userAutomationContext.getContextTenant().getContextUser(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration - consumerConfig = - new AndesJMSConsumerClientConfiguration( getAMQPPort(), - contextUser.getUserNameWithoutDomain(), contextUser.getPassword(), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setUnSubscribeAfterEachMessageCount(expectedCount); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration( getAMQPPort(), - contextUser.getUserNameWithoutDomain(), contextUser.getPassword(), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending " + - "failed for user : " + contextUser.getUserNameWithoutDomain()); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message " + - "receiving failed for user : " + contextUser.getUserNameWithoutDomain()); - } - - /** - * Assigning consuming publishing permissions of a topic to a role. - * - * @param topicName The topic name - * @param permissions New permissions for the role. can be publish, consume. - * @throws XPathExpressionException - * @throws IOException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws LogoutAuthenticationExceptionException - * @throws UserAdminUserAdminException - */ - public void updateTopicRoleConsumePublishPermission(String topicName, - TopicRolePermission permissions) - throws XPathExpressionException, IOException, URISyntaxException, SAXException, - XMLStreamException, LoginAuthenticationExceptionException, - AndesAdminServiceBrokerManagerAdminException, - LogoutAuthenticationExceptionException, - UserAdminUserAdminException, - AndesEventAdminServiceEventAdminException, AutomationUtilException { - - LoginLogoutClient loginLogoutClientForUser = new LoginLogoutClient(automationContext); - String sessionCookie = loginLogoutClientForUser.login(); - TopicAdminClient topicAdminClient = - new TopicAdminClient(backendURL, sessionCookie); - topicAdminClient.updatePermissionForTopic(topicName, permissions); - loginLogoutClientForUser.logout(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TransactedAcknowledgementsTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TransactedAcknowledgementsTestCase.java deleted file mode 100644 index 65dd3ace..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TransactedAcknowledgementsTestCase.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class includes test cases to test transacted acknowledgements modes for queues - */ -public class TransactedAcknowledgementsTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 10L; - - /** - * Message count expected - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Prepare environment for tests - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Start a queue receiver with transacted sessions - * 2. Send 10 messages - * 3. After 10 messages are received rollback session - * 4. After 50 messages received commit the session and close subscriber - * 5. Analyse and see if each message is duplicated five times - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single queue send-receive test case with transactions") - public void transactedAcknowledgements() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, XPathExpressionException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "transactedAckTestQueue"); - consumerConfig.setMaximumMessagesToReceived(100L); - consumerConfig.setRunningDelay(100L); // Setting a delay publishing each message - consumerConfig.setRollbackAfterEachMessageCount(10); // Roll back session after given message count - consumerConfig.setCommitAfterEachMessageCount(30); // Committing sessions after given message count - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.SESSION_TRANSACTED); // Use session_transacted acknowledgement mode - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); // Write received messages to file - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), - ExchangeType.QUEUE, "transactedAckTestQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Messaging sending failed"); - - //If received messages less than expected number wait until received again - //Get rollback status , check message id of next message of roll backed message equal to first message - long duplicateCount = consumerClient.getTotalNumberOfDuplicates(); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), (EXPECTED_COUNT + duplicateCount), "Total number of received message should be equal sum of expected and duplicate message count "); - Assert.assertTrue(consumerClient.transactedOperation(10L), "After rollback next message need to equal first message of batch"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TransactionalPublishingTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TransactionalPublishingTestCase.java deleted file mode 100644 index f2e8aff1..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/functional/TransactionalPublishingTestCase.java +++ /dev/null @@ -1,537 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.functional; - -import org.testng.Assert; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.client.JMSAMQException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.AndesJMSPublisher; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.jms.Message; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -/** - * Publisher based transaction functionality is tested with this test cases - * Basic publisher transaction functionality of enqueue a message, commit and rollback is - * tested. In addition max batch size limit for a transaction is tested - */ -public class TransactionalPublishingTestCase extends MBIntegrationBaseTest { - - /** - * Initializes the test case - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - init(TestUserMode.SUPER_TENANT_ADMIN); - } - - /** - * test transactional commit behavior - * - * - Create transactional publisher and a non transactional subscriber - * - Enqueue message - * - Test whether subscriber receives a message (Must not receive a message) - * - Rollback - * - Enqueue a different message - * - Commit - * - Test whether the subscriber received the message (Must receive) - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws InterruptedException - */ - @Test(groups = {"wso2.mb", "queue", "transaction" }, description = "Send message and check whether message is received, " + - "and commit and check whether message is received") - public void enqueueAndCheckCommitAndCheckTestCase() throws IOException, JMSException, - AndesClientException, - NamingException, - AndesClientConfigurationException, - InterruptedException, - XPathExpressionException { - - int expectedCount = 1; - int expectedBeforeCommit = 0; - String queueName = "Transactional-enqueueAndCheckCommitAndCheckTestCase"; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setTransactionalSession(true); - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig, true); - AndesJMSPublisher publisher = publisherClient1.getPublishers().get(0); - - try { - Message message = publisher.getSession().createTextMessage("transactional message"); - publisher.getSender().send(message); - - TimeUnit.MILLISECONDS.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedBeforeCommit, - "Message received! send messages are not committed hence no message should be received"); - - publisher.getSession().commit(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, - "Expected message count not received after commit"); - } finally { - publisherClient1.stopClient(); - } - - } - - /** - * Test publisher transaction rollback functionality - * - * - Create a transactional publisher and a non transactional subscriber - * - Enqueue a message - * - Test whether subscriber receives a message (Must not receive a message) - * - Rollback - * - Enqueue a different message - * - Commit - * - Test whether the subscriber received the message (Must receive) - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws InterruptedException - */ - @Test(groups = {"wso2.mb", "queue", "transaction" }, description = "Test for rollback functionality") - public void enqueueAndRollbackEnqueueAndCommitTestCase() - throws AndesClientConfigurationException, - IOException, JMSException, AndesClientException, NamingException, - InterruptedException, XPathExpressionException { - - int expectedCount = 1; - int expectedBeforeCommit = 0; - String transactionMessage = "transactional message"; - String queueName = "Transactional-enqueueAndRollbackEnqueueAndCommitTestCase"; - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig - .setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); // writing received messages. - consumerConfig.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setTransactionalSession(true); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - AndesJMSPublisher publisher = publisherClient.getPublishers().get(0); - - try { - Message message = publisher.getSession().createTextMessage("rollback message"); - publisher.getSender().send(message); - - TimeUnit.MILLISECONDS.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedBeforeCommit, - "Message received! send messages are not committed hence no message should be received"); - - publisher.getSession().rollback(); - - message = publisher.getSession().createTextMessage(transactionMessage); - publisher.getSender().send(message); - publisher.getSession().commit(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - // Reading received message content - String outputContent; - - BufferedReader inputFileReader = - new BufferedReader(new FileReader(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES)); - outputContent = inputFileReader.readLine(); - inputFileReader.close(); - // Evaluating - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, - "Expected message count not received after commit"); - Assert.assertEquals(outputContent, transactionMessage, "Message content has been modified."); - } finally { - publisherClient.stopClient(); - } - } - - /** - * Multiple publishing is tested. Multiple clients publishing to different queues - * - * - Create two transactional publishers and a two non transactional subscribers for two queues - * - Enqueue both message - * - Test whether subscribers receives a message (Must not receive a message) - * - Commit first publisher - * - Test whether the subscribers received the message (Subscriber1 must receive. Subscriber2 mustn't) - * - Commit second publisher - * - Test whether the subscribers2 received the message (Subscriber2 must receive) - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws InterruptedException - */ - @Test(groups = {"wso2.mb", "queue", "transaction" }, description = "Test transactions with multiple publishers") - public void multiplePublisherEnqueueAndCheckCommitAndCheckTestCase() - throws AndesClientConfigurationException, - IOException, JMSException, AndesClientException, NamingException, - InterruptedException, XPathExpressionException { - - int expectedCount = 1; - int expectedBeforeCommit = 0; - String queueName1 = "Transactional-multiplePublisherEnqueueAndCheckCommitAndCheck-1"; - String queueName2 = "Transactional-multiplePublisherEnqueueAndCheckCommitAndCheck-2"; - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName1); - consumerConfig1.setMaximumMessagesToReceived(expectedCount); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName2); - consumerConfig2.setMaximumMessagesToReceived(expectedCount); - consumerConfig2.setAsync(false); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName1); - publisherConfig1.setTransactionalSession(true); - - AndesJMSPublisherClientConfiguration publisherConfig2 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName2); - publisherConfig2.setTransactionalSession(true); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient1.startClient(); - consumerClient2.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - AndesJMSPublisher publisher1 = publisherClient1.getPublishers().get(0); - AndesJMSPublisher publisher2 = publisherClient2.getPublishers().get(0); - - try { - Message message1 = publisher1.getSession().createTextMessage("message1"); - Message message2 = publisher2.getSession().createTextMessage("message2"); - - publisher1.getSender().send(message1); - publisher2.getSender().send(message2); - - TimeUnit.MILLISECONDS.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedBeforeCommit, - "Message received for " + queueName1 + " ! send messages are not committed hence " + - "no message should be received"); - - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedBeforeCommit, - "Message received for " + queueName2 + " ! send messages are not committed hence " + - "no message should be received"); - - publisher1.getSession().commit(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - // Test for consumer 1 - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, - "Expected message count not received after commit"); - - // Test for consumer 2 - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedBeforeCommit, - "Message received for " + queueName2 + " ! send messages are not committed hence " + - "no message should be received"); - - // commit for client two - publisher2.getSession().commit(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - // Test for consumer 2 - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedCount, - "Expected message count not received after commit"); - } finally { - publisherClient1.stopClient(); - publisherClient2.stopClient(); - } - } - - /** - * Test rollback functionality with multiple publisher scenario - * - * - Create a two transactional publishers and a non transactional subscriber - * - Enqueue a message to each publisher - * - Test whether subscriber receives messages (Must not receive a message) - * - Rollback - * - Enqueue another message for each publisher - * - Commit for first publisher - * - Test whether the subscriber received the message sent by publisher 1 (Must receive) - * - Commit for second publisher - * - Test whether the subscriber received the message sent by publisher 2 (Must receive) - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws InterruptedException - */ - @Test(groups = {"wso2.mb", "queue", "transaction" }, - description = "Test rollback functionality with multiple publishers") - public void multiplePublisherEnqueueAndRollbackEnqueueAndCommitTestCase() - throws AndesClientConfigurationException, - IOException, JMSException, AndesClientException, NamingException, - InterruptedException, XPathExpressionException { - - int expectedCountAfterPub1Commit = 1; - int expectedCountAfterPub2Commit = 2; - int expectedBeforeCommit = 0; - int waitForMessages = 2; - String queueName = "Transactional-multiplePublisherEnqueueAndRollbackEnqueueAndCommit"; - String transactionMessage1 = "transactional message 1"; - String transactionMessage2 = "transactional message 2"; - - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(waitForMessages); - consumerConfig. - setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); // writing received messages. - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig1.setTransactionalSession(true); - - AndesJMSPublisherClientConfiguration publisherConfig2 = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig2.setTransactionalSession(true); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - AndesJMSPublisher publisher1 = publisherClient1.getPublishers().get(0); - AndesJMSPublisher publisher2 = publisherClient2.getPublishers().get(0); - - BufferedReader inputFileReader = - new BufferedReader(new FileReader(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES)); - try { - Message message1 = publisher1.getSession().createTextMessage("rollback message 1"); - Message message2 = publisher2.getSession().createTextMessage("rollback message 2"); - - publisher1.getSender().send(message1); - publisher2.getSender().send(message2); - - TimeUnit.MILLISECONDS.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedBeforeCommit, - "Message received for " + queueName + " ! send messages are not committed hence " + - "no message should be received"); - - publisher1.getSession().rollback(); - - message1 = publisher1.getSession().createTextMessage(transactionMessage1); - publisher1.getSender().send(message1); - publisher1.getSession().commit(); - - TimeUnit.MILLISECONDS.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.flushPrintWriters(); - // Reading received message content - String outputContent; - outputContent = inputFileReader.readLine(); - - // Test whether message received - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCountAfterPub1Commit, - "Expected message count not received after commit"); - - Assert.assertEquals(outputContent, transactionMessage1, "Message content has been modified."); - - // Commit for client two after rollback - publisher2.getSession().rollback(); - message2 = publisher2.getSession().createTextMessage(transactionMessage2); - publisher2.getSender().send(message2); - publisher2.getSession().commit(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.flushPrintWriters(); - - outputContent = inputFileReader.readLine(); - - // Test for consumer 1 - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCountAfterPub2Commit, - "Expected message count not received after commit"); - - Assert.assertEquals(outputContent, transactionMessage2, "Message content has been modified."); - } finally { - inputFileReader.close(); - publisherClient1.stopClient(); - publisherClient2.stopClient(); - } - - } - - /** - * Test for a big batch size with content. This should throw an { @link JMSAMQException } - * We are limiting the total content stored in memory for a transaction to avoid unwanted OOM issues - * - * Create a producer and a subscriber for the same queue - * enqueue 20 1MB messages - * commit (This should throw and { @link JMSAMQException }) - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - @Test(groups = {"wso2.mb", "queue", "transaction" }, - description = "Test the commit batch size limit check functionality", - expectedExceptions = JMSException.class) - public void exceedCommitBatchSizeTest() throws IOException, JMSException, AndesClientException, - NamingException, - AndesClientConfigurationException, - XPathExpressionException { - - String queueName = "Transactional-exceedCommitBatchSizeTest"; - int messageSize = 1024 * 1024; - int messageCount = 20; - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setTransactionalSession(true); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(messageCount); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig, true); - AndesJMSPublisher publisher1 = publisherClient1.getPublishers().get(0); - - // Reading message content - char[] inputContent = new char[messageSize]; - BufferedReader inputFileReader = - new BufferedReader(new FileReader(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB)); - try { - inputFileReader.read(inputContent); - inputFileReader.close(); - - Message message = publisher1.getSession().createTextMessage(new String(inputContent)); - - for (int i = 0; i < messageCount; i++) { - publisher1.getSender().send(message); - } - - publisher1.getSession().commit(); - } finally { - publisherClient1.stopClient(); - consumerClient1.stopClient(); - } - } - - /** - * Create transactional publisher and commit for a topic with no subscribers. MB should drop the messages but the - * commit request should be successful. - * - * Test for a fix done for https://wso2.org/jira/browse/MB-1629 - * - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue", "transaction" },description = "Test topic publisher without subscribers") - public void topicPublishingWithoutSubsribers() throws XPathExpressionException, IOException, AndesClientException, - NamingException, JMSException { - - String topicName = "Transactional-pubwithoutSub"; - int messageCount = 20; - String messageStr = "Transactional-pubwithoutSub Message"; - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - publisherConfig.setTransactionalSession(true); - - AndesClient publisherClient1 = new AndesClient(publisherConfig, true); - AndesJMSPublisher publisher1 = publisherClient1.getPublishers().get(0); - - try { - - Message message = publisher1.getSession().createTextMessage(messageStr); - - for (int i = 0; i < messageCount; i++) { - publisher1.getSender().send(message); - } - - publisher1.getSession().commit(); - - } finally { - publisherClient1.stopClient(); - } - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/CreateRemoveQueueSubscriptionTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/CreateRemoveQueueSubscriptionTestCase.java deleted file mode 100644 index 8d752de8..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/CreateRemoveQueueSubscriptionTestCase.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.annotations.Test; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import java.io.IOException; - -/** - * Test case to create and remove a topic subscriber. - */ -public class CreateRemoveQueueSubscriptionTestCase { - - /** - * Creating and removing of a topic subscription - * - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientConfigurationException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void testCreateRemoveSubscription() - throws JMSException, NamingException, IOException, AndesClientConfigurationException, - AndesClientException { - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "TestQueue"); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - - consumerClient.stopClient(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/CreateRemoveTopicSubscriptionTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/CreateRemoveTopicSubscriptionTestCase.java deleted file mode 100644 index a3a674ec..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/CreateRemoveTopicSubscriptionTestCase.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.annotations.Test; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import java.io.IOException; - -/** - * Test case to create and remove a topic subscriber. - */ -public class CreateRemoveTopicSubscriptionTestCase { - - /** - * Creating and removing of a topic subscription - * - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientConfigurationException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void testCreateRemoveSubscription() - throws NamingException, JMSException, IOException, AndesClientConfigurationException, - AndesClientException { - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.TOPIC, "TestTopic"); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - - consumerClient.stopClient(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/ManySubscribersTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/ManySubscribersTestCase.java deleted file mode 100644 index 60a52c9d..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/ManySubscribersTestCase.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * This class contains tests for receiving messages through a large number of subscribers. - */ -public class ManySubscribersTestCase extends MBIntegrationBaseTest { - - /** - * Message count to send - */ - private static final long SEND_COUNT = 100000L; - - /** - * Expected message count - */ - private static final long EXPECTED_COUNT = SEND_COUNT; - - /** - * Number of subscribers - */ - private static final int NUMBER_OF_SUBSCRIBERS = 1000; - - /** - * Number of publishers - */ - private static final int NUMBER_OF_PUBLISHERS = 1; - - /** - * Initialize the test as super tenant user. - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Test message sending to 1000 subscribers at the same time. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Message content validation test case") - public void performMillionMessageManyConsumersTestCase() - throws Exception { - - try { - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "singleQueueMillion"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating a consumer client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "singleQueueMillion"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - AndesClient consumerClient = - new AndesClient(consumerConfig, NUMBER_OF_SUBSCRIBERS, true); - consumerClient.setStartDelay(100L); // Use a starting delay between consumers - consumerClient.startClient(); - - AndesClient publisherClient = - new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT * NUMBER_OF_SUBSCRIBERS, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT * NUMBER_OF_SUBSCRIBERS, "Message receiving failed."); - } catch (OutOfMemoryError e) { - restartServer(); - } - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleQueueTestCase.java deleted file mode 100644 index 49142f90..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleQueueTestCase.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Test class for multiple queues running parallel for consumers and publishers. - */ -public class MultiThreadedMultipleQueueTestCase extends MBIntegrationBaseTest { - private static final long SEND_COUNT = 30000L; - private static final long ADDITIONAL = 30L; - private static final long EXPECTED_COUNT = SEND_COUNT + ADDITIONAL; - private static final int NUMBER_OF_SUBSCRIBERS = 45; - private static final int NUMBER_OF_PUBLISHERS = 45; - private static final String[] DESTINATIONS = {"Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", "Q12", "Q13", "Q14", "Q15"}; - private List consumers = new ArrayList(); - private List publishers = new ArrayList(); - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Define 15 queues. - * 2. Send 30000 messages to 15 queues (2000 to each) by 45 threads. - * 3. Receive messages from 15 queues by 45 threads. - * 4. Verify that all messages are received and no more messages are received. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performMultiThreadedMultipleQueueTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - - for (String DESTINATION : DESTINATIONS) { - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, DESTINATION); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating consumer clients - AndesClient newConsumer = new AndesClient(consumerConfig, NUMBER_OF_SUBSCRIBERS / DESTINATIONS.length, true); - newConsumer.setStartDelay(100L); - consumers.add(newConsumer); - } - - for (String DESTINATION : DESTINATIONS) { - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, DESTINATION); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating publisher clients - AndesClient newPublisher = new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS / DESTINATIONS.length, true); - newPublisher.setStartDelay(100L); - publishers.add(newPublisher); - } - - // Starting clients - for (AndesClient consumer : consumers) { - consumer.startClient(); - } - - for (AndesClient publisher : publishers) { - publisher.startClient(); - } - - for (AndesClient consumer : consumers) { - AndesClientUtils.waitForMessagesAndShutdown(consumer, AndesClientConstants.DEFAULT_RUN_TIME * 2L); - } - - for (AndesClient publisher : publishers) { - Assert.assertEquals(publisher.getSentMessageCount(), SEND_COUNT * (NUMBER_OF_PUBLISHERS / DESTINATIONS.length), "Message sending failed"); - } - - // Evaluating - long totalMessagesReceived = 0L; - for (AndesClient consumer : consumers) { - Assert.assertEquals(consumer.getReceivedMessageCount(), EXPECTED_COUNT * (NUMBER_OF_SUBSCRIBERS / DESTINATIONS.length), "Message receiving failed."); - totalMessagesReceived = totalMessagesReceived + consumer.getReceivedMessageCount(); - } - - Assert.assertEquals(totalMessagesReceived, EXPECTED_COUNT - ADDITIONAL, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleQueueTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleQueueTopicTestCase.java deleted file mode 100644 index 76a89743..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleQueueTopicTestCase.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Test class for multiple queues and topics running parallel for consumers and publishers. - */ -public class MultiThreadedMultipleQueueTopicTestCase extends MBIntegrationBaseTest { - private static final long SEND_COUNT = 30000L; - private static final long ADDITIONAL = 30L; - private static final long EXPECTED_COUNT = SEND_COUNT + ADDITIONAL; - private static final int QUEUE_NUMBER_OF_SUBSCRIBERS = 45; - private static final int QUEUE_NUMBER_OF_PUBLISHERS = 45; - private static final int TOPIC_NUMBER_OF_SUBSCRIBERS = 45; - private static final int TOPIC_NUMBER_OF_PUBLISHERS = 15; - private static final String[] QUEUE_DESTINATIONS = - {"Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9", "Q10", "Q11", "Q12", "Q13", "Q14", "Q15"}; - private static final String[] TOPIC_DESTINATIONS = - {"T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15"}; - private List consumers = new ArrayList(); - private List publishers = new ArrayList(); - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Define 15 queues and topic. - * 2. Send 30000 messages to 15 queues (2000 to each) by 45 threads. - * 2. Send 30000 messages to 15 topic (2000 to each) by 15 threads. - * 3. Receive messages from 15 queues by 45 threads. - * 3. Receive messages from 15 topics by 45 threads. - * 4. Verify that all messages are received and no more messages are received. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb"}) - public void performMultiThreadedMultipleQueueTopicTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - - // Creating consumers - for (String queueDestination : QUEUE_DESTINATIONS) { - // Creating a queue consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, queueDestination); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating client - consumers - .add(new AndesClient(consumerConfig, QUEUE_NUMBER_OF_SUBSCRIBERS / QUEUE_DESTINATIONS.length, true)); - } - - for (String topicDestination : TOPIC_DESTINATIONS) { - // Creating a topic consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.TOPIC, topicDestination); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating client - consumers - .add(new AndesClient(consumerConfig, TOPIC_NUMBER_OF_SUBSCRIBERS / TOPIC_DESTINATIONS.length, true)); - } - - // Creating publishers - for (String queueDestinations : QUEUE_DESTINATIONS) { - // Creating a queue publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, queueDestinations); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating client - publishers - .add(new AndesClient(publisherConfig, QUEUE_NUMBER_OF_PUBLISHERS / QUEUE_DESTINATIONS.length, true)); - } - - for (String topicDestination : TOPIC_DESTINATIONS) { - // Creating a topic publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.TOPIC, topicDestination); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating client - publishers - .add(new AndesClient(publisherConfig, TOPIC_NUMBER_OF_PUBLISHERS / TOPIC_DESTINATIONS.length, true)); - } - - // Starting up clients - for (AndesClient consumer : consumers) { - consumer.startClient(); - } - - for (AndesClient publisher : publishers) { - publisher.startClient(); - } - - for (AndesClient consumer : consumers) { - AndesClientUtils - .waitForMessagesAndShutdown(consumer, AndesClientConstants.DEFAULT_RUN_TIME * 3L); - } - - // Evaluating - for (AndesClient publisher : publishers) { - if (ExchangeType.QUEUE == publisher.getPublishers().get(0).getConfig().getExchangeType()) { - Assert.assertEquals(publisher - .getSentMessageCount(), SEND_COUNT * (QUEUE_NUMBER_OF_PUBLISHERS / QUEUE_DESTINATIONS.length), "Message sending failed for queues for " + publisher - .getPublishers().get(0).getConfig().getDestinationName()); - } else if (ExchangeType.TOPIC == publisher.getPublishers().get(0).getConfig().getExchangeType()) { - Assert.assertEquals(publisher - .getSentMessageCount(), SEND_COUNT * (TOPIC_NUMBER_OF_PUBLISHERS / TOPIC_DESTINATIONS.length), "Message sending failed for topics " + publisher - .getPublishers().get(0).getConfig().getDestinationName()); - } - } - - long totalQueueMessagesReceived = 0L; - long totalTopicMessagesReceived = 0L; - for (AndesClient consumer : consumers) { - if (ExchangeType.QUEUE == consumer.getConsumers().get(0).getConfig().getExchangeType()) { - Assert.assertEquals(consumer.getReceivedMessageCount(), (EXPECTED_COUNT - ADDITIONAL) * (TOPIC_NUMBER_OF_SUBSCRIBERS / QUEUE_DESTINATIONS.length), "Message receiving failed " + consumer - .getConsumers().get(0).getConfig().getDestinationName()); - totalQueueMessagesReceived = - totalQueueMessagesReceived + consumer.getReceivedMessageCount(); - } else if (ExchangeType.TOPIC == consumer.getConsumers().get(0).getConfig().getExchangeType()) { - Assert.assertEquals(consumer.getReceivedMessageCount(), EXPECTED_COUNT - ADDITIONAL, "Message receiving failed " + consumer - .getConsumers().get(0).getConfig().getDestinationName()); - totalTopicMessagesReceived = - totalTopicMessagesReceived + consumer.getReceivedMessageCount(); - } - } - - Assert.assertEquals(totalQueueMessagesReceived, SEND_COUNT * (QUEUE_NUMBER_OF_SUBSCRIBERS / QUEUE_DESTINATIONS.length), "Message receiving failed."); - Assert.assertEquals(totalQueueMessagesReceived, (EXPECTED_COUNT - ADDITIONAL) * TOPIC_NUMBER_OF_SUBSCRIBERS / TOPIC_DESTINATIONS.length, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleTopicTestCase.java deleted file mode 100644 index d5ff7e8b..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedMultipleTopicTestCase.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; - -/** - * Test class for multiple topics running parallel for consumers and publishers. - */ -public class MultiThreadedMultipleTopicTestCase extends MBIntegrationBaseTest { - private static final long SEND_COUNT = 30000L; - private static final long ADDITIONAL = 30L; - private static final long EXPECTED_COUNT = SEND_COUNT + ADDITIONAL; - private static final int NUMBER_OF_SUBSCRIBERS = 45; - private static final int NUMBER_OF_PUBLISHERS = 15; - private static final String[] DESTINATIONS = {"T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12", "T13", "T14", "T15"}; - private List consumers = new ArrayList(); - private List publishers = new ArrayList(); - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Create 45 topic subscribers (there will be three for each topic) thus there will be 15 - * topics. - * 2. Send 30000 messages , 2000 for each topic. - * 3. Verify that all messages are received and no more messages are received. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performMultiThreadedMultipleTopicTestCase() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException { - for (String DESTINATION : DESTINATIONS) { - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.TOPIC, DESTINATION); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating consumer - consumers.add(new AndesClient(consumerConfig, NUMBER_OF_SUBSCRIBERS / DESTINATIONS.length, true)); - } - - for (String DESTINATION : DESTINATIONS) { - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(ExchangeType.TOPIC, DESTINATION); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating publisher - publishers.add(new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS / DESTINATIONS.length, true)); - } - - // Starting up clients - for (AndesClient consumer : consumers) { - consumer.startClient(); - } - - for (AndesClient publisher : publishers) { - publisher.startClient(); - } - - for (AndesClient consumer : consumers) { - AndesClientUtils.waitForMessagesAndShutdown(consumer, AndesClientConstants.DEFAULT_RUN_TIME * 2L); - } - - // Evaluating - for (AndesClient publisher : publishers) { - Assert.assertEquals(publisher.getSentMessageCount(), SEND_COUNT * (NUMBER_OF_PUBLISHERS / DESTINATIONS.length), "Message sending failed"); - } - - long totalMessagesReceived = 0L; - for (AndesClient consumer : consumers) { - Assert.assertEquals(consumer.getReceivedMessageCount(), EXPECTED_COUNT * (NUMBER_OF_SUBSCRIBERS / DESTINATIONS.length), "Message receiving failed."); - totalMessagesReceived = totalMessagesReceived + consumer.getReceivedMessageCount(); - } - - Assert.assertEquals(totalMessagesReceived, EXPECTED_COUNT - ADDITIONAL, "Message receiving failed."); - - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedQueueTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedQueueTestCase.java deleted file mode 100644 index 51fe4de0..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedQueueTestCase.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test class for multiple publishers running parallel for queues. - */ -public class MultiThreadedQueueTestCase extends MBIntegrationBaseTest { - private static final long SEND_COUNT = 10000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NUMBER_OF_SUBSCRIBERS = 7; - private static final int NUMBER_OF_PUBLISHERS = 7; - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send 10,000 messages collaboratively by 7 threads and receive collaboratively by 7 threads - * and see if all messages are received. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", - description = "Multiple queue senders - multiple queue receivers test case") - public void performMultiThreadedQueueTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "multiThreadQueue"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "multiThreadQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, NUMBER_OF_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT * NUMBER_OF_PUBLISHERS, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), EXPECTED_COUNT * NUMBER_OF_SUBSCRIBERS, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedTopicTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedTopicTestCase.java deleted file mode 100644 index 2c352431..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/MultiThreadedTopicTestCase.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test class for multiple publishers running parallel for queues. - */ -public class MultiThreadedTopicTestCase extends MBIntegrationBaseTest{ - private static final long SEND_COUNT = 2000; - private static final int NUMBER_OF_SUBSCRIBERS = 20; - private static final int NUMBER_OF_PUBLISHERS = 10; - private static final long EXPECTED_COUNT = SEND_COUNT * NUMBER_OF_SUBSCRIBERS; - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Send 2000 messages to a topic by 10 threads - * 2. At the same time create 20 subscribers and collaboratively receive 2000 X 20 messages - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", - description = "Multiple topic publishers - multiple topic receivers test case") - public void performMultiThreadedTopicTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.TOPIC, "multiThreadTopic"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(ExchangeType.TOPIC, "multiThreadTopic"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, NUMBER_OF_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT * NUMBER_OF_PUBLISHERS, "Message sending failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), SEND_COUNT * NUMBER_OF_SUBSCRIBERS, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAckMixTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAckMixTestCase.java deleted file mode 100644 index 72ea7e6a..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAckMixTestCase.java +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Load test for standalone MB with consumers having auto and client ack modes when receiving messages - */ -public class QueueAckMixTestCase extends MBIntegrationBaseTest { - private static final long SEND_COUNT = 100000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NUMBER_OF_SUBSCRIBERS = 7; - private static final int NUMBER_OF_PUBLISHERS = 7; - private static final long NUMBER_OF_RETURNED_MESSAGES = SEND_COUNT / 10L; - private static final int NUMBER_OF_CLIENT_ACK_SUBSCRIBERS = 1; - private static final int NUMBER_OF_AUTO_ACK_SUBSCRIBERS = NUMBER_OF_SUBSCRIBERS - NUMBER_OF_CLIENT_ACK_SUBSCRIBERS; - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send million messages and receive them via AUTO_ACKNOWLEDGE subscribers and CLIENT_ACKNOWLEDGE subscribers and - * check if AUTO_ACKNOWLEDGE subscribers receive all the messages. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Send million messages and Receive them via AUTO_ACKNOWLEDGE subscribers " + - "and CLIENT_ACKNOWLEDGE", enabled = true) - public void performMillionMessageTenPercentReturnTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "MillionTenPercentAckMixReturnQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); // Consumer uses auto acknowledge mode - consumerConfig.setAcknowledgeAfterEachMessageCount(200); // Acknowledging messages only after message count - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - AndesJMSConsumerClientConfiguration consumerReturnedConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "MillionTenPercentAckMixReturnQueue"); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); // Consumer uses client acknowledge mode - consumerConfig.setAcknowledgeAfterEachMessageCount(100000); // Acknowledge messages only after message count - consumerReturnedConfig.setMaximumMessagesToReceived(NUMBER_OF_RETURNED_MESSAGES); - consumerReturnedConfig.setPrintsPerMessageCount(NUMBER_OF_RETURNED_MESSAGES / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "MillionTenPercentAckMixReturnQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, NUMBER_OF_AUTO_ACK_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient consumerReturnedClient = new AndesClient(consumerReturnedConfig, NUMBER_OF_CLIENT_ACK_SUBSCRIBERS, true); - consumerReturnedClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerReturnedClient); - - // Evaluation - long totalReceivedMessageCount = consumerClient.getReceivedMessageCount() + consumerReturnedClient.getReceivedMessageCount(); - - log.info("Total Non Returning Subscribers Received Messages [" + consumerClient.getReceivedMessageCount() + "]"); - log.info("Total Returning Subscribers Received Messages [" + consumerReturnedClient.getReceivedMessageCount() + "]"); - log.info("Total Received Messages [" + totalReceivedMessageCount + "]"); - - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT * NUMBER_OF_PUBLISHERS, "Message sending failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), SEND_COUNT, "Did not receive expected message count."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAutoAckSubscriberCloseTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAutoAckSubscriberCloseTestCase.java deleted file mode 100644 index 01b175e1..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAutoAckSubscriberCloseTestCase.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Load test for standalone MB with consumers having auto and client ack modes when receiving messages - */ -public class QueueAutoAckSubscriberCloseTestCase extends MBIntegrationBaseTest { - - private static final long SEND_COUNT = 100000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NUMBER_OF_SUBSCRIBERS = 7; - private static final int NUMBER_OF_PUBLISHERS = 7; - private static final long NUMBER_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS = 1000L; - private static final int NUMBER_OF_SUBSCRIBERS_TO_CLOSE = 1; - private static final long NUMBER_OF_MESSAGES_TO_EXPECT = EXPECTED_COUNT - NUMBER_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS; - private static final int NUMBER_OF_NON_CLOSING_SUBSCRIBERS = NUMBER_OF_SUBSCRIBERS - NUMBER_OF_SUBSCRIBERS_TO_CLOSE; - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Create 50 subscriptions for a queue and publish one million messages. Then close 10% of the subscribers while - * messages are retrieving and check if all the messages are received by other subscribers. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "50 subscriptions for a queue and 50 publishers. Then close " + - "10% of the subscribers ", enabled = true) - public void performMillionMessageTenPercentSubscriberCloseTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - - // Creating a consumer client configurations - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "millionTenPercentAutoAckSubscriberCloseQueue"); - consumerConfig.setMaximumMessagesToReceived(NUMBER_OF_MESSAGES_TO_EXPECT); - consumerConfig.setPrintsPerMessageCount(NUMBER_OF_MESSAGES_TO_EXPECT / 10L); - - AndesJMSConsumerClientConfiguration consumerClosingConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "millionTenPercentAutoAckSubscriberCloseQueue"); - consumerClosingConfig.setMaximumMessagesToReceived(NUMBER_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS); - consumerClosingConfig.setPrintsPerMessageCount(NUMBER_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "millionTenPercentAutoAckSubscriberCloseQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, NUMBER_OF_NON_CLOSING_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient consumerClosingClient = new AndesClient(consumerClosingConfig, NUMBER_OF_SUBSCRIBERS_TO_CLOSE, true); - consumerClosingClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClosingClient); - - // Evaluating - long totalReceivedMessageCount = consumerClient.getReceivedMessageCount() + consumerClosingClient.getReceivedMessageCount(); - - log.info("Total Non Closing Subscribers Received Messages [" + consumerClient.getReceivedMessageCount() + "]"); - log.info("Total Closing Subscribers Received Messages [" + consumerClosingClient.getReceivedMessageCount() + "]"); - log.info("Total Received Messages [" + totalReceivedMessageCount + "]"); - - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT * NUMBER_OF_PUBLISHERS, "Message sending failed"); - Assert.assertTrue(totalReceivedMessageCount >= SEND_COUNT, "Received only " + totalReceivedMessageCount + " messages."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAutoAckTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAutoAckTestCase.java deleted file mode 100644 index a0226bd0..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueAutoAckTestCase.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Load test for standalone MB for an auto acknowledging consumer for queues - */ -public class QueueAutoAckTestCase extends MBIntegrationBaseTest { - private static final long SEND_COUNT = 100000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NUMBER_OF_SUBSCRIBERS = 7; - private static final int NUMBER_OF_PUBLISHERS = 7; - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Test Sending million messages through [noOfPublishers] publishers and receive them through [noOfSubscribers] - * subscribers. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Million message test case", enabled = true) - public void performMillionMessageTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "millionQueueAutoAck"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "millionQueueAutoAck"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, NUMBER_OF_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NUMBER_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 2L); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT * NUMBER_OF_PUBLISHERS, "Message sending failed"); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT * NUMBER_OF_SUBSCRIBERS, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueLargeMessageSendReceiveTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueLargeMessageSendReceiveTestCase.java deleted file mode 100644 index 0c6cccf8..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/QueueLargeMessageSendReceiveTestCase.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - - -/** - * Send large messages (1MB and 10MB) to message broker and check if they are received - */ -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Load test case to check message size support for queues - */ -public class QueueLargeMessageSendReceiveTestCase extends MBIntegrationBaseTest { - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send 1000 messages of 1MB value and check 1000 messages are received by the consumer. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}, enabled = true) - public void performQueueOneMBSizeMessageSendReceiveTestCase() - throws AndesClientConfigurationException, IOException, NamingException, JMSException, - AndesClientException { - long sendCount = 1000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "Queue1MBSendReceive"); - consumerConfig.setMaximumMessagesToReceived(sendCount); - consumerConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "Queue1MBSendReceive"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - publisherConfig - .setReadMessagesFromFilePath(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); // Setting file to be sent by publisher - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), sendCount, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), sendCount, "Message receiving failed."); - } - - /** - * Send 10 messages of size 10MB and check whether consumer receives the same amount of - * messages - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}, enabled = true) - public void performQueueTenMBSizeMessageSendReceiveTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - long sendCount = 10L; - - // Creating a file of 10MB - AndesClientUtils.createMockFile(AndesClientConstants.FILE_PATH_FOR_ONE_KB_SAMPLE_FILE, - AndesClientConstants.FILE_PATH_FOR_CREATING_A_NEW_FILE, 10 * 1024); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.QUEUE, "singleLargeQueue10MB"); - consumerConfig.setMaximumMessagesToReceived(sendCount); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.QUEUE, "singleLargeQueue10MB"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig - .setReadMessagesFromFilePath(AndesClientConstants.FILE_PATH_FOR_CREATING_A_NEW_FILE); // Setting file to be sent by publisher - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), sendCount, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), sendCount, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/TopicLargeMessagePublishConsumeTestCase.java b/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/TopicLargeMessagePublishConsumeTestCase.java deleted file mode 100644 index 21f35013..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/java/org/wso2/mb/integration/tests/amqp/load/TopicLargeMessagePublishConsumeTestCase.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.amqp.load; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - - -/** - * Send large messages (1MB and 10MB) to message broker and check if they are received - */ -public class TopicLargeMessagePublishConsumeTestCase extends MBIntegrationBaseTest { - - /** - * Initialize the test as super tenant user. - * - * @throws javax.xml.xpath.XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send 10 messages of 1MB value and check 10 messages are received by the consumer. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicOneMBSizeMessageSendReceiveTestCase() - throws AndesClientConfigurationException, IOException, NamingException, JMSException, - AndesClientException { - long sendCount = 10; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.TOPIC, "singleLargeTopic1MB"); - consumerConfig.setMaximumMessagesToReceived(sendCount); - consumerConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.TOPIC, "singleLargeTopic1MB"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - publisherConfig - .setReadMessagesFromFilePath(AndesClientConstants.MESSAGE_CONTENT_INPUT_FILE_PATH_1MB); // Setting file to be sent by publisher - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), sendCount, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), sendCount, "Message receiving failed."); - } - - /** - * Send 10 messages of 10MB value and check 10 messages are received by the consumer. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicTenMBSizeMessageSendReceiveTestCase() - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - AndesClientException { - long sendCount = 10L; - - // Creating a file of 10MB - AndesClientUtils.createMockFile(AndesClientConstants.FILE_PATH_FOR_ONE_KB_SAMPLE_FILE, - AndesClientConstants.FILE_PATH_FOR_CREATING_A_NEW_FILE, 10 * 1024); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(ExchangeType.TOPIC, "singleLargeTopic10MB"); - consumerConfig.setMaximumMessagesToReceived(sendCount); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(ExchangeType.TOPIC, "singleLargeTopic10MB"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig - .setReadMessagesFromFilePath(AndesClientConstants.FILE_PATH_FOR_CREATING_A_NEW_FILE); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - // Increasing time limit of waiting for message count update as it takes time to receive 10mb messages. - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME * 3); - - // Evaluating - Assert.assertEquals(publisherClient - .getSentMessageCount(), sendCount, "Message sending failed"); - Assert.assertEquals(consumerClient - .getReceivedMessageCount(), sendCount, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/MessageContentInput.txt b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/MessageContentInput.txt deleted file mode 100644 index 90ceead0..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/MessageContentInput.txt +++ /dev/null @@ -1,4 +0,0 @@ -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/MessageContentInputWithoutRepetitions.txt b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/MessageContentInputWithoutRepetitions.txt deleted file mode 100644 index cc2aed8f..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/MessageContentInputWithoutRepetitions.txt +++ /dev/null @@ -1,877 +0,0 @@ - - -Quisque interdum feugiat quam vel aliquam. Curabitur imperdiet ultricies mi accumsan aliquet. Nam in arcu accumsan, faucibus est ut, iaculis eros. Fusce fermentum, risus sit amet sollicitudin placerat, diam velit ullamcorper nibh, ac ullamcorper nunc turpis a nunc. Nam sodales diam eget felis semper vulputate. Morbi tempus est purus, id lobortis justo viverra eu. Aliquam semper metus nibh, id laoreet ante luctus sed. Sed eget tincidunt tortor, in vestibulum diam. Nulla ac venenatis tortor. - -Vivamus dui ex, sollicitudin eget dui et, ultricies imperdiet tellus. Praesent a diam ut est egestas condimentum sit amet ut eros. Fusce velit leo, tincidunt hendrerit ullamcorper nec, commodo in augue. Donec pellentesque sodales nisl elementum tempor. Proin hendrerit porttitor hendrerit. Sed purus lacus, placerat at purus in, bibendum semper eros. Nulla elit dui, convallis id mollis vitae, lobortis ac elit. Proin condimentum in purus ut faucibus. Mauris ac sodales augue. - -Nullam venenatis fringilla tempus. Duis aliquet enim erat, a bibendum dui semper at. Aenean porta ligula ac justo dictum elementum. Aliquam erat volutpat. Vivamus nulla mauris, ultricies ut pharetra id, pulvinar sed felis. Vestibulum elementum cursus ultricies. Ut feugiat dolor vel egestas condimentum. Integer in lobortis metus. Duis volutpat ligula bibendum, condimentum magna vitae, gravida augue. - -Mauris a sem elit. Etiam at dolor enim. Nullam maximus ornare lectus et lobortis. Quisque mattis metus diam. Suspendisse potenti. Integer ornare dolor quis lorem dapibus, quis suscipit orci cursus. Maecenas facilisis laoreet tortor ac iaculis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies ante quis nulla gravida, vel facilisis sapien consequat. Nam ligula quam, gravida sed dolor quis, vehicula varius orci. Maecenas egestas fermentum luctus. Donec efficitur tellus nulla, eu gravida diam tristique in. - -Quisque non ullamcorper leo, at viverra lacus. Curabitur malesuada magna nec urna ultrices lacinia vel ultricies magna. Etiam facilisis mauris velit, vehicula pulvinar quam gravida at. Donec molestie arcu in ipsum aliquam interdum. Phasellus vel semper dui, ut maximus nisl. Integer at nunc sit amet justo pellentesque tincidunt. Etiam sed euismod nibh, sollicitudin efficitur odio. Curabitur pretium odio eget enim commodo, at consectetur metus pulvinar. Suspendisse posuere ipsum at feugiat porta. Curabitur luctus imperdiet diam nec dignissim. Nulla facilisi. - -Proin pharetra tincidunt dui vitae fermentum. Donec eget venenatis enim. Mauris sollicitudin ipsum at urna condimentum, quis malesuada eros tempor. Duis elementum viverra ipsum, vel sollicitudin urna rhoncus id. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Morbi facilisis sapien mattis lorem mattis sollicitudin. Integer non libero cursus quam cursus tristique. Nulla consequat est magna, in elementum nisl maximus euismod. Morbi a lacus et quam feugiat imperdiet. In finibus erat id posuere dictum. Donec sit amet mollis diam. Pellentesque pharetra tellus eget interdum dapibus. - -Vestibulum luctus at massa eget porttitor. Aenean blandit massa eget sapien convallis congue. Phasellus aliquam blandit risus, nec sollicitudin quam sollicitudin quis. Phasellus at odio et tortor molestie vulputate eu vitae leo. Curabitur ut turpis sem. Fusce et nisi vel risus accumsan tristique quis nec erat. Suspendisse potenti. Nullam vehicula molestie dolor eu finibus. Mauris ut dignissim arcu. Pellentesque ac hendrerit augue, eget scelerisque lacus. - -Nunc non est metus. Etiam ac mauris nec libero molestie egestas. Nunc aliquet nisl id felis ultrices pretium. Integer sapien neque, maximus vulputate arcu sit amet, congue tempor leo. Sed vel leo dolor. Vestibulum et dui venenatis, dignissim nisi eget, vehicula erat. Curabitur vitae justo et ligula semper fringilla vitae sit amet neque. - -Cras faucibus leo est, vel faucibus nisl pretium non. Integer mattis mi eu nisi ultricies maximus. Quisque semper consequat urna eu tempus. In at viverra nisi. Phasellus et arcu id nisi vehicula mattis sagittis eget orci. Praesent fringilla diam eget auctor elementum. In at est sem. Integer in mi arcu. Cras interdum elementum leo, ac tempor est vestibulum a. Integer et elit ipsum. Quisque nec nulla sit amet nisl mollis auctor viverra sed lacus. - -Phasellus et hendrerit mauris, tincidunt consectetur ligula. Curabitur volutpat gravida commodo. Ut ultricies varius magna, quis ullamcorper lorem pharetra quis. Suspendisse tempor nisi vel nunc gravida semper. Nunc molestie ac augue vel bibendum. Etiam ullamcorper vehicula rhoncus. Sed tempus ac mauris sit amet viverra. Etiam consequat egestas quam. Nulla maximus arcu in faucibus venenatis. Curabitur auctor eu mi faucibus fermentum. Duis varius magna est, eu rhoncus libero varius non. Donec aliquet pretium sapien vel egestas. Etiam vel velit lorem. - -Etiam nisl mi, semper nec convallis sit amet, cursus sed lacus. Duis dictum velit eget nisi consectetur, ut gravida dolor sollicitudin. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac neque diam. Aliquam euismod vitae nisl vel interdum. Vivamus sollicitudin ac metus in accumsan. Nunc dui massa, mattis vitae fringilla mollis, ultrices quis elit. Mauris blandit elementum nulla, sit amet dignissim risus euismod et. Fusce placerat ex ac odio pharetra, vitae porta lectus tristique. Suspendisse ultricies, est malesuada semper varius, ex erat tempor libero, non semper nisi justo quis nibh. - -Duis id egestas orci. Duis vitae tempor purus. Donec tristique justo id consectetur fermentum. Donec tempus lectus id elit accumsan eleifend. Pellentesque pretium, nibh vitae porta volutpat, tortor ex aliquam purus, vel tincidunt nisi augue a velit. Ut non purus blandit, consectetur lectus a, molestie nulla. Ut convallis lacinia mauris et hendrerit. Donec maximus, tellus sit amet porta consectetur, odio turpis feugiat risus, eu mollis felis massa vel erat. Nulla fringilla sem sit amet magna cursus iaculis. Pellentesque ac lorem nec tellus mollis congue. Fusce ornare gravida magna nec fringilla. In ut rutrum arcu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent pretium placerat elit nec ultrices. - -Mauris vitae erat id diam ornare eleifend non nec nisi. Maecenas eget dolor id libero dignissim euismod at nec justo. Nulla in commodo tortor. Nullam eleifend sem ac purus imperdiet, ut aliquet nibh vulputate. Suspendisse sed consectetur nunc, sed pulvinar sem. Mauris eget leo lectus. Phasellus a ante varius, dignissim odio vitae, elementum nisl. Aenean ac urna vel sem ullamcorper tincidunt scelerisque non enim. Fusce nec est eu eros convallis semper. Etiam nec nisl nunc. - -Mauris fermentum erat et sapien imperdiet egestas. Mauris ac eros ut nisi volutpat viverra et quis nibh. Quisque nibh dui, pellentesque malesuada lectus vitae, laoreet tempus nulla. Pellentesque eget libero egestas, bibendum lectus sed, sollicitudin purus. Quisque quis dictum orci. Quisque rutrum accumsan fermentum. Quisque viverra, urna sed cursus euismod, lectus mauris bibendum eros, et mattis massa neque nec eros. Donec maximus vulputate justo, et faucibus mi mattis ut. Donec at iaculis sapien. - -Proin sit amet mi mattis, vestibulum elit eu, scelerisque ante. Integer malesuada aliquet convallis. Maecenas pretium vitae ipsum sit amet iaculis. Quisque tincidunt nisi nisi, eu viverra massa feugiat in. Integer porttitor euismod libero at placerat. Maecenas pellentesque turpis placerat ante condimentum, ac congue lorem rutrum. Nulla ligula turpis, mollis vitae dignissim quis, faucibus et ligula. - -Donec a pulvinar justo. Praesent sed aliquet velit. Donec placerat blandit mi. Vivamus vulputate tempor accumsan. Vestibulum sit amet facilisis lacus, vitae consequat nisi. Nam aliquet nulla quis pulvinar tristique. Suspendisse rhoncus suscipit ipsum, sed sodales sem mattis interdum. Aenean interdum tristique tellus, tempor vestibulum nisl cursus ac. Nulla neque turpis, convallis at dapibus non, fermentum quis quam. Aenean eget ligula volutpat, aliquam leo sit amet, sagittis ligula. Suspendisse efficitur vel massa vitae dignissim. - -Mauris semper iaculis vulputate. Donec efficitur non ante quis pretium. Curabitur in dictum urna. Nullam imperdiet nisi eu leo lacinia egestas. Cras blandit mi nisi, sit amet condimentum justo tempor at. Cras ac arcu eu velit sodales tincidunt. Nunc tincidunt, felis vel fringilla sollicitudin, massa dui consequat lectus, sed dictum est dui at lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur condimentum tortor ac sagittis luctus. Suspendisse sed tincidunt lectus. Duis aliquet, libero imperdiet finibus tempus, lorem mauris ullamcorper nunc, at bibendum augue odio vitae tellus. Suspendisse ultrices, eros vel gravida molestie, turpis nisi rhoncus erat, a interdum est sapien et odio. - -Duis viverra dictum lectus vitae gravida. In hac habitasse platea dictumst. Sed vel lacinia diam. Aenean maximus elit vel ante sagittis, eu vehicula eros pharetra. Etiam pharetra diam at orci lacinia, nec posuere quam laoreet. Donec maximus quis felis vel aliquet. Morbi pulvinar dui a ipsum egestas, eget pharetra est fringilla. Vestibulum eget accumsan libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sollicitudin condimentum quam, quis placerat nunc imperdiet at. Vivamus ultrices, velit at maximus viverra, magna tortor imperdiet justo, sit amet fringilla lectus dolor facilisis urna. Sed placerat tristique lorem, ac elementum urna iaculis nec. Sed dapibus nisl eget scelerisque consequat. - -Etiam et dapibus nisi. Aliquam non finibus dui, lacinia condimentum enim. Sed ornare et lectus sed fermentum. Aliquam sed imperdiet arcu. Nullam pellentesque, dolor quis consectetur maximus, elit odio sagittis nibh, ut cursus augue nulla a orci. Etiam dictum mollis vehicula. Phasellus sagittis, risus quis semper dictum, nunc risus ultrices purus, et condimentum neque lorem nec libero. Donec posuere, libero eget ullamcorper pharetra, purus metus hendrerit nisl, ut viverra ante libero ut enim. Nunc vitae quam pellentesque, dictum arcu et, lacinia diam. Nunc in tempus sapien, nec dignissim justo. Curabitur elit tellus, placerat non congue id, pellentesque ut tellus. Nulla nibh eros, hendrerit nec venenatis in, consequat et odio. - -Sed quis pellentesque velit. Suspendisse cursus volutpat malesuada. Sed nec diam ac ipsum finibus sodales. Fusce tincidunt tempus urna, vestibulum tincidunt arcu imperdiet in. Donec arcu turpis, vestibulum aliquam volutpat ut, vulputate non lectus. Ut tristique faucibus blandit. Aliquam erat volutpat. Nulla facilisi. Sed in mattis lectus. Suspendisse potenti. Quisque dapibus fringilla orci, quis ultricies est volutpat non. - -In sit amet est condimentum, sollicitudin mauris non, egestas leo. Nulla facilisi. Phasellus venenatis, erat at lobortis dignissim, ligula enim ultricies felis, pulvinar egestas urna ante in tellus. Nam at lectus ante. Sed dictum vestibulum neque quis commodo. Aliquam laoreet metus ut mi placerat placerat. Sed feugiat nibh quis nulla fringilla bibendum sit amet nec purus. Vivamus ut leo quis sapien tempus lobortis eget ac odio. Suspendisse at ex id dolor fringilla mollis. Integer ex urna, congue ac turpis condimentum, hendrerit euismod tellus. In interdum aliquam tellus, a suscipit orci consectetur eu. Phasellus at odio at lectus sollicitudin luctus id nec diam. Nunc lacinia risus non aliquam malesuada. Proin rutrum consectetur lectus eget placerat. Mauris scelerisque nec nisl ac molestie. Sed sollicitudin scelerisque est, a hendrerit risus egestas in. - -Maecenas a quam condimentum, varius velit ac, pharetra neque. Morbi sagittis molestie nisl, eu luctus felis blandit sit amet. Maecenas accumsan nunc non justo ultricies blandit. Nulla non metus sollicitudin, pharetra dolor posuere, scelerisque tortor. Pellentesque euismod fringilla purus. Proin sed vehicula nulla. Vivamus scelerisque metus nunc, sed hendrerit dolor aliquet vel. Proin nec ante pulvinar elit pharetra cursus. In tempus lorem eros, ac auctor dolor tempor fringilla. Curabitur egestas imperdiet consectetur. Aliquam nibh tortor, dapibus eu orci a, ultrices condimentum urna. Etiam accumsan magna vel facilisis gravida. Mauris efficitur nisl dapibus orci luctus, sed bibendum mauris dictum. Quisque finibus lectus vel aliquet bibendum. - -Phasellus id augue nec magna viverra rhoncus nec at nibh. Mauris eu eros erat. Praesent finibus arcu non pretium cursus. In consectetur mi nec augue pretium, ac vulputate nisl luctus. Mauris sed gravida tortor, sit amet rutrum dolor. Aenean placerat dictum magna, vel condimentum est tincidunt at. Vivamus aliquet, dui ut pulvinar mattis, risus mauris malesuada ligula, et mattis neque ex eget lorem. Phasellus ut hendrerit tortor. Duis suscipit, eros a aliquam varius, arcu risus lobortis massa, et semper ipsum arcu sed sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vestibulum ipsum vitae enim malesuada, in aliquet justo ultricies. Ut volutpat gravida mi, elementum vehicula elit tristique eu. Curabitur ac nibh et ipsum placerat vestibulum vitae ac felis. Praesent turpis lorem, porta a mi quis, viverra cursus leo. - -Mauris tincidunt turpis eu lacus tincidunt rutrum. Quisque consectetur lectus at neque porttitor, non mollis urna ultrices. Duis eget semper est. Aliquam non elit vitae nibh condimentum tempor nec vel lacus. Etiam tempor lobortis ligula, ut pulvinar mauris tristique tempor. Sed bibendum vestibulum nisi sed tincidunt. Vestibulum vehicula tincidunt risus nec scelerisque. Integer convallis mi ac risus hendrerit porttitor. - -Proin in est viverra, sollicitudin nunc nec, dictum augue. Sed ultricies condimentum purus, ut ultrices ex eleifend sed. Aliquam porttitor sem nec quam accumsan commodo. Curabitur sed pellentesque urna. Duis eu ligula ac orci malesuada rutrum eget sit amet lacus. Nullam ut eros ex. Sed aliquet leo nec urna gravida volutpat. Integer imperdiet molestie ligula, ac convallis dolor. Suspendisse elementum ligula id risus dignissim, quis laoreet ante faucibus. Aenean porttitor sagittis commodo. Fusce justo purus, condimentum ut mollis vel, sollicitudin eget sapien. - -Sed interdum elit vel tortor convallis feugiat. Ut posuere ex nec venenatis interdum. Integer consectetur orci rhoncus tellus faucibus ullamcorper. Duis lacinia efficitur semper. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ultrices leo eget quam imperdiet, non tempor lacus condimentum. Cras vel dignissim diam. Mauris non maximus massa. Etiam a velit vel lacus ullamcorper faucibus. Curabitur quis facilisis nisi. In vehicula ut nulla vel consectetur. Duis iaculis eu tellus dictum mollis. Suspendisse eget rutrum odio. Vestibulum nec consectetur est, at vehicula velit. In a libero vitae lacus viverra sodales. - -Nulla interdum cursus leo, quis egestas elit auctor eget. Nullam mauris lacus, consectetur vitae augue non, commodo luctus justo. Cras porttitor aliquam eros in mattis. Morbi maximus libero neque, quis viverra magna fringilla quis. Ut aliquam ante vitae vehicula luctus. Sed congue a nulla et maximus. Vivamus porttitor felis sed augue gravida fermentum. Donec in lacus rutrum, finibus lacus ac, placerat quam. Proin placerat nunc vitae posuere iaculis. Etiam suscipit mi est, id congue diam commodo sit amet. Ut consectetur consectetur lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Aliquam erat volutpat. Curabitur convallis turpis sed massa cursus aliquet. Nullam id nibh ac ex accumsan tincidunt vitae nec nunc. Sed accumsan risus vitae ultrices semper. Sed ut sem eget arcu egestas sodales. Suspendisse facilisis risus in nulla condimentum suscipit. Nulla sed congue tortor. Etiam porttitor tellus lorem, non convallis arcu dapibus at. Nam vitae tristique dolor. Donec eu sem aliquam, tristique nulla ut, congue ante. Pellentesque vitae egestas turpis. Nam quis mauris consectetur purus elementum scelerisque. Vestibulum condimentum aliquet aliquam. - -Aliquam erat volutpat. Etiam et feugiat nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis est sodales, egestas odio fermentum, eleifend urna. Nulla sed volutpat nibh. Aenean ac placerat massa, elementum elementum lectus. Proin euismod, urna ut semper tristique, sapien ipsum aliquet risus, ut molestie odio sapien sed enim. Vivamus vestibulum purus risus, vel lobortis sem luctus vitae. Aliquam ultricies eu nulla id faucibus. Nunc eu odio ultricies, rhoncus lorem eget, pharetra sapien. Phasellus vitae neque ac sem ornare pharetra ut vitae purus. Sed malesuada tristique quam nec viverra. Sed condimentum, arcu id venenatis feugiat, massa tortor dapibus nisi, a facilisis lorem ligula semper mi. - -Donec lacinia felis laoreet sem dapibus mollis at a orci. Etiam viverra dolor nec magna tempus lacinia nec vel metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque eget quam massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas luctus, nunc sit amet egestas ultrices, nibh felis imperdiet est, id dignissim ante nibh non tellus. Ut eget lectus ipsum. - -Nullam porta diam ut arcu egestas congue. Nullam viverra nisi sed diam convallis eleifend. Nullam porta sed augue ullamcorper aliquet. Curabitur tempor sapien felis, at dictum dolor cursus nec. Nullam lorem risus, finibus non sollicitudin a, hendrerit vel diam. Praesent nibh nulla, semper id erat vitae, faucibus mattis nisi. Nulla ut libero id justo luctus convallis nec in tellus. - -In ultrices vel augue a pharetra. Donec accumsan malesuada massa vitae faucibus. Aenean consectetur nisi nulla. Praesent libero nisl, luctus eget vestibulum ac, ultricies sed ex. Sed lobortis ut elit a semper. Quisque dapibus bibendum gravida. Aenean porta vulputate nibh fringilla sollicitudin. Cras vel mi justo. Sed quis orci bibendum, hendrerit purus et, sollicitudin diam. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc ornare laoreet sem, non gravida sem pharetra sit amet. Morbi vel ullamcorper dui. Ut aliquam, enim sit amet molestie dignissim, quam orci gravida mi, sed mollis turpis mauris ut est. Nunc tincidunt enim a quam iaculis, sed dapibus diam dapibus. Donec malesuada commodo elit, eu blandit libero volutpat vitae. Fusce libero magna, tristique ut lacus eu, bibendum venenatis augue. Proin ornare augue et pulvinar lacinia. - -Nullam eget orci cursus, ullamcorper urna a, rhoncus orci. Morbi sed ipsum quis dui porttitor convallis. Ut ornare varius odio vitae varius. Sed sollicitudin sed risus nec varius. Aliquam placerat ac risus eu pulvinar. Vestibulum diam dolor, egestas nec purus et, molestie convallis sapien. Maecenas scelerisque mauris eu enim ultricies, id aliquam leo congue. Vestibulum imperdiet neque sed consequat condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eget porttitor turpis. Mauris vitae est eget justo porttitor imperdiet a et nibh. Cras elementum, lectus et vulputate eleifend, diam leo efficitur ipsum, eget finibus quam sapien at tellus. - -Vivamus dui metus, ornare at eros varius, facilisis malesuada mauris. Mauris laoreet felis at vestibulum pellentesque. Pellentesque fringilla elit orci. Pellentesque leo enim, sodales a consectetur eu, congue a eros. Aliquam eu dolor dui. Mauris turpis metus, volutpat id convallis sit amet, volutpat sit amet tortor. Donec eu tellus est. Suspendisse non leo urna. Etiam suscipit elementum mauris, ut pulvinar enim suscipit et. Sed ultrices pharetra tortor. Donec commodo enim sed massa dignissim, quis vestibulum lectus interdum. - -Duis vestibulum gravida dolor varius iaculis. Quisque id facilisis diam. Aliquam erat volutpat. Phasellus tincidunt pellentesque mi vitae facilisis. Nunc venenatis, arcu et commodo suscipit, purus mi rutrum odio, id aliquet lectus ex vitae dolor. Nulla ut commodo lectus. Phasellus interdum iaculis velit. Vestibulum eget malesuada tortor. Nam a tellus efficitur, iaculis augue nec, tincidunt felis. Maecenas molestie diam ut turpis iaculis facilisis. Aenean mattis magna eu est sollicitudin, quis faucibus ex tincidunt. Pellentesque maximus commodo metus vel malesuada. Aenean nec sapien dignissim, mollis augue vitae, gravida ex. - -Curabitur sit amet enim scelerisque, accumsan ex ut, facilisis leo. Nulla varius tortor neque, vitae imperdiet massa porttitor in. Cras quis magna justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tincidunt mi justo, a fringilla quam posuere sed. Quisque convallis lacus at euismod interdum. Vivamus cursus feugiat elit sit amet porttitor. Etiam eros magna, varius nec ex et, aliquam vulputate velit. Donec ac ligula non tellus eleifend convallis. Morbi posuere neque augue, et ullamcorper nisl rutrum eget. Aliquam augue nulla, malesuada nec cursus in, ornare at lacus. Pellentesque varius facilisis nunc sit amet venenatis. - -Nam ut tellus ullamcorper, finibus magna nec, semper elit. Fusce pulvinar nec purus blandit auctor. Ut egestas, est eget imperdiet aliquam, lectus purus ullamcorper neque, eget venenatis ligula magna ut leo. Ut fringilla ullamcorper risus sed tincidunt. Sed pulvinar vehicula tortor vel tincidunt. Nulla at vehicula ligula, sed rhoncus purus. Sed elementum, quam sit amet convallis finibus, nisi nunc venenatis mauris, sed luctus leo orci quis lacus. Maecenas venenatis est nec diam consectetur dignissim. Cras lacinia vehicula laoreet. Cras eu ex in nunc scelerisque imperdiet. - -Praesent eget nibh imperdiet, pulvinar dui eget, aliquet ipsum. Suspendisse eu hendrerit sem. In ac augue non enim porttitor pulvinar sit amet in mauris. Aenean vel justo quis metus facilisis feugiat nec eu nibh. In placerat, est sit amet blandit aliquet, erat nunc semper justo, eget pellentesque lorem mi quis neque. Pellentesque leo ex, semper sit amet accumsan nec, elementum id arcu. Vivamus faucibus ipsum non mollis imperdiet. Vestibulum sit amet sapien ac sem rutrum auctor a nec nunc. Pellentesque elementum sollicitudin tellus, vel malesuada lacus pretium eget. Nunc id nibh ac augue eleifend dictum. Etiam at tempus justo. - -Nunc bibendum risus sit amet ultrices congue. Nulla facilisi. Nulla id pulvinar erat. Curabitur libero odio, finibus et nisl eget, auctor gravida neque. Praesent nec interdum ex. Morbi gravida ante vel nisl cursus maximus. Vivamus vestibulum et quam ut facilisis. Vivamus vel erat lectus. Pellentesque finibus nisi eu sollicitudin pharetra. Pellentesque volutpat consectetur libero eget porta. Vestibulum fermentum ipsum sed dui tincidunt commodo. Mauris quis sodales elit. Nunc sodales felis hendrerit velit dignissim, nec finibus arcu sollicitudin. Phasellus a venenatis neque. Maecenas aliquam est quam, vitae viverra orci blandit ac. - -Donec interdum aliquet nunc, nec pretium turpis feugiat vel. Cras non justo cursus, ornare ligula tempor, auctor sem. Sed sed est sed nisl egestas consequat vitae vitae leo. Quisque leo elit, ultricies et eleifend porttitor, venenatis pellentesque leo. Integer elit urna, rhoncus a facilisis id, fermentum congue purus. Ut tempus pretium neque vitae mattis. Fusce id congue ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent imperdiet purus a nisl condimentum, sit amet rutrum enim maximus. - -Quisque leo quam, consectetur ac turpis vitae, pellentesque blandit mi. Duis quis suscipit tortor. Donec quis leo quis sapien ultrices gravida a eu mauris. Sed posuere nibh ut laoreet tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam turpis orci, tempor ac dignissim eget, maximus in purus. Praesent diam nulla, finibus eu feugiat sit amet, posuere at nulla. Ut vitae diam eu nibh ornare mattis at id ex. Proin faucibus efficitur mauris eu volutpat. In vel ullamcorper sapien, at tristique neque. - -Etiam accumsan est vel facilisis suscipit. Nulla congue orci in sem venenatis congue. Maecenas pharetra non nunc at euismod. Duis fermentum et sem non euismod. Nam tincidunt nisi a elit cursus varius. Maecenas vulputate eleifend consectetur. Aliquam erat volutpat. Donec consectetur sapien nec tellus facilisis consequat. Proin quis auctor felis. Donec et venenatis ligula, a convallis ante. Nulla tempor, mauris quis iaculis feugiat, lacus risus vulputate augue, ut facilisis nibh dui eget orci. Mauris leo dolor, rhoncus sed nisi id, molestie vehicula erat. Aliquam porta lacus id nibh mollis porta. Curabitur vel congue quam. Quisque ut ipsum blandit, imperdiet nisl sit amet, ullamcorper nulla. - -Sed purus enim, dictum ut eros eget, condimentum pharetra lorem. Suspendisse auctor nisi mi, at facilisis ligula luctus at. Nullam vulputate iaculis leo a fermentum. Aenean lobortis est vel elit convallis, id mollis lectus facilisis. Aliquam eu accumsan ante. Nunc aliquam vehicula diam, at ultrices diam vehicula at. Morbi mattis dapibus vehicula. Nulla nunc mi, gravida ac lacus ac, porta viverra mauris. Suspendisse potenti. - -Pellentesque scelerisque porta tellus quis commodo. Proin quam massa, cursus nec tellus eu, elementum dapibus lorem. Sed et tincidunt nisi, sed finibus turpis. Vestibulum dictum velit ultrices tempus placerat. Duis varius tempor scelerisque. Sed laoreet cursus magna, ac vulputate turpis imperdiet ultricies. Fusce lacinia posuere diam, ac vulputate justo ornare nec. In rutrum vestibulum purus. Sed ut enim convallis, ornare eros et, tempor massa. Aenean mattis nisl lectus, pharetra porttitor odio bibendum id. Etiam nibh quam, malesuada sed luctus eget, hendrerit ac ante. Aliquam vestibulum lectus at nunc convallis pretium. Praesent interdum turpis tortor, ac auctor turpis tristique id. Integer ac cursus elit. Quisque viverra massa neque, vel ullamcorper quam egestas id. - -Curabitur convallis ligula ipsum, non consequat turpis scelerisque vestibulum. Vestibulum blandit porta ante vitae vestibulum. Morbi sodales quis risus vitae porta. Nunc scelerisque congue dolor, a fermentum risus blandit a. Phasellus at nunc sed nibh feugiat pharetra vitae id leo. Vivamus volutpat leo nec ligula faucibus, at lacinia elit porttitor. Proin varius ligula et nibh aliquet, non malesuada nisl ornare. - -Aenean tempus bibendum aliquet. Morbi consequat nibh ex, at bibendum mauris pulvinar nec. Curabitur nec nibh sit amet elit fermentum volutpat quis non nisi. Praesent gravida, leo nec pulvinar condimentum, elit justo dignissim orci, sit amet iaculis lacus nisi ut sem. Fusce accumsan urna a arcu facilisis hendrerit. Proin ligula nulla, tempor vitae pretium non, finibus ut mi. Ut vestibulum est a lorem facilisis faucibus. Vestibulum et leo in velit consequat tempor. Integer ac purus et leo lobortis aliquam et vitae nulla. Quisque varius et nunc sit amet elementum. Vivamus nec lacinia odio, a maximus risus. Proin in justo eget odio porttitor tincidunt feugiat vel arcu. Sed fermentum augue ut mauris auctor, quis vestibulum lectus fringilla. Integer a mi maximus leo aliquet iaculis. - -Nam vel erat hendrerit dolor congue hendrerit malesuada vel sem. Morbi eget risus feugiat nisl tincidunt maximus eu sit amet leo. Maecenas quis cursus turpis, et scelerisque leo. Sed dui erat, imperdiet sed massa in, dictum tristique ligula. Quisque mauris diam, accumsan ac feugiat a, ornare at erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis at neque vitae nibh mollis egestas. Mauris sollicitudin lacus in neque facilisis, at varius mi eleifend. Vestibulum vulputate ipsum laoreet tortor pharetra, nec convallis turpis congue. Mauris in egestas mauris, condimentum aliquet tellus. Phasellus porttitor diam ut eros vehicula, dapibus maximus ipsum mollis. Nam congue neque lorem, eget ultricies nunc pretium a. - -Nullam tempus aliquam metus. Aliquam sit amet laoreet tellus. Aliquam mattis placerat maximus. Suspendisse varius dictum urna. Duis feugiat, est vitae molestie fringilla, enim leo porta ex, at dignissim libero nulla et nisl. Sed fringilla ipsum ac ipsum mollis, quis vulputate turpis ullamcorper. Quisque vel ante venenatis, placerat quam sit amet, placerat mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Sed suscipit in sapien in tincidunt. Aliquam erat volutpat. Duis vestibulum facilisis velit. Donec eget ante et lacus dictum aliquet. Nam et velit tellus. Maecenas rhoncus felis eget aliquet tristique. Pellentesque vehicula gravida lectus. Donec eget rhoncus metus. Etiam hendrerit arcu vitae nulla semper lacinia. Nunc ultricies magna a nisl lobortis consectetur. Nam nisi odio, molestie a gravida sed, consectetur at neque. Vivamus id facilisis est. Quisque viverra consectetur pellentesque. - -Quisque condimentum volutpat leo. In in dui enim. Nam varius orci non libero sodales, sed euismod mi condimentum. Nullam eu risus in enim gravida pulvinar. Duis laoreet odio metus, quis varius sapien blandit ut. Ut vitae bibendum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sagittis quam felis, ac pulvinar nulla consequat a. Integer quis est at dui auctor tincidunt ac vitae quam. - -Nulla libero massa, ultrices sit amet nibh id, tempus dapibus dolor. Integer sed magna et tellus congue pulvinar id in sapien. Curabitur eu maximus diam, in convallis libero. Phasellus quis rhoncus ligula, sed varius enim. Vestibulum sollicitudin, risus eget euismod sodales, est sapien aliquam lorem, hendrerit lacinia massa eros sed tellus. Donec odio erat, laoreet eleifend tempus et, lacinia at metus. Integer pharetra sem ultricies neque condimentum elementum. Proin nibh leo, pulvinar non nisl et, faucibus condimentum orci. Suspendisse convallis ut enim in aliquam. Vivamus aliquet lorem eu libero porttitor, at placerat nisi pharetra. Nam et magna ut diam ultricies consequat ut vitae odio. Proin porta nunc at egestas ultrices. Nam in erat quam. Curabitur congue aliquam velit id suscipit. Maecenas id pharetra orci. - -Morbi a nisi id risus suscipit viverra quis egestas mauris. Nam erat enim, sagittis a quam nec, commodo condimentum lorem. Donec nulla ipsum, consectetur ut aliquet elementum, pulvinar molestie lectus. Pellentesque nisl enim, commodo non arcu eu, elementum ultrices nisl. Vivamus placerat cursus purus vitae facilisis. Donec aliquam id ligula at lobortis. Aenean eu consectetur leo. Praesent sed felis at orci venenatis condimentum in quis lacus. Sed arcu erat, dictum ut ante sagittis, iaculis sollicitudin nulla. Fusce ut tincidunt nisl. Etiam convallis tortor eget pellentesque iaculis. Etiam elementum ante a ultrices porta. Quisque eleifend ipsum eget sapien efficitur, a tincidunt ex cursus. Praesent aliquam sem vitae odio suscipit molestie. Suspendisse volutpat ut libero et vulputate. - -Donec tincidunt velit urna, vehicula tincidunt tortor pellentesque vel. Donec vel lectus suscipit ipsum porta tristique in eu ante. Praesent vel accumsan tellus, nec vestibulum odio. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel magna eget lorem vehicula ullamcorper eu ut diam. Morbi lacus eros, molestie a dignissim dapibus, pulvinar accumsan justo. Pellentesque vitae metus nec risus viverra faucibus. Proin diam urna, vehicula id volutpat in, condimentum sed augue. Pellentesque vehicula mi vel ipsum venenatis feugiat. Integer augue diam, sollicitudin et justo sed, sodales pellentesque turpis. - -Integer eget tincidunt ante. Donec imperdiet laoreet dolor, et condimentum quam faucibus non. Nam a dignissim augue. Donec vel aliquet lectus. Praesent a ipsum eu odio consectetur mattis nec at neque. In quis auctor ex. Ut fringilla sodales rhoncus. Nunc euismod velit at nibh dapibus, id malesuada ligula tristique. - -Aenean augue nibh, finibus eu consequat nec, euismod at lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vitae enim ac orci finibus interdum. Nullam in eleifend ligula. Morbi aliquet orci tellus, quis ullamcorper ante dapibus ut. Ut condimentum aliquam lacus, in semper velit lacinia a. Integer et diam vitae magna fringilla egestas. Sed nec hendrerit lectus, vel posuere nibh. - -Duis tincidunt ipsum eu quam elementum, vel tempor justo tristique. Morbi in ipsum non quam blandit cursus non vitae ex. Sed rhoncus augue sit amet fringilla dignissim. Sed a lorem eu neque viverra finibus. Praesent vel maximus quam. Sed posuere, diam at convallis pulvinar, tortor turpis rhoncus sapien, eget lobortis urna nunc eget neque. Vestibulum ultrices vulputate risus, sit amet faucibus massa finibus non. Donec interdum posuere eros, a egestas diam tristique at. Donec eget est quis eros ultrices venenatis vitae ac quam. Cras vitae ipsum euismod, dignissim risus sit amet, dapibus velit. Donec ullamcorper eros est, ut mattis nisi bibendum at. Duis pellentesque augue quis urna pulvinar auctor. Phasellus ullamcorper magna vitae arcu luctus, ac feugiat justo accumsan. Nunc eu odio a velit varius blandit. Sed ultrices elit quis ligula laoreet viverra. Cras rutrum non neque quis sollicitudin. - -Aliquam nec nibh dignissim, consectetur dolor in, venenatis magna. Morbi sit amet posuere libero, quis malesuada sapien. Pellentesque eu magna at dui ultricies scelerisque. Duis non tortor sapien. Vestibulum pellentesque aliquam nulla, ut mattis libero commodo id. Phasellus sit amet velit eleifend, pretium est ac, placerat tellus. Curabitur non lacus tellus. - -Curabitur a arcu in orci tristique aliquet. Curabitur sed augue sem. Nam velit quam, ornare non consectetur in, vehicula dapibus arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut semper est neque, et blandit est pellentesque et. Quisque nec diam laoreet nisi vestibulum tempus. Proin non libero eget dolor rutrum placerat. Aenean ut purus sed nisi gravida consequat vitae ac metus. Nulla accumsan, nunc ac convallis tristique, metus libero rutrum metus, nec sagittis erat metus non ex. In dignissim sodales scelerisque. Aenean bibendum elementum ante, nec rhoncus turpis tempus quis. - -Nullam eu libero massa. Nulla nec auctor nunc. Fusce fermentum, nibh eget pretium fringilla, nisi ligula pharetra risus, pellentesque auctor leo nisl at neque. Sed sodales dictum mattis. Fusce id congue sapien, sit amet facilisis nibh. Donec ornare mi eget diam aliquet gravida. Nam volutpat massa tortor, non imperdiet lacus rhoncus ut. Pellentesque quis ultricies metus, eu dictum tellus. Ut suscipit, lorem vel venenatis consequat, enim erat imperdiet sapien, hendrerit faucibus ipsum nibh sed nibh. Maecenas elementum felis nec tortor interdum, nec ullamcorper massa varius. Nulla non leo velit. - -Aenean vel scelerisque nunc, ut convallis ex. Maecenas imperdiet tellus non aliquet laoreet. Aliquam malesuada ullamcorper felis non hendrerit. In tincidunt consequat fermentum. Suspendisse facilisis luctus eros, in feugiat nisl dictum a. Integer massa nisi, tincidunt laoreet aliquet ac, tempor eu elit. Proin ac quam vel nunc hendrerit auctor. Curabitur maximus orci sit amet ex tempus vehicula. - -Sed consequat arcu mi, a gravida est condimentum eget. Donec pretium lorem vel euismod cursus. Donec dignissim orci ac suscipit gravida. Maecenas dapibus, purus id placerat convallis, libero purus imperdiet dui, at consequat ex urna eget justo. Nam sapien lectus, sagittis ac feugiat in, porttitor ac mi. Etiam bibendum congue vehicula. In euismod sed ipsum at blandit. Duis suscipit massa sed nibh mollis, et tincidunt metus feugiat. Sed eget quam in magna porta ornare. Nam consectetur feugiat leo, id sollicitudin elit commodo vel. Pellentesque hendrerit nunc nulla, sed ultricies ante lacinia in. - -Integer vel libero quis magna tempor iaculis. Praesent mattis erat nibh, ut ultricies tortor hendrerit a. Donec non dictum sem, id gravida enim. Vestibulum ultrices, nisl eu euismod lobortis, dolor mi molestie erat, eu consequat eros ligula quis mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla cursus, augue sollicitudin dapibus convallis, erat arcu dapibus lorem, vel ornare eros quam vitae nunc. Aenean ut dapibus nunc, vel sagittis ex. Curabitur ut pulvinar tellus. Cras sit amet est at libero vestibulum semper et sed velit. Suspendisse porta ipsum ex, sit amet porttitor sapien elementum eu. Quisque euismod arcu non molestie iaculis. Maecenas et ullamcorper magna. Vivamus laoreet rhoncus fringilla. Nam ullamcorper nibh eu odio sagittis, vitae semper ex aliquet. Aenean in nisi vel nisi dapibus pellentesque a at turpis. Vestibulum non volutpat nulla. - -Morbi consectetur nisl et lacus tincidunt eleifend. Donec sed hendrerit libero. Proin vel convallis metus. Nam non tortor sapien. Duis porta mauris vel ornare blandit. Morbi at dictum metus. Morbi sed malesuada leo. Pellentesque malesuada nisi a neque placerat mollis. Donec non imperdiet odio, in congue nunc. - -Phasellus dapibus nulla at mollis accumsan. Phasellus quis libero ante. Praesent in neque efficitur, eleifend mauris sit amet, posuere metus. Mauris nisi mauris, pharetra ut vestibulum a, lobortis id erat. Praesent at condimentum tortor, a vehicula arcu. Cras suscipit mollis egestas. Phasellus sit amet tellus mattis, bibendum ligula sed, tempor ligula. Sed scelerisque ultrices nisl, quis fringilla mauris feugiat sed. Etiam eu erat pellentesque augue eleifend porta nec ac turpis. Duis at sodales massa. Aenean ac dui lobortis, rhoncus massa non, cursus massa. Suspendisse ante magna, sagittis at ullamcorper non, feugiat eu ligula. Maecenas facilisis, nulla a aliquet rhoncus, libero libero aliquet nunc, sed rhoncus eros diam a sem. - -In aliquam lacus vitae gravida blandit. Fusce molestie dui eget sapien interdum, in consectetur tortor feugiat. Nunc vitae enim vestibulum sapien gravida laoreet. Vestibulum fermentum ut dui in efficitur. Nullam quis ex vitae nisl facilisis convallis at a lacus. Sed scelerisque non libero in consequat. Integer posuere tortor vitae quam egestas varius. Sed eu turpis leo. Pellentesque vel urna quis nisi congue pellentesque a quis sem. Sed volutpat blandit rhoncus. Cras mi dui, malesuada ut volutpat vitae, tempus vel lacus. Ut mattis dui in enim porta, a pharetra turpis finibus. Nunc ut posuere mi. Aenean commodo risus ut leo malesuada, nec efficitur dui convallis. In hac habitasse platea dictumst. - -Phasellus interdum congue rutrum. Sed venenatis lectus a sollicitudin malesuada. Cras tortor ante, pharetra et turpis nec, iaculis accumsan sapien. Cras ac nulla rutrum, consequat lacus ac, lobortis nulla. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis bibendum turpis at massa fringilla pulvinar. Curabitur id sagittis metus, a molestie sem. Vivamus quis mauris sit amet augue consectetur pretium eu non arcu. Sed sit amet efficitur neque. Vestibulum consectetur ligula non commodo lobortis. Nunc tincidunt eros odio, id lacinia nulla maximus quis. - -Donec nec nibh vel metus bibendum facilisis eu ut eros. Nunc sagittis, ipsum vel faucibus gravida, nunc nunc sollicitudin est, eu pellentesque ex magna vel libero. Aenean at tellus at metus mollis vehicula id non tellus. Sed ac scelerisque velit. Morbi ullamcorper augue sapien, in elementum sapien ultrices et. Curabitur at est purus. Sed auctor, massa eget finibus vulputate, metus lectus fringilla dolor, at sagittis velit nulla vitae ex. Phasellus ac convallis sem. Aenean quis libero ipsum. Aliquam dapibus turpis quis imperdiet ultrices. Pellentesque vehicula bibendum porta. Nulla sed semper purus, nec accumsan nulla. Integer volutpat massa in lectus viverra egestas. - -Ut malesuada nisi quis lacus finibus, in consequat arcu pulvinar. Nulla pulvinar ornare sem sed scelerisque. Fusce lobortis et lacus vitae consectetur. Vivamus id nisl eu urna ullamcorper ornare in quis nulla. Sed laoreet, eros aliquet laoreet efficitur, quam eros cursus nunc, at iaculis lorem tortor eget lacus. Cras aliquam nec eros vel porta. Proin eget ipsum nec nisi vulputate ullamcorper sit amet non sapien. Donec sodales libero vitae tortor dignissim, et sollicitudin sapien vehicula. Donec tempor egestas fermentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc lorem leo, dignissim sed est ac, volutpat molestie libero. Ut feugiat lectus nec odio gravida auctor. Ut ac ipsum cursus, efficitur ipsum ac, vehicula turpis. Donec ac nibh a mauris finibus dignissim vel sed dolor. - -Fusce ornare augue consequat, dignissim purus vel, pulvinar leo. Pellentesque a sem volutpat, hendrerit libero non, consectetur augue. Etiam urna felis, maximus rutrum blandit eget, cursus at risus. Donec congue aliquet pharetra. Aenean id blandit metus. Nullam venenatis egestas neque non finibus. Proin rutrum sapien sit amet nisl vehicula rutrum. Maecenas aliquam libero vitae laoreet tempor. Sed ut consectetur urna. Donec gravida dui sit amet tempor posuere. Maecenas aliquam viverra libero. Donec sagittis vitae leo eget condimentum. Aenean fermentum, elit vitae volutpat hendrerit, risus neque vehicula libero, et aliquet erat felis quis ante. - -Suspendisse consequat molestie auctor. In varius enim nec viverra semper. Aenean dui purus, posuere quis sodales eget, interdum in augue. Integer a erat vitae nibh ultricies porttitor sed quis tortor. Nam commodo viverra nibh, eu luctus lorem ornare sed. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec at ornare augue. Pellentesque sit amet pretium mauris, et pellentesque neque. Morbi dictum odio eu tempor fringilla. Suspendisse porta elit dui, sit amet faucibus felis ornare at. Donec sollicitudin eros sapien, eget elementum dui malesuada quis. - -Maecenas lacinia faucibus risus, eget venenatis massa. Curabitur eget turpis eget lacus interdum egestas. Pellentesque ut neque a libero volutpat cursus. Fusce ac quam elementum, pretium orci et, rutrum erat. Phasellus vulputate quis magna nec accumsan. Integer fermentum quam in euismod tincidunt. Praesent tincidunt, mauris at ultrices faucibus, ante risus condimentum lectus, sit amet faucibus metus justo at massa. Ut iaculis interdum elit sit amet rutrum. Sed sed metus in mi laoreet iaculis at et lacus. Aliquam mattis pharetra erat sit amet vulputate. Morbi vitae erat in tellus commodo convallis semper quis dolor. Donec commodo pulvinar nunc, vitae eleifend justo sodales vel. Duis elementum sed augue quis semper. Curabitur lorem velit, facilisis a nisl id, finibus sagittis orci. - -Pellentesque rutrum in ligula vitae cursus. Donec eu sagittis urna. Quisque magna est, laoreet eget dignissim in, elementum ut est. Donec vitae mi tempus, pellentesque nulla eu, ultricies massa. Sed rutrum ligula mi, id viverra sapien accumsan sit amet. Vivamus egestas, felis nec feugiat blandit, nibh lacus mattis massa, at rutrum dolor orci eget magna. Sed aliquet quam lorem, et posuere neque blandit rhoncus. - -Sed luctus turpis et mauris iaculis, quis euismod libero aliquet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas tortor odio, vulputate sagittis suscipit eu, posuere sit amet dui. In nisi sem, euismod maximus interdum quis, facilisis eget nunc. Fusce vulputate quam in massa sollicitudin, eu posuere massa pulvinar. Nulla feugiat ultrices fermentum. Mauris fringilla est id diam malesuada condimentum. - -Maecenas nulla mauris, tempus vel erat non, fermentum gravida leo. Duis hendrerit tortor arcu, tempor viverra lectus pretium ac. Pellentesque convallis turpis purus, a vehicula nulla vulputate in. Morbi neque ante, rutrum et orci eu, blandit dapibus velit. Vestibulum varius imperdiet magna, vitae iaculis libero pretium hendrerit. Curabitur nec lacus varius, malesuada orci vel, faucibus neque. Donec tortor massa, sollicitudin sit amet feugiat at, imperdiet sit amet massa. Nunc at lobortis arcu, a dictum leo. Aliquam at erat odio. - -Ut neque felis, molestie vitae erat sit amet, venenatis commodo orci. Nunc libero purus, ultricies efficitur pretium quis, tempus eget purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque at fermentum magna, at fermentum purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur nunc lectus, lacinia vitae turpis sit amet, hendrerit pellentesque est. Etiam eget ex feugiat, rhoncus quam quis, commodo eros. Aenean laoreet nisl vitae tellus efficitur, at luctus nisi elementum. - -Vestibulum tincidunt vehicula nisl, nec auctor felis pretium eget. Aenean egestas cursus mauris, non mollis quam auctor ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam egestas leo sed aliquam sodales. Phasellus faucibus tortor ut ligula rhoncus hendrerit. Curabitur facilisis euismod ultrices. Nullam molestie, nulla ut facilisis accumsan, leo ante commodo neque, vitae eleifend lectus libero et leo. Phasellus id dapibus urna, id cursus lectus. Donec maximus, dui feugiat porta bibendum, orci diam venenatis ante, non rhoncus urna ante eget risus. Proin vitae erat nec elit pulvinar suscipit ac nec velit. Donec mollis nisl ut fringilla fringilla. Nulla dapibus nec nibh a blandit. Integer at enim posuere justo rhoncus tristique nec vel velit. Donec placerat, neque venenatis aliquet pellentesque, sapien eros posuere dui, quis dapibus arcu est eget turpis. Ut id faucibus dolor. - -Cras sed porta massa. Suspendisse non risus erat. Mauris ut justo id augue mattis iaculis. Curabitur eget velit urna. Sed blandit sodales rhoncus. Integer a libero nulla. Vestibulum sit amet euismod lacus. Nullam non metus at mi congue tincidunt ac id lorem. Pellentesque tellus risus, sodales nec nibh nec, ullamcorper semper turpis. Fusce nunc leo, ultricies a massa blandit, cursus interdum enim. Nulla at quam at libero volutpat eleifend sit amet ut nunc. Morbi pellentesque est elit, eget suscipit nisl eleifend nec. Maecenas tincidunt, eros at lacinia cursus, mauris nisl efficitur massa, eu tincidunt mi erat vel nisi. Suspendisse tempor euismod neque, eget sollicitudin massa ornare in. Suspendisse consectetur, purus quis laoreet dignissim, nisi purus mollis risus, eget accumsan magna erat ut magna. Morbi quis velit tortor. - -Etiam et neque semper, porttitor ipsum eu, vulputate arcu. Donec aliquam ornare eros, at malesuada nulla luctus sed. Phasellus tincidunt maximus enim quis porta. Praesent diam felis, aliquet vitae imperdiet pellentesque, interdum quis metus. Nullam ultricies lorem nec consequat euismod. Sed ornare condimentum magna. Quisque elementum gravida dignissim. In id massa gravida, maximus ex a, placerat ligula. Nullam scelerisque metus at consectetur interdum. Morbi bibendum neque nisi, vitae tincidunt urna eleifend eu. Aenean pharetra ullamcorper purus, vel efficitur mi. Aenean tincidunt malesuada blandit. - -Nam a venenatis nibh. Duis consectetur nulla vitae felis fringilla, sit amet elementum felis efficitur. Donec vitae dignissim sem. Donec vitae urna feugiat, pellentesque ipsum eu, consectetur nunc. In feugiat nisl ante, eget auctor orci fringilla eget. Vestibulum a risus vitae nisi hendrerit malesuada iaculis in augue. Nulla eu luctus est, ac eleifend nulla. - -Nam iaculis blandit lacus, at iaculis sapien blandit a. Sed quis feugiat urna, nec facilisis orci. Nunc pharetra euismod neque eu cursus. Maecenas eu lorem mattis, sollicitudin tortor sed, suscipit est. Curabitur a elit et nibh efficitur placerat eget eget dolor. Phasellus vitae mattis nisi, sed vehicula arcu. Nunc gravida tortor quis nisi tristique interdum. Vivamus augue enim, sagittis ac tellus vel, finibus facilisis ligula. Nullam gravida feugiat est elementum congue. Nullam vel semper felis. Sed id lorem euismod, auctor tortor eget, vestibulum metus. - -Nulla facilisi. Praesent ut bibendum velit. Phasellus id erat et dui semper rutrum quis id metus. Aliquam vitae orci et erat imperdiet dapibus et ac magna. Duis at urna odio. Phasellus ultricies, libero sed fringilla dictum, felis nisi aliquet eros, nec maximus sapien mi vel urna. Aliquam erat volutpat. Nunc dictum turpis nec neque commodo efficitur. - -Curabitur eget tincidunt nisi. Ut sit amet mollis felis, at suscipit nulla. Phasellus augue turpis, facilisis nec mi ac, venenatis mollis ipsum. Donec feugiat porta velit, nec dictum odio. Duis faucibus, ex non aliquet consequat, diam enim consectetur nunc, quis dapibus metus turpis quis diam. Etiam vel velit purus. Morbi mollis maximus purus at viverra. - -Proin id volutpat tortor. Nam consectetur ac tortor id placerat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam in nunc id odio ullamcorper maximus sed sed elit. Sed ut elementum ex. Cras tincidunt massa urna, sed consequat lacus finibus ut. Mauris rutrum ex at ipsum volutpat posuere. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc nisi est, egestas at felis eget, facilisis commodo lectus. Vivamus sapien lorem, hendrerit ut neque eu, condimentum pellentesque justo. Proin magna orci, ultricies non porttitor vel, tincidunt at nibh. In malesuada in mi eget aliquam. - -Aenean placerat urna eu tortor interdum aliquet. Vestibulum volutpat, ipsum non pretium hendrerit, nisl libero interdum enim, quis vulputate ligula leo ullamcorper neque. In viverra convallis turpis, elementum aliquam metus aliquam sed. Suspendisse vitae quam ac nulla condimentum rhoncus. Ut quis fermentum ipsum, nec faucibus neque. Sed cursus faucibus ligula ac pharetra. Etiam faucibus, massa eget condimentum finibus, tortor magna tristique nisl, et sagittis nisi enim ut enim. Nunc vehicula, ligula quis congue pulvinar, sem diam rhoncus libero, eget facilisis odio mi quis elit. Nullam et viverra mi, ut tincidunt purus. In dapibus risus in ligula rhoncus, sit amet interdum libero tincidunt. Morbi vehicula hendrerit lacus id fringilla. In maximus condimentum felis sed venenatis. Nullam sed mi ante. - -Donec pharetra commodo porttitor. Maecenas nulla mi, tempor vel est quis, aliquet dictum ligula. Vivamus maximus bibendum quam, vel mattis dolor bibendum convallis. Ut commodo finibus turpis, nec sollicitudin turpis cursus ac. Nullam sit amet nunc vitae sem aliquet aliquet ac sit amet risus. Ut viverra purus eget mauris facilisis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed id tincidunt leo. Donec aliquet lacinia metus vitae elementum. Donec sed imperdiet enim. Morbi congue vehicula porttitor. Sed lobortis commodo sem, et pharetra velit facilisis id. Integer commodo feugiat urna, quis vulputate ligula sagittis eget. Proin cursus vitae velit sed dignissim. Aenean elementum consectetur porttitor. - -Ut in interdum mauris. Cras tortor nulla, dapibus nec nisl vitae, interdum molestie lacus. Nunc sed porta erat. Mauris ac ultrices odio. Curabitur porttitor lacus ac massa ultricies condimentum. Integer ut accumsan ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed sollicitudin, ligula porta hendrerit vestibulum, tortor erat facilisis ante, vel dignissim est ipsum eget turpis. Phasellus rutrum pharetra massa, eleifend congue neque euismod eu. - -Nullam tristique eros id erat pharetra pretium. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras ut felis congue, elementum diam sed, elementum est. Donec sagittis nulla at auctor placerat. Duis gravida ex risus, et tristique enim dignissim a. Pellentesque urna velit, pretium ut libero imperdiet, eleifend volutpat tortor. Phasellus non vehicula felis, sed hendrerit justo. Pellentesque iaculis efficitur accumsan. Proin diam nisi, auctor sit amet molestie ut, pretium a felis. - -Aliquam quis nunc vulputate dui hendrerit porta. Duis non sapien eget dolor suscipit dapibus vel at urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla pharetra dignissim leo, a pellentesque eros vulputate sit amet. Sed augue turpis, consequat id tincidunt non, congue et eros. Ut enim dolor, egestas euismod volutpat a, posuere ut enim. Donec eget nisl ut erat semper dignissim id ut massa. Sed maximus vitae orci at euismod. Ut sit amet lorem sed magna cursus tempor ut sit amet odio. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed a turpis non ipsum pharetra vulputate id eu metus. Integer a tristique dui, sed vehicula metus. Fusce vehicula erat id nulla posuere, a venenatis neque gravida. Ut lobortis, leo eu ornare ultricies, dolor tortor volutpat arcu, ac auctor augue dui vitae felis. Aliquam placerat enim nec sem volutpat, a scelerisque eros gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce venenatis feugiat tempor. Nullam non dictum mauris, vitae venenatis sapien. Aliquam scelerisque ligula in libero condimentum facilisis. Mauris non arcu quis enim placerat blandit. Duis hendrerit sapien vehicula, gravida metus at, elementum leo. In fringilla mauris non est consequat fermentum. Integer turpis libero, tempor eget sapien nec, ultricies imperdiet tortor. - -Pellentesque quam nisl, condimentum eu mauris nec, faucibus fringilla augue. Proin vitae sagittis nibh. Nunc et aliquet nisl. Morbi volutpat imperdiet diam et sagittis. Vivamus imperdiet risus ut purus interdum gravida. Morbi consequat posuere dictum. Aenean enim quam, venenatis at odio ac, pellentesque condimentum massa. Vivamus nisl sapien, scelerisque a posuere vel, ullamcorper semper sem. Morbi sollicitudin tempor neque ut molestie. Donec in lectus pretium, venenatis diam id, pharetra metus. Duis lorem tellus, condimentum eget cursus vitae, tristique id est. Donec at nisi porttitor, blandit enim at, euismod sapien. Nam augue quam, sagittis sed enim eu, iaculis dapibus leo. Aliquam aliquet commodo turpis a commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur auctor, sem id semper dictum, augue eros sollicitudin elit, at vestibulum nisi ex et purus. - -Vivamus imperdiet ultrices commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. In lorem lacus, volutpat et ligula quis, facilisis sodales mauris. Quisque ultrices elit eget mauris accumsan condimentum. Vivamus risus lorem, sollicitudin vel scelerisque ut, ultricies ut lacus. Nunc id magna erat. Proin non interdum nulla. Maecenas quis ligula tellus. Pellentesque quis lorem eget augue auctor gravida eu in nisi. Maecenas at auctor nunc. Quisque volutpat lorem sit amet feugiat gravida. Praesent mattis tortor ligula, at placerat eros dapibus sit amet. Etiam imperdiet nisi ut ipsum eleifend, quis laoreet velit porttitor. - -Fusce id ullamcorper erat. Aliquam vel consequat eros, quis tempor dolor. Vivamus ut orci eu nisl congue dapibus non in massa. Integer maximus laoreet mi dictum ultrices. Proin dignissim dui eu accumsan rhoncus. Quisque varius cursus arcu at finibus. Sed auctor lacinia metus vitae viverra. Nam vel sapien placerat, bibendum elit sit amet, sagittis turpis. Nunc a commodo felis. - -Integer vehicula elementum feugiat. Proin eget libero ante. Aliquam in odio lacus. Etiam pretium imperdiet odio sed posuere. Quisque at magna id nisi tempor rhoncus sed et metus. Duis porta, sapien sed malesuada finibus, nunc dolor sodales purus, in ullamcorper libero nisi in nisl. Maecenas vitae nisl velit. Suspendisse potenti. Integer egestas, mi eu dictum accumsan, nulla odio congue massa, nec placerat ligula lacus quis mi. - -Sed sem neque, convallis vitae faucibus ornare, malesuada a risus. Nulla convallis, dui nec tincidunt porttitor, lectus arcu suscipit elit, in tristique lacus urna ac velit. Fusce in arcu eget est condimentum volutpat ac nec tortor. Curabitur dapibus odio tortor, in congue ex elementum eget. Vivamus laoreet elit massa, id elementum orci sagittis at. Curabitur interdum, odio eget convallis aliquam, lorem diam luctus leo, vitae feugiat ligula nibh at nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum non mauris molestie, mattis mauris id, fermentum lorem. Morbi nibh purus, facilisis vel tristique in, gravida in ex. Vivamus tincidunt urna at ex efficitur, eu dapibus nulla convallis. Proin vel pulvinar nibh. Donec aliquet semper orci et gravida. - -Nunc ornare et urna quis sagittis. Cras non dictum metus. In ac laoreet sem. Cras ornare libero sem, ut aliquet ipsum ornare laoreet. Donec id euismod tortor. Etiam odio mi, hendrerit ac urna vitae, gravida maximus mauris. Cras sed euismod neque. - -Vestibulum porta tristique placerat. Phasellus nec felis vel leo gravida faucibus in at neque. Maecenas felis dolor, sagittis vel elit eget, scelerisque egestas urna. Integer consequat nulla a urna euismod, ac feugiat sapien rhoncus. Nunc sit amet elit at urna aliquam bibendum id sed neque. Vestibulum non dictum mauris, tincidunt finibus purus. Donec posuere enim vel bibendum gravida. Ut elementum tortor a diam pharetra aliquam. Fusce ut nisi ut libero rhoncus scelerisque. - -Integer libero lorem, molestie non elit a, convallis tristique dui. Fusce sodales convallis ullamcorper. Cras eleifend lobortis erat sit amet cursus. Nam vel ipsum eros. Integer sed aliquam risus. Quisque dictum vulputate eros et iaculis. Etiam ac ultricies nisl. Nunc et nibh ut neque egestas porttitor. Aenean in laoreet lectus. Praesent et egestas arcu. Sed ullamcorper, enim ut fermentum euismod, odio nisi tempor nisl, sed feugiat mi nulla a libero. Integer cursus sagittis est, ac dapibus est mollis eget. - -Donec blandit placerat ex. Aliquam erat volutpat. Duis et odio tempus leo porttitor porttitor eu ac dolor. Mauris imperdiet, sapien sed suscipit pellentesque, nulla odio placerat nibh, et scelerisque ex tortor posuere enim. Aliquam fringilla porta cursus. Nullam sollicitudin, ante quis bibendum imperdiet, nisi sapien lacinia velit, eu vehicula justo turpis in leo. Morbi sit amet vulputate sem. Fusce fringilla tellus mi, in pellentesque tellus sollicitudin sit amet. Nunc venenatis lorem ac odio convallis, nec cursus arcu bibendum. Vivamus imperdiet maximus pellentesque. - -Nulla facilisi. Donec arcu sem, auctor at nisi a, bibendum maximus nulla. Phasellus sed diam facilisis, faucibus ligula sed, ultricies sapien. Aenean varius ut ligula tempor vehicula. Suspendisse pulvinar ipsum tincidunt varius lacinia. Ut enim mi, pulvinar vitae ex non, euismod sodales est. Donec porta molestie ex at ornare. Nam vehicula interdum dictum. Sed viverra sapien sed vehicula laoreet. Nulla eget turpis vel sem interdum rutrum. Vestibulum a dolor id purus mattis blandit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Nulla in arcu interdum, blandit mi vitae, imperdiet tellus. Maecenas egestas fermentum enim vitae vestibulum. Nulla dictum lorem ut justo interdum, eget placerat dolor elementum. Vestibulum sit amet pulvinar elit. Maecenas id mauris quam. Integer iaculis felis convallis, blandit sapien nec, pretium urna. Integer quis pellentesque enim. In egestas sit amet massa vitae pharetra. Cras non ultricies arcu, quis pretium sem. Donec fermentum eleifend risus cursus pellentesque. Quisque sodales ultricies dolor rutrum lacinia. In hac habitasse platea dictumst. Sed lacinia purus in arcu congue, sed scelerisque turpis iaculis. Phasellus a venenatis erat, ut tristique nulla. Vivamus dapibus felis id ex laoreet, nec feugiat libero posuere. Aenean et massa id diam dignissim iaculis. - -Vivamus est ligula, interdum vitae sagittis ac, finibus a nunc. Aenean maximus mollis dapibus. Vestibulum blandit urna quis metus finibus, at malesuada augue pulvinar. Proin consectetur ut ante vel maximus. Sed ut ex accumsan, consequat nisi in, suscipit sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam volutpat id velit sed suscipit. Phasellus id viverra dui, vel suscipit ligula. - -Donec semper ac ipsum in consectetur. Sed id eleifend ante, at pulvinar tellus. Quisque at mauris ex. In sit amet velit vitae nunc posuere dictum quis in mi. Proin lectus risus, finibus sit amet consequat ac, fringilla ut mauris. Proin et mi nisl. Maecenas condimentum dapibus mi id dapibus. Cras ullamcorper pulvinar justo ut egestas. Nam feugiat dui ac odio mollis, quis congue est efficitur. Vivamus luctus tristique ipsum, quis egestas lacus mollis id. Proin id placerat sapien. Sed et sem sed ex iaculis volutpat. Mauris eu interdum magna. Mauris vehicula, enim eu placerat sagittis, metus mauris molestie neque, ut fermentum nibh nisi quis tortor. - -Sed sagittis sem erat, vitae tristique purus tempor at. Nullam id urna mollis, aliquet ex eget, varius sem. Donec scelerisque cursus nulla, vel imperdiet ipsum cursus et. Vestibulum condimentum lorem neque, at auctor orci placerat sit amet. Vivamus felis metus, sodales vitae sollicitudin non, condimentum a leo. Praesent fermentum nisi eget ex tempus luctus. Cras sodales turpis nec ultrices placerat. Sed efficitur erat eu felis tempor, eget suscipit ligula porttitor. Cras a porttitor ante, a vehicula enim. Ut malesuada tellus lectus, nec tincidunt leo dapibus non. Phasellus at purus commodo, hendrerit lectus eu, scelerisque massa. Vivamus ex ligula, placerat id augue sit amet, tempor pretium augue. Curabitur aliquam lorem a venenatis pretium. Etiam quis efficitur lacus. Donec nec felis nulla. - -Nunc malesuada ipsum ut scelerisque condimentum. Suspendisse sapien elit, ornare et egestas in, ultricies nec nibh. Ut egestas, nunc in molestie cursus, velit arcu tempus nisl, non interdum ligula augue cursus nulla. Fusce pretium in odio non eleifend. Donec eu condimentum tellus. Ut vel nisl dictum, sollicitudin urna a, lobortis dolor. Proin malesuada ante in molestie feugiat. Duis leo sapien, porttitor finibus porttitor non, egestas ut nisi. - -Duis vel volutpat sapien. Mauris mattis nec lorem et vulputate. Nunc vitae nulla laoreet, dapibus magna finibus, lacinia orci. Quisque vestibulum ipsum id tortor blandit, in molestie elit eleifend. Maecenas sed leo aliquet nunc tincidunt ullamcorper quis ut sem. Vestibulum lectus leo, molestie ut sem at, accumsan consequat dolor. Phasellus sem elit, mollis vel tempor ac, bibendum vel sapien. Maecenas sed pulvinar odio. - -Cras vitae justo sed quam congue consectetur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer dignissim, velit vel commodo cursus, libero mauris sollicitudin nulla, id molestie velit dolor et dui. Ut at turpis vitae magna viverra tristique quis a nisi. Nulla sapien quam, cursus ac mauris in, suscipit placerat purus. Cras eget purus volutpat, egestas justo sed, porttitor ante. Vestibulum efficitur mattis fringilla. Integer sit amet consectetur massa. Phasellus non nunc et nisl semper fringilla. Praesent aliquam enim non lectus sodales, vel pretium elit sodales. Suspendisse vel dapibus elit, lobortis placerat magna. Aliquam molestie mi vitae nisi condimentum volutpat. - -Nulla quis lorem turpis. Nullam placerat iaculis nulla, hendrerit tincidunt eros vestibulum vitae. Mauris nulla justo, ultricies non sapien et, volutpat finibus diam. Proin in fringilla risus, vitae faucibus lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut non posuere eros, ut fermentum lorem. Pellentesque mauris quam, vulputate nec erat a, efficitur varius elit. Sed commodo ullamcorper sem, eu sodales ipsum porttitor sit amet. Vivamus sodales tristique augue. Nam risus diam, feugiat vitae molestie eget, fringilla quis ante. Aenean eu massa sed tortor pulvinar condimentum. Pellentesque gravida ornare iaculis. Maecenas nec metus sem. In malesuada enim quis quam mattis, sed convallis metus varius. Mauris fermentum neque eu ipsum lobortis malesuada. - -Sed purus enim, bibendum sit amet lacinia id, accumsan sed justo. Proin eget accumsan turpis, fermentum convallis lorem. Mauris scelerisque luctus elit, a sodales eros ullamcorper a. Suspendisse sed ornare dolor, non vehicula enim. Ut efficitur diam eu metus. - - - -Quisque interdum feugiat quam vel aliquam. Curabitur imperdiet ultricies mi accumsan aliquet. Nam in arcu accumsan, faucibus est ut, iaculis eros. Fusce fermentum, risus sit amet sollicitudin placerat, diam velit ullamcorper nibh, ac ullamcorper nunc turpis a nunc. Nam sodales diam eget felis semper vulputate. Morbi tempus est purus, id lobortis justo viverra eu. Aliquam semper metus nibh, id laoreet ante luctus sed. Sed eget tincidunt tortor, in vestibulum diam. Nulla ac venenatis tortor. - -Vivamus dui ex, sollicitudin eget dui et, ultricies imperdiet tellus. Praesent a diam ut est egestas condimentum sit amet ut eros. Fusce velit leo, tincidunt hendrerit ullamcorper nec, commodo in augue. Donec pellentesque sodales nisl elementum tempor. Proin hendrerit porttitor hendrerit. Sed purus lacus, placerat at purus in, bibendum semper eros. Nulla elit dui, convallis id mollis vitae, lobortis ac elit. Proin condimentum in purus ut faucibus. Mauris ac sodales augue. - -Nullam venenatis fringilla tempus. Duis aliquet enim erat, a bibendum dui semper at. Aenean porta ligula ac justo dictum elementum. Aliquam erat volutpat. Vivamus nulla mauris, ultricies ut pharetra id, pulvinar sed felis. Vestibulum elementum cursus ultricies. Ut feugiat dolor vel egestas condimentum. Integer in lobortis metus. Duis volutpat ligula bibendum, condimentum magna vitae, gravida augue. - -Mauris a sem elit. Etiam at dolor enim. Nullam maximus ornare lectus et lobortis. Quisque mattis metus diam. Suspendisse potenti. Integer ornare dolor quis lorem dapibus, quis suscipit orci cursus. Maecenas facilisis laoreet tortor ac iaculis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies ante quis nulla gravida, vel facilisis sapien consequat. Nam ligula quam, gravida sed dolor quis, vehicula varius orci. Maecenas egestas fermentum luctus. Donec efficitur tellus nulla, eu gravida diam tristique in. - -Quisque non ullamcorper leo, at viverra lacus. Curabitur malesuada magna nec urna ultrices lacinia vel ultricies magna. Etiam facilisis mauris velit, vehicula pulvinar quam gravida at. Donec molestie arcu in ipsum aliquam interdum. Phasellus vel semper dui, ut maximus nisl. Integer at nunc sit amet justo pellentesque tincidunt. Etiam sed euismod nibh, sollicitudin efficitur odio. Curabitur pretium odio eget enim commodo, at consectetur metus pulvinar. Suspendisse posuere ipsum at feugiat porta. Curabitur luctus imperdiet diam nec dignissim. Nulla facilisi. - -Proin pharetra tincidunt dui vitae fermentum. Donec eget venenatis enim. Mauris sollicitudin ipsum at urna condimentum, quis malesuada eros tempor. Duis elementum viverra ipsum, vel sollicitudin urna rhoncus id. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Morbi facilisis sapien mattis lorem mattis sollicitudin. Integer non libero cursus quam cursus tristique. Nulla consequat est magna, in elementum nisl maximus euismod. Morbi a lacus et quam feugiat imperdiet. In finibus erat id posuere dictum. Donec sit amet mollis diam. Pellentesque pharetra tellus eget interdum dapibus. - -Vestibulum luctus at massa eget porttitor. Aenean blandit massa eget sapien convallis congue. Phasellus aliquam blandit risus, nec sollicitudin quam sollicitudin quis. Phasellus at odio et tortor molestie vulputate eu vitae leo. Curabitur ut turpis sem. Fusce et nisi vel risus accumsan tristique quis nec erat. Suspendisse potenti. Nullam vehicula molestie dolor eu finibus. Mauris ut dignissim arcu. Pellentesque ac hendrerit augue, eget scelerisque lacus. - -Nunc non est metus. Etiam ac mauris nec libero molestie egestas. Nunc aliquet nisl id felis ultrices pretium. Integer sapien neque, maximus vulputate arcu sit amet, congue tempor leo. Sed vel leo dolor. Vestibulum et dui venenatis, dignissim nisi eget, vehicula erat. Curabitur vitae justo et ligula semper fringilla vitae sit amet neque. - -Cras faucibus leo est, vel faucibus nisl pretium non. Integer mattis mi eu nisi ultricies maximus. Quisque semper consequat urna eu tempus. In at viverra nisi. Phasellus et arcu id nisi vehicula mattis sagittis eget orci. Praesent fringilla diam eget auctor elementum. In at est sem. Integer in mi arcu. Cras interdum elementum leo, ac tempor est vestibulum a. Integer et elit ipsum. Quisque nec nulla sit amet nisl mollis auctor viverra sed lacus. - -Phasellus et hendrerit mauris, tincidunt consectetur ligula. Curabitur volutpat gravida commodo. Ut ultricies varius magna, quis ullamcorper lorem pharetra quis. Suspendisse tempor nisi vel nunc gravida semper. Nunc molestie ac augue vel bibendum. Etiam ullamcorper vehicula rhoncus. Sed tempus ac mauris sit amet viverra. Etiam consequat egestas quam. Nulla maximus arcu in faucibus venenatis. Curabitur auctor eu mi faucibus fermentum. Duis varius magna est, eu rhoncus libero varius non. Donec aliquet pretium sapien vel egestas. Etiam vel velit lorem. - -Etiam nisl mi, semper nec convallis sit amet, cursus sed lacus. Duis dictum velit eget nisi consectetur, ut gravida dolor sollicitudin. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac neque diam. Aliquam euismod vitae nisl vel interdum. Vivamus sollicitudin ac metus in accumsan. Nunc dui massa, mattis vitae fringilla mollis, ultrices quis elit. Mauris blandit elementum nulla, sit amet dignissim risus euismod et. Fusce placerat ex ac odio pharetra, vitae porta lectus tristique. Suspendisse ultricies, est malesuada semper varius, ex erat tempor libero, non semper nisi justo quis nibh. - -Duis id egestas orci. Duis vitae tempor purus. Donec tristique justo id consectetur fermentum. Donec tempus lectus id elit accumsan eleifend. Pellentesque pretium, nibh vitae porta volutpat, tortor ex aliquam purus, vel tincidunt nisi augue a velit. Ut non purus blandit, consectetur lectus a, molestie nulla. Ut convallis lacinia mauris et hendrerit. Donec maximus, tellus sit amet porta consectetur, odio turpis feugiat risus, eu mollis felis massa vel erat. Nulla fringilla sem sit amet magna cursus iaculis. Pellentesque ac lorem nec tellus mollis congue. Fusce ornare gravida magna nec fringilla. In ut rutrum arcu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent pretium placerat elit nec ultrices. - -Mauris vitae erat id diam ornare eleifend non nec nisi. Maecenas eget dolor id libero dignissim euismod at nec justo. Nulla in commodo tortor. Nullam eleifend sem ac purus imperdiet, ut aliquet nibh vulputate. Suspendisse sed consectetur nunc, sed pulvinar sem. Mauris eget leo lectus. Phasellus a ante varius, dignissim odio vitae, elementum nisl. Aenean ac urna vel sem ullamcorper tincidunt scelerisque non enim. Fusce nec est eu eros convallis semper. Etiam nec nisl nunc. - -Mauris fermentum erat et sapien imperdiet egestas. Mauris ac eros ut nisi volutpat viverra et quis nibh. Quisque nibh dui, pellentesque malesuada lectus vitae, laoreet tempus nulla. Pellentesque eget libero egestas, bibendum lectus sed, sollicitudin purus. Quisque quis dictum orci. Quisque rutrum accumsan fermentum. Quisque viverra, urna sed cursus euismod, lectus mauris bibendum eros, et mattis massa neque nec eros. Donec maximus vulputate justo, et faucibus mi mattis ut. Donec at iaculis sapien. - -Proin sit amet mi mattis, vestibulum elit eu, scelerisque ante. Integer malesuada aliquet convallis. Maecenas pretium vitae ipsum sit amet iaculis. Quisque tincidunt nisi nisi, eu viverra massa feugiat in. Integer porttitor euismod libero at placerat. Maecenas pellentesque turpis placerat ante condimentum, ac congue lorem rutrum. Nulla ligula turpis, mollis vitae dignissim quis, faucibus et ligula. - -Donec a pulvinar justo. Praesent sed aliquet velit. Donec placerat blandit mi. Vivamus vulputate tempor accumsan. Vestibulum sit amet facilisis lacus, vitae consequat nisi. Nam aliquet nulla quis pulvinar tristique. Suspendisse rhoncus suscipit ipsum, sed sodales sem mattis interdum. Aenean interdum tristique tellus, tempor vestibulum nisl cursus ac. Nulla neque turpis, convallis at dapibus non, fermentum quis quam. Aenean eget ligula volutpat, aliquam leo sit amet, sagittis ligula. Suspendisse efficitur vel massa vitae dignissim. - -Mauris semper iaculis vulputate. Donec efficitur non ante quis pretium. Curabitur in dictum urna. Nullam imperdiet nisi eu leo lacinia egestas. Cras blandit mi nisi, sit amet condimentum justo tempor at. Cras ac arcu eu velit sodales tincidunt. Nunc tincidunt, felis vel fringilla sollicitudin, massa dui consequat lectus, sed dictum est dui at lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur condimentum tortor ac sagittis luctus. Suspendisse sed tincidunt lectus. Duis aliquet, libero imperdiet finibus tempus, lorem mauris ullamcorper nunc, at bibendum augue odio vitae tellus. Suspendisse ultrices, eros vel gravida molestie, turpis nisi rhoncus erat, a interdum est sapien et odio. - -Duis viverra dictum lectus vitae gravida. In hac habitasse platea dictumst. Sed vel lacinia diam. Aenean maximus elit vel ante sagittis, eu vehicula eros pharetra. Etiam pharetra diam at orci lacinia, nec posuere quam laoreet. Donec maximus quis felis vel aliquet. Morbi pulvinar dui a ipsum egestas, eget pharetra est fringilla. Vestibulum eget accumsan libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sollicitudin condimentum quam, quis placerat nunc imperdiet at. Vivamus ultrices, velit at maximus viverra, magna tortor imperdiet justo, sit amet fringilla lectus dolor facilisis urna. Sed placerat tristique lorem, ac elementum urna iaculis nec. Sed dapibus nisl eget scelerisque consequat. - -Etiam et dapibus nisi. Aliquam non finibus dui, lacinia condimentum enim. Sed ornare et lectus sed fermentum. Aliquam sed imperdiet arcu. Nullam pellentesque, dolor quis consectetur maximus, elit odio sagittis nibh, ut cursus augue nulla a orci. Etiam dictum mollis vehicula. Phasellus sagittis, risus quis semper dictum, nunc risus ultrices purus, et condimentum neque lorem nec libero. Donec posuere, libero eget ullamcorper pharetra, purus metus hendrerit nisl, ut viverra ante libero ut enim. Nunc vitae quam pellentesque, dictum arcu et, lacinia diam. Nunc in tempus sapien, nec dignissim justo. Curabitur elit tellus, placerat non congue id, pellentesque ut tellus. Nulla nibh eros, hendrerit nec venenatis in, consequat et odio. - -Sed quis pellentesque velit. Suspendisse cursus volutpat malesuada. Sed nec diam ac ipsum finibus sodales. Fusce tincidunt tempus urna, vestibulum tincidunt arcu imperdiet in. Donec arcu turpis, vestibulum aliquam volutpat ut, vulputate non lectus. Ut tristique faucibus blandit. Aliquam erat volutpat. Nulla facilisi. Sed in mattis lectus. Suspendisse potenti. Quisque dapibus fringilla orci, quis ultricies est volutpat non. - -In sit amet est condimentum, sollicitudin mauris non, egestas leo. Nulla facilisi. Phasellus venenatis, erat at lobortis dignissim, ligula enim ultricies felis, pulvinar egestas urna ante in tellus. Nam at lectus ante. Sed dictum vestibulum neque quis commodo. Aliquam laoreet metus ut mi placerat placerat. Sed feugiat nibh quis nulla fringilla bibendum sit amet nec purus. Vivamus ut leo quis sapien tempus lobortis eget ac odio. Suspendisse at ex id dolor fringilla mollis. Integer ex urna, congue ac turpis condimentum, hendrerit euismod tellus. In interdum aliquam tellus, a suscipit orci consectetur eu. Phasellus at odio at lectus sollicitudin luctus id nec diam. Nunc lacinia risus non aliquam malesuada. Proin rutrum consectetur lectus eget placerat. Mauris scelerisque nec nisl ac molestie. Sed sollicitudin scelerisque est, a hendrerit risus egestas in. - -Maecenas a quam condimentum, varius velit ac, pharetra neque. Morbi sagittis molestie nisl, eu luctus felis blandit sit amet. Maecenas accumsan nunc non justo ultricies blandit. Nulla non metus sollicitudin, pharetra dolor posuere, scelerisque tortor. Pellentesque euismod fringilla purus. Proin sed vehicula nulla. Vivamus scelerisque metus nunc, sed hendrerit dolor aliquet vel. Proin nec ante pulvinar elit pharetra cursus. In tempus lorem eros, ac auctor dolor tempor fringilla. Curabitur egestas imperdiet consectetur. Aliquam nibh tortor, dapibus eu orci a, ultrices condimentum urna. Etiam accumsan magna vel facilisis gravida. Mauris efficitur nisl dapibus orci luctus, sed bibendum mauris dictum. Quisque finibus lectus vel aliquet bibendum. - -Phasellus id augue nec magna viverra rhoncus nec at nibh. Mauris eu eros erat. Praesent finibus arcu non pretium cursus. In consectetur mi nec augue pretium, ac vulputate nisl luctus. Mauris sed gravida tortor, sit amet rutrum dolor. Aenean placerat dictum magna, vel condimentum est tincidunt at. Vivamus aliquet, dui ut pulvinar mattis, risus mauris malesuada ligula, et mattis neque ex eget lorem. Phasellus ut hendrerit tortor. Duis suscipit, eros a aliquam varius, arcu risus lobortis massa, et semper ipsum arcu sed sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vestibulum ipsum vitae enim malesuada, in aliquet justo ultricies. Ut volutpat gravida mi, elementum vehicula elit tristique eu. Curabitur ac nibh et ipsum placerat vestibulum vitae ac felis. Praesent turpis lorem, porta a mi quis, viverra cursus leo. - -Mauris tincidunt turpis eu lacus tincidunt rutrum. Quisque consectetur lectus at neque porttitor, non mollis urna ultrices. Duis eget semper est. Aliquam non elit vitae nibh condimentum tempor nec vel lacus. Etiam tempor lobortis ligula, ut pulvinar mauris tristique tempor. Sed bibendum vestibulum nisi sed tincidunt. Vestibulum vehicula tincidunt risus nec scelerisque. Integer convallis mi ac risus hendrerit porttitor. - -Proin in est viverra, sollicitudin nunc nec, dictum augue. Sed ultricies condimentum purus, ut ultrices ex eleifend sed. Aliquam porttitor sem nec quam accumsan commodo. Curabitur sed pellentesque urna. Duis eu ligula ac orci malesuada rutrum eget sit amet lacus. Nullam ut eros ex. Sed aliquet leo nec urna gravida volutpat. Integer imperdiet molestie ligula, ac convallis dolor. Suspendisse elementum ligula id risus dignissim, quis laoreet ante faucibus. Aenean porttitor sagittis commodo. Fusce justo purus, condimentum ut mollis vel, sollicitudin eget sapien. - -Sed interdum elit vel tortor convallis feugiat. Ut posuere ex nec venenatis interdum. Integer consectetur orci rhoncus tellus faucibus ullamcorper. Duis lacinia efficitur semper. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ultrices leo eget quam imperdiet, non tempor lacus condimentum. Cras vel dignissim diam. Mauris non maximus massa. Etiam a velit vel lacus ullamcorper faucibus. Curabitur quis facilisis nisi. In vehicula ut nulla vel consectetur. Duis iaculis eu tellus dictum mollis. Suspendisse eget rutrum odio. Vestibulum nec consectetur est, at vehicula velit. In a libero vitae lacus viverra sodales. - -Nulla interdum cursus leo, quis egestas elit auctor eget. Nullam mauris lacus, consectetur vitae augue non, commodo luctus justo. Cras porttitor aliquam eros in mattis. Morbi maximus libero neque, quis viverra magna fringilla quis. Ut aliquam ante vitae vehicula luctus. Sed congue a nulla et maximus. Vivamus porttitor felis sed augue gravida fermentum. Donec in lacus rutrum, finibus lacus ac, placerat quam. Proin placerat nunc vitae posuere iaculis. Etiam suscipit mi est, id congue diam commodo sit amet. Ut consectetur consectetur lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Aliquam erat volutpat. Curabitur convallis turpis sed massa cursus aliquet. Nullam id nibh ac ex accumsan tincidunt vitae nec nunc. Sed accumsan risus vitae ultrices semper. Sed ut sem eget arcu egestas sodales. Suspendisse facilisis risus in nulla condimentum suscipit. Nulla sed congue tortor. Etiam porttitor tellus lorem, non convallis arcu dapibus at. Nam vitae tristique dolor. Donec eu sem aliquam, tristique nulla ut, congue ante. Pellentesque vitae egestas turpis. Nam quis mauris consectetur purus elementum scelerisque. Vestibulum condimentum aliquet aliquam. - -Aliquam erat volutpat. Etiam et feugiat nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis est sodales, egestas odio fermentum, eleifend urna. Nulla sed volutpat nibh. Aenean ac placerat massa, elementum elementum lectus. Proin euismod, urna ut semper tristique, sapien ipsum aliquet risus, ut molestie odio sapien sed enim. Vivamus vestibulum purus risus, vel lobortis sem luctus vitae. Aliquam ultricies eu nulla id faucibus. Nunc eu odio ultricies, rhoncus lorem eget, pharetra sapien. Phasellus vitae neque ac sem ornare pharetra ut vitae purus. Sed malesuada tristique quam nec viverra. Sed condimentum, arcu id venenatis feugiat, massa tortor dapibus nisi, a facilisis lorem ligula semper mi. - -Donec lacinia felis laoreet sem dapibus mollis at a orci. Etiam viverra dolor nec magna tempus lacinia nec vel metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque eget quam massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas luctus, nunc sit amet egestas ultrices, nibh felis imperdiet est, id dignissim ante nibh non tellus. Ut eget lectus ipsum. - -Nullam porta diam ut arcu egestas congue. Nullam viverra nisi sed diam convallis eleifend. Nullam porta sed augue ullamcorper aliquet. Curabitur tempor sapien felis, at dictum dolor cursus nec. Nullam lorem risus, finibus non sollicitudin a, hendrerit vel diam. Praesent nibh nulla, semper id erat vitae, faucibus mattis nisi. Nulla ut libero id justo luctus convallis nec in tellus. - -In ultrices vel augue a pharetra. Donec accumsan malesuada massa vitae faucibus. Aenean consectetur nisi nulla. Praesent libero nisl, luctus eget vestibulum ac, ultricies sed ex. Sed lobortis ut elit a semper. Quisque dapibus bibendum gravida. Aenean porta vulputate nibh fringilla sollicitudin. Cras vel mi justo. Sed quis orci bibendum, hendrerit purus et, sollicitudin diam. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc ornare laoreet sem, non gravida sem pharetra sit amet. Morbi vel ullamcorper dui. Ut aliquam, enim sit amet molestie dignissim, quam orci gravida mi, sed mollis turpis mauris ut est. Nunc tincidunt enim a quam iaculis, sed dapibus diam dapibus. Donec malesuada commodo elit, eu blandit libero volutpat vitae. Fusce libero magna, tristique ut lacus eu, bibendum venenatis augue. Proin ornare augue et pulvinar lacinia. - -Nullam eget orci cursus, ullamcorper urna a, rhoncus orci. Morbi sed ipsum quis dui porttitor convallis. Ut ornare varius odio vitae varius. Sed sollicitudin sed risus nec varius. Aliquam placerat ac risus eu pulvinar. Vestibulum diam dolor, egestas nec purus et, molestie convallis sapien. Maecenas scelerisque mauris eu enim ultricies, id aliquam leo congue. Vestibulum imperdiet neque sed consequat condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eget porttitor turpis. Mauris vitae est eget justo porttitor imperdiet a et nibh. Cras elementum, lectus et vulputate eleifend, diam leo efficitur ipsum, eget finibus quam sapien at tellus. - -Vivamus dui metus, ornare at eros varius, facilisis malesuada mauris. Mauris laoreet felis at vestibulum pellentesque. Pellentesque fringilla elit orci. Pellentesque leo enim, sodales a consectetur eu, congue a eros. Aliquam eu dolor dui. Mauris turpis metus, volutpat id convallis sit amet, volutpat sit amet tortor. Donec eu tellus est. Suspendisse non leo urna. Etiam suscipit elementum mauris, ut pulvinar enim suscipit et. Sed ultrices pharetra tortor. Donec commodo enim sed massa dignissim, quis vestibulum lectus interdum. - -Duis vestibulum gravida dolor varius iaculis. Quisque id facilisis diam. Aliquam erat volutpat. Phasellus tincidunt pellentesque mi vitae facilisis. Nunc venenatis, arcu et commodo suscipit, purus mi rutrum odio, id aliquet lectus ex vitae dolor. Nulla ut commodo lectus. Phasellus interdum iaculis velit. Vestibulum eget malesuada tortor. Nam a tellus efficitur, iaculis augue nec, tincidunt felis. Maecenas molestie diam ut turpis iaculis facilisis. Aenean mattis magna eu est sollicitudin, quis faucibus ex tincidunt. Pellentesque maximus commodo metus vel malesuada. Aenean nec sapien dignissim, mollis augue vitae, gravida ex. - -Curabitur sit amet enim scelerisque, accumsan ex ut, facilisis leo. Nulla varius tortor neque, vitae imperdiet massa porttitor in. Cras quis magna justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tincidunt mi justo, a fringilla quam posuere sed. Quisque convallis lacus at euismod interdum. Vivamus cursus feugiat elit sit amet porttitor. Etiam eros magna, varius nec ex et, aliquam vulputate velit. Donec ac ligula non tellus eleifend convallis. Morbi posuere neque augue, et ullamcorper nisl rutrum eget. Aliquam augue nulla, malesuada nec cursus in, ornare at lacus. Pellentesque varius facilisis nunc sit amet venenatis. - -Nam ut tellus ullamcorper, finibus magna nec, semper elit. Fusce pulvinar nec purus blandit auctor. Ut egestas, est eget imperdiet aliquam, lectus purus ullamcorper neque, eget venenatis ligula magna ut leo. Ut fringilla ullamcorper risus sed tincidunt. Sed pulvinar vehicula tortor vel tincidunt. Nulla at vehicula ligula, sed rhoncus purus. Sed elementum, quam sit amet convallis finibus, nisi nunc venenatis mauris, sed luctus leo orci quis lacus. Maecenas venenatis est nec diam consectetur dignissim. Cras lacinia vehicula laoreet. Cras eu ex in nunc scelerisque imperdiet. - -Praesent eget nibh imperdiet, pulvinar dui eget, aliquet ipsum. Suspendisse eu hendrerit sem. In ac augue non enim porttitor pulvinar sit amet in mauris. Aenean vel justo quis metus facilisis feugiat nec eu nibh. In placerat, est sit amet blandit aliquet, erat nunc semper justo, eget pellentesque lorem mi quis neque. Pellentesque leo ex, semper sit amet accumsan nec, elementum id arcu. Vivamus faucibus ipsum non mollis imperdiet. Vestibulum sit amet sapien ac sem rutrum auctor a nec nunc. Pellentesque elementum sollicitudin tellus, vel malesuada lacus pretium eget. Nunc id nibh ac augue eleifend dictum. Etiam at tempus justo. - -Nunc bibendum risus sit amet ultrices congue. Nulla facilisi. Nulla id pulvinar erat. Curabitur libero odio, finibus et nisl eget, auctor gravida neque. Praesent nec interdum ex. Morbi gravida ante vel nisl cursus maximus. Vivamus vestibulum et quam ut facilisis. Vivamus vel erat lectus. Pellentesque finibus nisi eu sollicitudin pharetra. Pellentesque volutpat consectetur libero eget porta. Vestibulum fermentum ipsum sed dui tincidunt commodo. Mauris quis sodales elit. Nunc sodales felis hendrerit velit dignissim, nec finibus arcu sollicitudin. Phasellus a venenatis neque. Maecenas aliquam est quam, vitae viverra orci blandit ac. - -Donec interdum aliquet nunc, nec pretium turpis feugiat vel. Cras non justo cursus, ornare ligula tempor, auctor sem. Sed sed est sed nisl egestas consequat vitae vitae leo. Quisque leo elit, ultricies et eleifend porttitor, venenatis pellentesque leo. Integer elit urna, rhoncus a facilisis id, fermentum congue purus. Ut tempus pretium neque vitae mattis. Fusce id congue ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent imperdiet purus a nisl condimentum, sit amet rutrum enim maximus. - -Quisque leo quam, consectetur ac turpis vitae, pellentesque blandit mi. Duis quis suscipit tortor. Donec quis leo quis sapien ultrices gravida a eu mauris. Sed posuere nibh ut laoreet tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam turpis orci, tempor ac dignissim eget, maximus in purus. Praesent diam nulla, finibus eu feugiat sit amet, posuere at nulla. Ut vitae diam eu nibh ornare mattis at id ex. Proin faucibus efficitur mauris eu volutpat. In vel ullamcorper sapien, at tristique neque. - -Etiam accumsan est vel facilisis suscipit. Nulla congue orci in sem venenatis congue. Maecenas pharetra non nunc at euismod. Duis fermentum et sem non euismod. Nam tincidunt nisi a elit cursus varius. Maecenas vulputate eleifend consectetur. Aliquam erat volutpat. Donec consectetur sapien nec tellus facilisis consequat. Proin quis auctor felis. Donec et venenatis ligula, a convallis ante. Nulla tempor, mauris quis iaculis feugiat, lacus risus vulputate augue, ut facilisis nibh dui eget orci. Mauris leo dolor, rhoncus sed nisi id, molestie vehicula erat. Aliquam porta lacus id nibh mollis porta. Curabitur vel congue quam. Quisque ut ipsum blandit, imperdiet nisl sit amet, ullamcorper nulla. - -Sed purus enim, dictum ut eros eget, condimentum pharetra lorem. Suspendisse auctor nisi mi, at facilisis ligula luctus at. Nullam vulputate iaculis leo a fermentum. Aenean lobortis est vel elit convallis, id mollis lectus facilisis. Aliquam eu accumsan ante. Nunc aliquam vehicula diam, at ultrices diam vehicula at. Morbi mattis dapibus vehicula. Nulla nunc mi, gravida ac lacus ac, porta viverra mauris. Suspendisse potenti. - -Pellentesque scelerisque porta tellus quis commodo. Proin quam massa, cursus nec tellus eu, elementum dapibus lorem. Sed et tincidunt nisi, sed finibus turpis. Vestibulum dictum velit ultrices tempus placerat. Duis varius tempor scelerisque. Sed laoreet cursus magna, ac vulputate turpis imperdiet ultricies. Fusce lacinia posuere diam, ac vulputate justo ornare nec. In rutrum vestibulum purus. Sed ut enim convallis, ornare eros et, tempor massa. Aenean mattis nisl lectus, pharetra porttitor odio bibendum id. Etiam nibh quam, malesuada sed luctus eget, hendrerit ac ante. Aliquam vestibulum lectus at nunc convallis pretium. Praesent interdum turpis tortor, ac auctor turpis tristique id. Integer ac cursus elit. Quisque viverra massa neque, vel ullamcorper quam egestas id. - -Curabitur convallis ligula ipsum, non consequat turpis scelerisque vestibulum. Vestibulum blandit porta ante vitae vestibulum. Morbi sodales quis risus vitae porta. Nunc scelerisque congue dolor, a fermentum risus blandit a. Phasellus at nunc sed nibh feugiat pharetra vitae id leo. Vivamus volutpat leo nec ligula faucibus, at lacinia elit porttitor. Proin varius ligula et nibh aliquet, non malesuada nisl ornare. - -Aenean tempus bibendum aliquet. Morbi consequat nibh ex, at bibendum mauris pulvinar nec. Curabitur nec nibh sit amet elit fermentum volutpat quis non nisi. Praesent gravida, leo nec pulvinar condimentum, elit justo dignissim orci, sit amet iaculis lacus nisi ut sem. Fusce accumsan urna a arcu facilisis hendrerit. Proin ligula nulla, tempor vitae pretium non, finibus ut mi. Ut vestibulum est a lorem facilisis faucibus. Vestibulum et leo in velit consequat tempor. Integer ac purus et leo lobortis aliquam et vitae nulla. Quisque varius et nunc sit amet elementum. Vivamus nec lacinia odio, a maximus risus. Proin in justo eget odio porttitor tincidunt feugiat vel arcu. Sed fermentum augue ut mauris auctor, quis vestibulum lectus fringilla. Integer a mi maximus leo aliquet iaculis. - -Nam vel erat hendrerit dolor congue hendrerit malesuada vel sem. Morbi eget risus feugiat nisl tincidunt maximus eu sit amet leo. Maecenas quis cursus turpis, et scelerisque leo. Sed dui erat, imperdiet sed massa in, dictum tristique ligula. Quisque mauris diam, accumsan ac feugiat a, ornare at erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis at neque vitae nibh mollis egestas. Mauris sollicitudin lacus in neque facilisis, at varius mi eleifend. Vestibulum vulputate ipsum laoreet tortor pharetra, nec convallis turpis congue. Mauris in egestas mauris, condimentum aliquet tellus. Phasellus porttitor diam ut eros vehicula, dapibus maximus ipsum mollis. Nam congue neque lorem, eget ultricies nunc pretium a. - -Nullam tempus aliquam metus. Aliquam sit amet laoreet tellus. Aliquam mattis placerat maximus. Suspendisse varius dictum urna. Duis feugiat, est vitae molestie fringilla, enim leo porta ex, at dignissim libero nulla et nisl. Sed fringilla ipsum ac ipsum mollis, quis vulputate turpis ullamcorper. Quisque vel ante venenatis, placerat quam sit amet, placerat mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Sed suscipit in sapien in tincidunt. Aliquam erat volutpat. Duis vestibulum facilisis velit. Donec eget ante et lacus dictum aliquet. Nam et velit tellus. Maecenas rhoncus felis eget aliquet tristique. Pellentesque vehicula gravida lectus. Donec eget rhoncus metus. Etiam hendrerit arcu vitae nulla semper lacinia. Nunc ultricies magna a nisl lobortis consectetur. Nam nisi odio, molestie a gravida sed, consectetur at neque. Vivamus id facilisis est. Quisque viverra consectetur pellentesque. - -Quisque condimentum volutpat leo. In in dui enim. Nam varius orci non libero sodales, sed euismod mi condimentum. Nullam eu risus in enim gravida pulvinar. Duis laoreet odio metus, quis varius sapien blandit ut. Ut vitae bibendum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sagittis quam felis, ac pulvinar nulla consequat a. Integer quis est at dui auctor tincidunt ac vitae quam. - -Nulla libero massa, ultrices sit amet nibh id, tempus dapibus dolor. Integer sed magna et tellus congue pulvinar id in sapien. Curabitur eu maximus diam, in convallis libero. Phasellus quis rhoncus ligula, sed varius enim. Vestibulum sollicitudin, risus eget euismod sodales, est sapien aliquam lorem, hendrerit lacinia massa eros sed tellus. Donec odio erat, laoreet eleifend tempus et, lacinia at metus. Integer pharetra sem ultricies neque condimentum elementum. Proin nibh leo, pulvinar non nisl et, faucibus condimentum orci. Suspendisse convallis ut enim in aliquam. Vivamus aliquet lorem eu libero porttitor, at placerat nisi pharetra. Nam et magna ut diam ultricies consequat ut vitae odio. Proin porta nunc at egestas ultrices. Nam in erat quam. Curabitur congue aliquam velit id suscipit. Maecenas id pharetra orci. - -Morbi a nisi id risus suscipit viverra quis egestas mauris. Nam erat enim, sagittis a quam nec, commodo condimentum lorem. Donec nulla ipsum, consectetur ut aliquet elementum, pulvinar molestie lectus. Pellentesque nisl enim, commodo non arcu eu, elementum ultrices nisl. Vivamus placerat cursus purus vitae facilisis. Donec aliquam id ligula at lobortis. Aenean eu consectetur leo. Praesent sed felis at orci venenatis condimentum in quis lacus. Sed arcu erat, dictum ut ante sagittis, iaculis sollicitudin nulla. Fusce ut tincidunt nisl. Etiam convallis tortor eget pellentesque iaculis. Etiam elementum ante a ultrices porta. Quisque eleifend ipsum eget sapien efficitur, a tincidunt ex cursus. Praesent aliquam sem vitae odio suscipit molestie. Suspendisse volutpat ut libero et vulputate. - -Donec tincidunt velit urna, vehicula tincidunt tortor pellentesque vel. Donec vel lectus suscipit ipsum porta tristique in eu ante. Praesent vel accumsan tellus, nec vestibulum odio. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel magna eget lorem vehicula ullamcorper eu ut diam. Morbi lacus eros, molestie a dignissim dapibus, pulvinar accumsan justo. Pellentesque vitae metus nec risus viverra faucibus. Proin diam urna, vehicula id volutpat in, condimentum sed augue. Pellentesque vehicula mi vel ipsum venenatis feugiat. Integer augue diam, sollicitudin et justo sed, sodales pellentesque turpis. - -Integer eget tincidunt ante. Donec imperdiet laoreet dolor, et condimentum quam faucibus non. Nam a dignissim augue. Donec vel aliquet lectus. Praesent a ipsum eu odio consectetur mattis nec at neque. In quis auctor ex. Ut fringilla sodales rhoncus. Nunc euismod velit at nibh dapibus, id malesuada ligula tristique. - -Aenean augue nibh, finibus eu consequat nec, euismod at lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vitae enim ac orci finibus interdum. Nullam in eleifend ligula. Morbi aliquet orci tellus, quis ullamcorper ante dapibus ut. Ut condimentum aliquam lacus, in semper velit lacinia a. Integer et diam vitae magna fringilla egestas. Sed nec hendrerit lectus, vel posuere nibh. - -Duis tincidunt ipsum eu quam elementum, vel tempor justo tristique. Morbi in ipsum non quam blandit cursus non vitae ex. Sed rhoncus augue sit amet fringilla dignissim. Sed a lorem eu neque viverra finibus. Praesent vel maximus quam. Sed posuere, diam at convallis pulvinar, tortor turpis rhoncus sapien, eget lobortis urna nunc eget neque. Vestibulum ultrices vulputate risus, sit amet faucibus massa finibus non. Donec interdum posuere eros, a egestas diam tristique at. Donec eget est quis eros ultrices venenatis vitae ac quam. Cras vitae ipsum euismod, dignissim risus sit amet, dapibus velit. Donec ullamcorper eros est, ut mattis nisi bibendum at. Duis pellentesque augue quis urna pulvinar auctor. Phasellus ullamcorper magna vitae arcu luctus, ac feugiat justo accumsan. Nunc eu odio a velit varius blandit. Sed ultrices elit quis ligula laoreet viverra. Cras rutrum non neque quis sollicitudin. - -Aliquam nec nibh dignissim, consectetur dolor in, venenatis magna. Morbi sit amet posuere libero, quis malesuada sapien. Pellentesque eu magna at dui ultricies scelerisque. Duis non tortor sapien. Vestibulum pellentesque aliquam nulla, ut mattis libero commodo id. Phasellus sit amet velit eleifend, pretium est ac, placerat tellus. Curabitur non lacus tellus. - -Curabitur a arcu in orci tristique aliquet. Curabitur sed augue sem. Nam velit quam, ornare non consectetur in, vehicula dapibus arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut semper est neque, et blandit est pellentesque et. Quisque nec diam laoreet nisi vestibulum tempus. Proin non libero eget dolor rutrum placerat. Aenean ut purus sed nisi gravida consequat vitae ac metus. Nulla accumsan, nunc ac convallis tristique, metus libero rutrum metus, nec sagittis erat metus non ex. In dignissim sodales scelerisque. Aenean bibendum elementum ante, nec rhoncus turpis tempus quis. - -Nullam eu libero massa. Nulla nec auctor nunc. Fusce fermentum, nibh eget pretium fringilla, nisi ligula pharetra risus, pellentesque auctor leo nisl at neque. Sed sodales dictum mattis. Fusce id congue sapien, sit amet facilisis nibh. Donec ornare mi eget diam aliquet gravida. Nam volutpat massa tortor, non imperdiet lacus rhoncus ut. Pellentesque quis ultricies metus, eu dictum tellus. Ut suscipit, lorem vel venenatis consequat, enim erat imperdiet sapien, hendrerit faucibus ipsum nibh sed nibh. Maecenas elementum felis nec tortor interdum, nec ullamcorper massa varius. Nulla non leo velit. - -Aenean vel scelerisque nunc, ut convallis ex. Maecenas imperdiet tellus non aliquet laoreet. Aliquam malesuada ullamcorper felis non hendrerit. In tincidunt consequat fermentum. Suspendisse facilisis luctus eros, in feugiat nisl dictum a. Integer massa nisi, tincidunt laoreet aliquet ac, tempor eu elit. Proin ac quam vel nunc hendrerit auctor. Curabitur maximus orci sit amet ex tempus vehicula. - -Sed consequat arcu mi, a gravida est condimentum eget. Donec pretium lorem vel euismod cursus. Donec dignissim orci ac suscipit gravida. Maecenas dapibus, purus id placerat convallis, libero purus imperdiet dui, at consequat ex urna eget justo. Nam sapien lectus, sagittis ac feugiat in, porttitor ac mi. Etiam bibendum congue vehicula. In euismod sed ipsum at blandit. Duis suscipit massa sed nibh mollis, et tincidunt metus feugiat. Sed eget quam in magna porta ornare. Nam consectetur feugiat leo, id sollicitudin elit commodo vel. Pellentesque hendrerit nunc nulla, sed ultricies ante lacinia in. - -Integer vel libero quis magna tempor iaculis. Praesent mattis erat nibh, ut ultricies tortor hendrerit a. Donec non dictum sem, id gravida enim. Vestibulum ultrices, nisl eu euismod lobortis, dolor mi molestie erat, eu consequat eros ligula quis mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla cursus, augue sollicitudin dapibus convallis, erat arcu dapibus lorem, vel ornare eros quam vitae nunc. Aenean ut dapibus nunc, vel sagittis ex. Curabitur ut pulvinar tellus. Cras sit amet est at libero vestibulum semper et sed velit. Suspendisse porta ipsum ex, sit amet porttitor sapien elementum eu. Quisque euismod arcu non molestie iaculis. Maecenas et ullamcorper magna. Vivamus laoreet rhoncus fringilla. Nam ullamcorper nibh eu odio sagittis, vitae semper ex aliquet. Aenean in nisi vel nisi dapibus pellentesque a at turpis. Vestibulum non volutpat nulla. - -Morbi consectetur nisl et lacus tincidunt eleifend. Donec sed hendrerit libero. Proin vel convallis metus. Nam non tortor sapien. Duis porta mauris vel ornare blandit. Morbi at dictum metus. Morbi sed malesuada leo. Pellentesque malesuada nisi a neque placerat mollis. Donec non imperdiet odio, in congue nunc. - -Phasellus dapibus nulla at mollis accumsan. Phasellus quis libero ante. Praesent in neque efficitur, eleifend mauris sit amet, posuere metus. Mauris nisi mauris, pharetra ut vestibulum a, lobortis id erat. Praesent at condimentum tortor, a vehicula arcu. Cras suscipit mollis egestas. Phasellus sit amet tellus mattis, bibendum ligula sed, tempor ligula. Sed scelerisque ultrices nisl, quis fringilla mauris feugiat sed. Etiam eu erat pellentesque augue eleifend porta nec ac turpis. Duis at sodales massa. Aenean ac dui lobortis, rhoncus massa non, cursus massa. Suspendisse ante magna, sagittis at ullamcorper non, feugiat eu ligula. Maecenas facilisis, nulla a aliquet rhoncus, libero libero aliquet nunc, sed rhoncus eros diam a sem. - -In aliquam lacus vitae gravida blandit. Fusce molestie dui eget sapien interdum, in consectetur tortor feugiat. Nunc vitae enim vestibulum sapien gravida laoreet. Vestibulum fermentum ut dui in efficitur. Nullam quis ex vitae nisl facilisis convallis at a lacus. Sed scelerisque non libero in consequat. Integer posuere tortor vitae quam egestas varius. Sed eu turpis leo. Pellentesque vel urna quis nisi congue pellentesque a quis sem. Sed volutpat blandit rhoncus. Cras mi dui, malesuada ut volutpat vitae, tempus vel lacus. Ut mattis dui in enim porta, a pharetra turpis finibus. Nunc ut posuere mi. Aenean commodo risus ut leo malesuada, nec efficitur dui convallis. In hac habitasse platea dictumst. - -Phasellus interdum congue rutrum. Sed venenatis lectus a sollicitudin malesuada. Cras tortor ante, pharetra et turpis nec, iaculis accumsan sapien. Cras ac nulla rutrum, consequat lacus ac, lobortis nulla. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis bibendum turpis at massa fringilla pulvinar. Curabitur id sagittis metus, a molestie sem. Vivamus quis mauris sit amet augue consectetur pretium eu non arcu. Sed sit amet efficitur neque. Vestibulum consectetur ligula non commodo lobortis. Nunc tincidunt eros odio, id lacinia nulla maximus quis. - -Donec nec nibh vel metus bibendum facilisis eu ut eros. Nunc sagittis, ipsum vel faucibus gravida, nunc nunc sollicitudin est, eu pellentesque ex magna vel libero. Aenean at tellus at metus mollis vehicula id non tellus. Sed ac scelerisque velit. Morbi ullamcorper augue sapien, in elementum sapien ultrices et. Curabitur at est purus. Sed auctor, massa eget finibus vulputate, metus lectus fringilla dolor, at sagittis velit nulla vitae ex. Phasellus ac convallis sem. Aenean quis libero ipsum. Aliquam dapibus turpis quis imperdiet ultrices. Pellentesque vehicula bibendum porta. Nulla sed semper purus, nec accumsan nulla. Integer volutpat massa in lectus viverra egestas. - -Ut malesuada nisi quis lacus finibus, in consequat arcu pulvinar. Nulla pulvinar ornare sem sed scelerisque. Fusce lobortis et lacus vitae consectetur. Vivamus id nisl eu urna ullamcorper ornare in quis nulla. Sed laoreet, eros aliquet laoreet efficitur, quam eros cursus nunc, at iaculis lorem tortor eget lacus. Cras aliquam nec eros vel porta. Proin eget ipsum nec nisi vulputate ullamcorper sit amet non sapien. Donec sodales libero vitae tortor dignissim, et sollicitudin sapien vehicula. Donec tempor egestas fermentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc lorem leo, dignissim sed est ac, volutpat molestie libero. Ut feugiat lectus nec odio gravida auctor. Ut ac ipsum cursus, efficitur ipsum ac, vehicula turpis. Donec ac nibh a mauris finibus dignissim vel sed dolor. - -Fusce ornare augue consequat, dignissim purus vel, pulvinar leo. Pellentesque a sem volutpat, hendrerit libero non, consectetur augue. Etiam urna felis, maximus rutrum blandit eget, cursus at risus. Donec congue aliquet pharetra. Aenean id blandit metus. Nullam venenatis egestas neque non finibus. Proin rutrum sapien sit amet nisl vehicula rutrum. Maecenas aliquam libero vitae laoreet tempor. Sed ut consectetur urna. Donec gravida dui sit amet tempor posuere. Maecenas aliquam viverra libero. Donec sagittis vitae leo eget condimentum. Aenean fermentum, elit vitae volutpat hendrerit, risus neque vehicula libero, et aliquet erat felis quis ante. - -Suspendisse consequat molestie auctor. In varius enim nec viverra semper. Aenean dui purus, posuere quis sodales eget, interdum in augue. Integer a erat vitae nibh ultricies porttitor sed quis tortor. Nam commodo viverra nibh, eu luctus lorem ornare sed. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec at ornare augue. Pellentesque sit amet pretium mauris, et pellentesque neque. Morbi dictum odio eu tempor fringilla. Suspendisse porta elit dui, sit amet faucibus felis ornare at. Donec sollicitudin eros sapien, eget elementum dui malesuada quis. - -Maecenas lacinia faucibus risus, eget venenatis massa. Curabitur eget turpis eget lacus interdum egestas. Pellentesque ut neque a libero volutpat cursus. Fusce ac quam elementum, pretium orci et, rutrum erat. Phasellus vulputate quis magna nec accumsan. Integer fermentum quam in euismod tincidunt. Praesent tincidunt, mauris at ultrices faucibus, ante risus condimentum lectus, sit amet faucibus metus justo at massa. Ut iaculis interdum elit sit amet rutrum. Sed sed metus in mi laoreet iaculis at et lacus. Aliquam mattis pharetra erat sit amet vulputate. Morbi vitae erat in tellus commodo convallis semper quis dolor. Donec commodo pulvinar nunc, vitae eleifend justo sodales vel. Duis elementum sed augue quis semper. Curabitur lorem velit, facilisis a nisl id, finibus sagittis orci. - -Pellentesque rutrum in ligula vitae cursus. Donec eu sagittis urna. Quisque magna est, laoreet eget dignissim in, elementum ut est. Donec vitae mi tempus, pellentesque nulla eu, ultricies massa. Sed rutrum ligula mi, id viverra sapien accumsan sit amet. Vivamus egestas, felis nec feugiat blandit, nibh lacus mattis massa, at rutrum dolor orci eget magna. Sed aliquet quam lorem, et posuere neque blandit rhoncus. - -Sed luctus turpis et mauris iaculis, quis euismod libero aliquet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas tortor odio, vulputate sagittis suscipit eu, posuere sit amet dui. In nisi sem, euismod maximus interdum quis, facilisis eget nunc. Fusce vulputate quam in massa sollicitudin, eu posuere massa pulvinar. Nulla feugiat ultrices fermentum. Mauris fringilla est id diam malesuada condimentum. - -Maecenas nulla mauris, tempus vel erat non, fermentum gravida leo. Duis hendrerit tortor arcu, tempor viverra lectus pretium ac. Pellentesque convallis turpis purus, a vehicula nulla vulputate in. Morbi neque ante, rutrum et orci eu, blandit dapibus velit. Vestibulum varius imperdiet magna, vitae iaculis libero pretium hendrerit. Curabitur nec lacus varius, malesuada orci vel, faucibus neque. Donec tortor massa, sollicitudin sit amet feugiat at, imperdiet sit amet massa. Nunc at lobortis arcu, a dictum leo. Aliquam at erat odio. - -Ut neque felis, molestie vitae erat sit amet, venenatis commodo orci. Nunc libero purus, ultricies efficitur pretium quis, tempus eget purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque at fermentum magna, at fermentum purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur nunc lectus, lacinia vitae turpis sit amet, hendrerit pellentesque est. Etiam eget ex feugiat, rhoncus quam quis, commodo eros. Aenean laoreet nisl vitae tellus efficitur, at luctus nisi elementum. - -Vestibulum tincidunt vehicula nisl, nec auctor felis pretium eget. Aenean egestas cursus mauris, non mollis quam auctor ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam egestas leo sed aliquam sodales. Phasellus faucibus tortor ut ligula rhoncus hendrerit. Curabitur facilisis euismod ultrices. Nullam molestie, nulla ut facilisis accumsan, leo ante commodo neque, vitae eleifend lectus libero et leo. Phasellus id dapibus urna, id cursus lectus. Donec maximus, dui feugiat porta bibendum, orci diam venenatis ante, non rhoncus urna ante eget risus. Proin vitae erat nec elit pulvinar suscipit ac nec velit. Donec mollis nisl ut fringilla fringilla. Nulla dapibus nec nibh a blandit. Integer at enim posuere justo rhoncus tristique nec vel velit. Donec placerat, neque venenatis aliquet pellentesque, sapien eros posuere dui, quis dapibus arcu est eget turpis. Ut id faucibus dolor. - -Cras sed porta massa. Suspendisse non risus erat. Mauris ut justo id augue mattis iaculis. Curabitur eget velit urna. Sed blandit sodales rhoncus. Integer a libero nulla. Vestibulum sit amet euismod lacus. Nullam non metus at mi congue tincidunt ac id lorem. Pellentesque tellus risus, sodales nec nibh nec, ullamcorper semper turpis. Fusce nunc leo, ultricies a massa blandit, cursus interdum enim. Nulla at quam at libero volutpat eleifend sit amet ut nunc. Morbi pellentesque est elit, eget suscipit nisl eleifend nec. Maecenas tincidunt, eros at lacinia cursus, mauris nisl efficitur massa, eu tincidunt mi erat vel nisi. Suspendisse tempor euismod neque, eget sollicitudin massa ornare in. Suspendisse consectetur, purus quis laoreet dignissim, nisi purus mollis risus, eget accumsan magna erat ut magna. Morbi quis velit tortor. - -Etiam et neque semper, porttitor ipsum eu, vulputate arcu. Donec aliquam ornare eros, at malesuada nulla luctus sed. Phasellus tincidunt maximus enim quis porta. Praesent diam felis, aliquet vitae imperdiet pellentesque, interdum quis metus. Nullam ultricies lorem nec consequat euismod. Sed ornare condimentum magna. Quisque elementum gravida dignissim. In id massa gravida, maximus ex a, placerat ligula. Nullam scelerisque metus at consectetur interdum. Morbi bibendum neque nisi, vitae tincidunt urna eleifend eu. Aenean pharetra ullamcorper purus, vel efficitur mi. Aenean tincidunt malesuada blandit. - -Nam a venenatis nibh. Duis consectetur nulla vitae felis fringilla, sit amet elementum felis efficitur. Donec vitae dignissim sem. Donec vitae urna feugiat, pellentesque ipsum eu, consectetur nunc. In feugiat nisl ante, eget auctor orci fringilla eget. Vestibulum a risus vitae nisi hendrerit malesuada iaculis in augue. Nulla eu luctus est, ac eleifend nulla. - -Nam iaculis blandit lacus, at iaculis sapien blandit a. Sed quis feugiat urna, nec facilisis orci. Nunc pharetra euismod neque eu cursus. Maecenas eu lorem mattis, sollicitudin tortor sed, suscipit est. Curabitur a elit et nibh efficitur placerat eget eget dolor. Phasellus vitae mattis nisi, sed vehicula arcu. Nunc gravida tortor quis nisi tristique interdum. Vivamus augue enim, sagittis ac tellus vel, finibus facilisis ligula. Nullam gravida feugiat est elementum congue. Nullam vel semper felis. Sed id lorem euismod, auctor tortor eget, vestibulum metus. - -Nulla facilisi. Praesent ut bibendum velit. Phasellus id erat et dui semper rutrum quis id metus. Aliquam vitae orci et erat imperdiet dapibus et ac magna. Duis at urna odio. Phasellus ultricies, libero sed fringilla dictum, felis nisi aliquet eros, nec maximus sapien mi vel urna. Aliquam erat volutpat. Nunc dictum turpis nec neque commodo efficitur. - -Curabitur eget tincidunt nisi. Ut sit amet mollis felis, at suscipit nulla. Phasellus augue turpis, facilisis nec mi ac, venenatis mollis ipsum. Donec feugiat porta velit, nec dictum odio. Duis faucibus, ex non aliquet consequat, diam enim consectetur nunc, quis dapibus metus turpis quis diam. Etiam vel velit purus. Morbi mollis maximus purus at viverra. - -Proin id volutpat tortor. Nam consectetur ac tortor id placerat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam in nunc id odio ullamcorper maximus sed sed elit. Sed ut elementum ex. Cras tincidunt massa urna, sed consequat lacus finibus ut. Mauris rutrum ex at ipsum volutpat posuere. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc nisi est, egestas at felis eget, facilisis commodo lectus. Vivamus sapien lorem, hendrerit ut neque eu, condimentum pellentesque justo. Proin magna orci, ultricies non porttitor vel, tincidunt at nibh. In malesuada in mi eget aliquam. - -Aenean placerat urna eu tortor interdum aliquet. Vestibulum volutpat, ipsum non pretium hendrerit, nisl libero interdum enim, quis vulputate ligula leo ullamcorper neque. In viverra convallis turpis, elementum aliquam metus aliquam sed. Suspendisse vitae quam ac nulla condimentum rhoncus. Ut quis fermentum ipsum, nec faucibus neque. Sed cursus faucibus ligula ac pharetra. Etiam faucibus, massa eget condimentum finibus, tortor magna tristique nisl, et sagittis nisi enim ut enim. Nunc vehicula, ligula quis congue pulvinar, sem diam rhoncus libero, eget facilisis odio mi quis elit. Nullam et viverra mi, ut tincidunt purus. In dapibus risus in ligula rhoncus, sit amet interdum libero tincidunt. Morbi vehicula hendrerit lacus id fringilla. In maximus condimentum felis sed venenatis. Nullam sed mi ante. - -Donec pharetra commodo porttitor. Maecenas nulla mi, tempor vel est quis, aliquet dictum ligula. Vivamus maximus bibendum quam, vel mattis dolor bibendum convallis. Ut commodo finibus turpis, nec sollicitudin turpis cursus ac. Nullam sit amet nunc vitae sem aliquet aliquet ac sit amet risus. Ut viverra purus eget mauris facilisis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed id tincidunt leo. Donec aliquet lacinia metus vitae elementum. Donec sed imperdiet enim. Morbi congue vehicula porttitor. Sed lobortis commodo sem, et pharetra velit facilisis id. Integer commodo feugiat urna, quis vulputate ligula sagittis eget. Proin cursus vitae velit sed dignissim. Aenean elementum consectetur porttitor. - -Ut in interdum mauris. Cras tortor nulla, dapibus nec nisl vitae, interdum molestie lacus. Nunc sed porta erat. Mauris ac ultrices odio. Curabitur porttitor lacus ac massa ultricies condimentum. Integer ut accumsan ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed sollicitudin, ligula porta hendrerit vestibulum, tortor erat facilisis ante, vel dignissim est ipsum eget turpis. Phasellus rutrum pharetra massa, eleifend congue neque euismod eu. - -Nullam tristique eros id erat pharetra pretium. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras ut felis congue, elementum diam sed, elementum est. Donec sagittis nulla at auctor placerat. Duis gravida ex risus, et tristique enim dignissim a. Pellentesque urna velit, pretium ut libero imperdiet, eleifend volutpat tortor. Phasellus non vehicula felis, sed hendrerit justo. Pellentesque iaculis efficitur accumsan. Proin diam nisi, auctor sit amet molestie ut, pretium a felis. - -Aliquam quis nunc vulputate dui hendrerit porta. Duis non sapien eget dolor suscipit dapibus vel at urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla pharetra dignissim leo, a pellentesque eros vulputate sit amet. Sed augue turpis, consequat id tincidunt non, congue et eros. Ut enim dolor, egestas euismod volutpat a, posuere ut enim. Donec eget nisl ut erat semper dignissim id ut massa. Sed maximus vitae orci at euismod. Ut sit amet lorem sed magna cursus tempor ut sit amet odio. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed a turpis non ipsum pharetra vulputate id eu metus. Integer a tristique dui, sed vehicula metus. Fusce vehicula erat id nulla posuere, a venenatis neque gravida. Ut lobortis, leo eu ornare ultricies, dolor tortor volutpat arcu, ac auctor augue dui vitae felis. Aliquam placerat enim nec sem volutpat, a scelerisque eros gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce venenatis feugiat tempor. Nullam non dictum mauris, vitae venenatis sapien. Aliquam scelerisque ligula in libero condimentum facilisis. Mauris non arcu quis enim placerat blandit. Duis hendrerit sapien vehicula, gravida metus at, elementum leo. In fringilla mauris non est consequat fermentum. Integer turpis libero, tempor eget sapien nec, ultricies imperdiet tortor. - -Pellentesque quam nisl, condimentum eu mauris nec, faucibus fringilla augue. Proin vitae sagittis nibh. Nunc et aliquet nisl. Morbi volutpat imperdiet diam et sagittis. Vivamus imperdiet risus ut purus interdum gravida. Morbi consequat posuere dictum. Aenean enim quam, venenatis at odio ac, pellentesque condimentum massa. Vivamus nisl sapien, scelerisque a posuere vel, ullamcorper semper sem. Morbi sollicitudin tempor neque ut molestie. Donec in lectus pretium, venenatis diam id, pharetra metus. Duis lorem tellus, condimentum eget cursus vitae, tristique id est. Donec at nisi porttitor, blandit enim at, euismod sapien. Nam augue quam, sagittis sed enim eu, iaculis dapibus leo. Aliquam aliquet commodo turpis a commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur auctor, sem id semper dictum, augue eros sollicitudin elit, at vestibulum nisi ex et purus. - -Vivamus imperdiet ultrices commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. In lorem lacus, volutpat et ligula quis, facilisis sodales mauris. Quisque ultrices elit eget mauris accumsan condimentum. Vivamus risus lorem, sollicitudin vel scelerisque ut, ultricies ut lacus. Nunc id magna erat. Proin non interdum nulla. Maecenas quis ligula tellus. Pellentesque quis lorem eget augue auctor gravida eu in nisi. Maecenas at auctor nunc. Quisque volutpat lorem sit amet feugiat gravida. Praesent mattis tortor ligula, at placerat eros dapibus sit amet. Etiam imperdiet nisi ut ipsum eleifend, quis laoreet velit porttitor. - -Fusce id ullamcorper erat. Aliquam vel consequat eros, quis tempor dolor. Vivamus ut orci eu nisl congue dapibus non in massa. Integer maximus laoreet mi dictum ultrices. Proin dignissim dui eu accumsan rhoncus. Quisque varius cursus arcu at finibus. Sed auctor lacinia metus vitae viverra. Nam vel sapien placerat, bibendum elit sit amet, sagittis turpis. Nunc a commodo felis. - -Integer vehicula elementum feugiat. Proin eget libero ante. Aliquam in odio lacus. Etiam pretium imperdiet odio sed posuere. Quisque at magna id nisi tempor rhoncus sed et metus. Duis porta, sapien sed malesuada finibus, nunc dolor sodales purus, in ullamcorper libero nisi in nisl. Maecenas vitae nisl velit. Suspendisse potenti. Integer egestas, mi eu dictum accumsan, nulla odio congue massa, nec placerat ligula lacus quis mi. - -Sed sem neque, convallis vitae faucibus ornare, malesuada a risus. Nulla convallis, dui nec tincidunt porttitor, lectus arcu suscipit elit, in tristique lacus urna ac velit. Fusce in arcu eget est condimentum volutpat ac nec tortor. Curabitur dapibus odio tortor, in congue ex elementum eget. Vivamus laoreet elit massa, id elementum orci sagittis at. Curabitur interdum, odio eget convallis aliquam, lorem diam luctus leo, vitae feugiat ligula nibh at nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum non mauris molestie, mattis mauris id, fermentum lorem. Morbi nibh purus, facilisis vel tristique in, gravida in ex. Vivamus tincidunt urna at ex efficitur, eu dapibus nulla convallis. Proin vel pulvinar nibh. Donec aliquet semper orci et gravida. - -Nunc ornare et urna quis sagittis. Cras non dictum metus. In ac laoreet sem. Cras ornare libero sem, ut aliquet ipsum ornare laoreet. Donec id euismod tortor. Etiam odio mi, hendrerit ac urna vitae, gravida maximus mauris. Cras sed euismod neque. - -Vestibulum porta tristique placerat. Phasellus nec felis vel leo gravida faucibus in at neque. Maecenas felis dolor, sagittis vel elit eget, scelerisque egestas urna. Integer consequat nulla a urna euismod, ac feugiat sapien rhoncus. Nunc sit amet elit at urna aliquam bibendum id sed neque. Vestibulum non dictum mauris, tincidunt finibus purus. Donec posuere enim vel bibendum gravida. Ut elementum tortor a diam pharetra aliquam. Fusce ut nisi ut libero rhoncus scelerisque. - -Integer libero lorem, molestie non elit a, convallis tristique dui. Fusce sodales convallis ullamcorper. Cras eleifend lobortis erat sit amet cursus. Nam vel ipsum eros. Integer sed aliquam risus. Quisque dictum vulputate eros et iaculis. Etiam ac ultricies nisl. Nunc et nibh ut neque egestas porttitor. Aenean in laoreet lectus. Praesent et egestas arcu. Sed ullamcorper, enim ut fermentum euismod, odio nisi tempor nisl, sed feugiat mi nulla a libero. Integer cursus sagittis est, ac dapibus est mollis eget. - -Donec blandit placerat ex. Aliquam erat volutpat. Duis et odio tempus leo porttitor porttitor eu ac dolor. Mauris imperdiet, sapien sed suscipit pellentesque, nulla odio placerat nibh, et scelerisque ex tortor posuere enim. Aliquam fringilla porta cursus. Nullam sollicitudin, ante quis bibendum imperdiet, nisi sapien lacinia velit, eu vehicula justo turpis in leo. Morbi sit amet vulputate sem. Fusce fringilla tellus mi, in pellentesque tellus sollicitudin sit amet. Nunc venenatis lorem ac odio convallis, nec cursus arcu bibendum. Vivamus imperdiet maximus pellentesque. - -Nulla facilisi. Donec arcu sem, auctor at nisi a, bibendum maximus nulla. Phasellus sed diam facilisis, faucibus ligula sed, ultricies sapien. Aenean varius ut ligula tempor vehicula. Suspendisse pulvinar ipsum tincidunt varius lacinia. Ut enim mi, pulvinar vitae ex non, euismod sodales est. Donec porta molestie ex at ornare. Nam vehicula interdum dictum. Sed viverra sapien sed vehicula laoreet. Nulla eget turpis vel sem interdum rutrum. Vestibulum a dolor id purus mattis blandit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Nulla in arcu interdum, blandit mi vitae, imperdiet tellus. Maecenas egestas fermentum enim vitae vestibulum. Nulla dictum lorem ut justo interdum, eget placerat dolor elementum. Vestibulum sit amet pulvinar elit. Maecenas id mauris quam. Integer iaculis felis convallis, blandit sapien nec, pretium urna. Integer quis pellentesque enim. In egestas sit amet massa vitae pharetra. Cras non ultricies arcu, quis pretium sem. Donec fermentum eleifend risus cursus pellentesque. Quisque sodales ultricies dolor rutrum lacinia. In hac habitasse platea dictumst. Sed lacinia purus in arcu congue, sed scelerisque turpis iaculis. Phasellus a venenatis erat, ut tristique nulla. Vivamus dapibus felis id ex laoreet, nec feugiat libero posuere. Aenean et massa id diam dignissim iaculis. - -Vivamus est ligula, interdum vitae sagittis ac, finibus a nunc. Aenean maximus mollis dapibus. Vestibulum blandit urna quis metus finibus, at malesuada augue pulvinar. Proin consectetur ut ante vel maximus. Sed ut ex accumsan, consequat nisi in, suscipit sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam volutpat id velit sed suscipit. Phasellus id viverra dui, vel suscipit ligula. - -Donec semper ac ipsum in consectetur. Sed id eleifend ante, at pulvinar tellus. Quisque at mauris ex. In sit amet velit vitae nunc posuere dictum quis in mi. Proin lectus risus, finibus sit amet consequat ac, fringilla ut mauris. Proin et mi nisl. Maecenas condimentum dapibus mi id dapibus. Cras ullamcorper pulvinar justo ut egestas. Nam feugiat dui ac odio mollis, quis congue est efficitur. Vivamus luctus tristique ipsum, quis egestas lacus mollis id. Proin id placerat sapien. Sed et sem sed ex iaculis volutpat. Mauris eu interdum magna. Mauris vehicula, enim eu placerat sagittis, metus mauris molestie neque, ut fermentum nibh nisi quis tortor. - -Sed sagittis sem erat, vitae tristique purus tempor at. Nullam id urna mollis, aliquet ex eget, varius sem. Donec scelerisque cursus nulla, vel imperdiet ipsum cursus et. Vestibulum condimentum lorem neque, at auctor orci placerat sit amet. Vivamus felis metus, sodales vitae sollicitudin non, condimentum a leo. Praesent fermentum nisi eget ex tempus luctus. Cras sodales turpis nec ultrices placerat. Sed efficitur erat eu felis tempor, eget suscipit ligula porttitor. Cras a porttitor ante, a vehicula enim. Ut malesuada tellus lectus, nec tincidunt leo dapibus non. Phasellus at purus commodo, hendrerit lectus eu, scelerisque massa. Vivamus ex ligula, placerat id augue sit amet, tempor pretium augue. Curabitur aliquam lorem a venenatis pretium. Etiam quis efficitur lacus. Donec nec felis nulla. - -Nunc malesuada ipsum ut scelerisque condimentum. Suspendisse sapien elit, ornare et egestas in, ultricies nec nibh. Ut egestas, nunc in molestie cursus, velit arcu tempus nisl, non interdum ligula augue cursus nulla. Fusce pretium in odio non eleifend. Donec eu condimentum tellus. Ut vel nisl dictum, sollicitudin urna a, lobortis dolor. Proin malesuada ante in molestie feugiat. Duis leo sapien, porttitor finibus porttitor non, egestas ut nisi. - -Duis vel volutpat sapien. Mauris mattis nec lorem et vulputate. Nunc vitae nulla laoreet, dapibus magna finibus, lacinia orci. Quisque vestibulum ipsum id tortor blandit, in molestie elit eleifend. Maecenas sed leo aliquet nunc tincidunt ullamcorper quis ut sem. Vestibulum lectus leo, molestie ut sem at, accumsan consequat dolor. Phasellus sem elit, mollis vel tempor ac, bibendum vel sapien. Maecenas sed pulvinar odio. - -Cras vitae justo sed quam congue consectetur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer dignissim, velit vel commodo cursus, libero mauris sollicitudin nulla, id molestie velit dolor et dui. Ut at turpis vitae magna viverra tristique quis a nisi. Nulla sapien quam, cursus ac mauris in, suscipit placerat purus. Cras eget purus volutpat, egestas justo sed, porttitor ante. Vestibulum efficitur mattis fringilla. Integer sit amet consectetur massa. Phasellus non nunc et nisl semper fringilla. Praesent aliquam enim non lectus sodales, vel pretium elit sodales. Suspendisse vel dapibus elit, lobortis placerat magna. Aliquam molestie mi vitae nisi condimentum volutpat. - -Nulla quis lorem turpis. Nullam placerat iaculis nulla, hendrerit tincidunt eros vestibulum vitae. Mauris nulla justo, ultricies non sapien et, volutpat finibus diam. Proin in fringilla risus, vitae faucibus lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut non posuere eros, ut fermentum lorem. Pellentesque mauris quam, vulputate nec erat a, efficitur varius elit. Sed commodo ullamcorper sem, eu sodales ipsum porttitor sit amet. Vivamus sodales tristique augue. Nam risus diam, feugiat vitae molestie eget, fringilla quis ante. Aenean eu massa sed tortor pulvinar condimentum. Pellentesque gravida ornare iaculis. Maecenas nec metus sem. In malesuada enim quis quam mattis, sed convallis metus varius. Mauris fermentum neque eu ipsum lobortis malesuada. - -Sed purus enim, bibendum sit amet lacinia id, accumsan sed justo. Proin eget accumsan turpis, fermentum convallis lorem. Mauris scelerisque luctus elit, a sodales eros ullamcorper a. Suspendisse sed ornare dolor, non vehicula enim. Ut efficitur diam eu metus. - - - -Quisque interdum feugiat quam vel aliquam. Curabitur imperdiet ultricies mi accumsan aliquet. Nam in arcu accumsan, faucibus est ut, iaculis eros. Fusce fermentum, risus sit amet sollicitudin placerat, diam velit ullamcorper nibh, ac ullamcorper nunc turpis a nunc. Nam sodales diam eget felis semper vulputate. Morbi tempus est purus, id lobortis justo viverra eu. Aliquam semper metus nibh, id laoreet ante luctus sed. Sed eget tincidunt tortor, in vestibulum diam. Nulla ac venenatis tortor. - -Vivamus dui ex, sollicitudin eget dui et, ultricies imperdiet tellus. Praesent a diam ut est egestas condimentum sit amet ut eros. Fusce velit leo, tincidunt hendrerit ullamcorper nec, commodo in augue. Donec pellentesque sodales nisl elementum tempor. Proin hendrerit porttitor hendrerit. Sed purus lacus, placerat at purus in, bibendum semper eros. Nulla elit dui, convallis id mollis vitae, lobortis ac elit. Proin condimentum in purus ut faucibus. Mauris ac sodales augue. - -Nullam venenatis fringilla tempus. Duis aliquet enim erat, a bibendum dui semper at. Aenean porta ligula ac justo dictum elementum. Aliquam erat volutpat. Vivamus nulla mauris, ultricies ut pharetra id, pulvinar sed felis. Vestibulum elementum cursus ultricies. Ut feugiat dolor vel egestas condimentum. Integer in lobortis metus. Duis volutpat ligula bibendum, condimentum magna vitae, gravida augue. - -Mauris a sem elit. Etiam at dolor enim. Nullam maximus ornare lectus et lobortis. Quisque mattis metus diam. Suspendisse potenti. Integer ornare dolor quis lorem dapibus, quis suscipit orci cursus. Maecenas facilisis laoreet tortor ac iaculis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies ante quis nulla gravida, vel facilisis sapien consequat. Nam ligula quam, gravida sed dolor quis, vehicula varius orci. Maecenas egestas fermentum luctus. Donec efficitur tellus nulla, eu gravida diam tristique in. - -Quisque non ullamcorper leo, at viverra lacus. Curabitur malesuada magna nec urna ultrices lacinia vel ultricies magna. Etiam facilisis mauris velit, vehicula pulvinar quam gravida at. Donec molestie arcu in ipsum aliquam interdum. Phasellus vel semper dui, ut maximus nisl. Integer at nunc sit amet justo pellentesque tincidunt. Etiam sed euismod nibh, sollicitudin efficitur odio. Curabitur pretium odio eget enim commodo, at consectetur metus pulvinar. Suspendisse posuere ipsum at feugiat porta. Curabitur luctus imperdiet diam nec dignissim. Nulla facilisi. - -Proin pharetra tincidunt dui vitae fermentum. Donec eget venenatis enim. Mauris sollicitudin ipsum at urna condimentum, quis malesuada eros tempor. Duis elementum viverra ipsum, vel sollicitudin urna rhoncus id. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Morbi facilisis sapien mattis lorem mattis sollicitudin. Integer non libero cursus quam cursus tristique. Nulla consequat est magna, in elementum nisl maximus euismod. Morbi a lacus et quam feugiat imperdiet. In finibus erat id posuere dictum. Donec sit amet mollis diam. Pellentesque pharetra tellus eget interdum dapibus. - -Vestibulum luctus at massa eget porttitor. Aenean blandit massa eget sapien convallis congue. Phasellus aliquam blandit risus, nec sollicitudin quam sollicitudin quis. Phasellus at odio et tortor molestie vulputate eu vitae leo. Curabitur ut turpis sem. Fusce et nisi vel risus accumsan tristique quis nec erat. Suspendisse potenti. Nullam vehicula molestie dolor eu finibus. Mauris ut dignissim arcu. Pellentesque ac hendrerit augue, eget scelerisque lacus. - -Nunc non est metus. Etiam ac mauris nec libero molestie egestas. Nunc aliquet nisl id felis ultrices pretium. Integer sapien neque, maximus vulputate arcu sit amet, congue tempor leo. Sed vel leo dolor. Vestibulum et dui venenatis, dignissim nisi eget, vehicula erat. Curabitur vitae justo et ligula semper fringilla vitae sit amet neque. - -Cras faucibus leo est, vel faucibus nisl pretium non. Integer mattis mi eu nisi ultricies maximus. Quisque semper consequat urna eu tempus. In at viverra nisi. Phasellus et arcu id nisi vehicula mattis sagittis eget orci. Praesent fringilla diam eget auctor elementum. In at est sem. Integer in mi arcu. Cras interdum elementum leo, ac tempor est vestibulum a. Integer et elit ipsum. Quisque nec nulla sit amet nisl mollis auctor viverra sed lacus. - -Phasellus et hendrerit mauris, tincidunt consectetur ligula. Curabitur volutpat gravida commodo. Ut ultricies varius magna, quis ullamcorper lorem pharetra quis. Suspendisse tempor nisi vel nunc gravida semper. Nunc molestie ac augue vel bibendum. Etiam ullamcorper vehicula rhoncus. Sed tempus ac mauris sit amet viverra. Etiam consequat egestas quam. Nulla maximus arcu in faucibus venenatis. Curabitur auctor eu mi faucibus fermentum. Duis varius magna est, eu rhoncus libero varius non. Donec aliquet pretium sapien vel egestas. Etiam vel velit lorem. - -Etiam nisl mi, semper nec convallis sit amet, cursus sed lacus. Duis dictum velit eget nisi consectetur, ut gravida dolor sollicitudin. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac neque diam. Aliquam euismod vitae nisl vel interdum. Vivamus sollicitudin ac metus in accumsan. Nunc dui massa, mattis vitae fringilla mollis, ultrices quis elit. Mauris blandit elementum nulla, sit amet dignissim risus euismod et. Fusce placerat ex ac odio pharetra, vitae porta lectus tristique. Suspendisse ultricies, est malesuada semper varius, ex erat tempor libero, non semper nisi justo quis nibh. - -Duis id egestas orci. Duis vitae tempor purus. Donec tristique justo id consectetur fermentum. Donec tempus lectus id elit accumsan eleifend. Pellentesque pretium, nibh vitae porta volutpat, tortor ex aliquam purus, vel tincidunt nisi augue a velit. Ut non purus blandit, consectetur lectus a, molestie nulla. Ut convallis lacinia mauris et hendrerit. Donec maximus, tellus sit amet porta consectetur, odio turpis feugiat risus, eu mollis felis massa vel erat. Nulla fringilla sem sit amet magna cursus iaculis. Pellentesque ac lorem nec tellus mollis congue. Fusce ornare gravida magna nec fringilla. In ut rutrum arcu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent pretium placerat elit nec ultrices. - -Mauris vitae erat id diam ornare eleifend non nec nisi. Maecenas eget dolor id libero dignissim euismod at nec justo. Nulla in commodo tortor. Nullam eleifend sem ac purus imperdiet, ut aliquet nibh vulputate. Suspendisse sed consectetur nunc, sed pulvinar sem. Mauris eget leo lectus. Phasellus a ante varius, dignissim odio vitae, elementum nisl. Aenean ac urna vel sem ullamcorper tincidunt scelerisque non enim. Fusce nec est eu eros convallis semper. Etiam nec nisl nunc. - -Mauris fermentum erat et sapien imperdiet egestas. Mauris ac eros ut nisi volutpat viverra et quis nibh. Quisque nibh dui, pellentesque malesuada lectus vitae, laoreet tempus nulla. Pellentesque eget libero egestas, bibendum lectus sed, sollicitudin purus. Quisque quis dictum orci. Quisque rutrum accumsan fermentum. Quisque viverra, urna sed cursus euismod, lectus mauris bibendum eros, et mattis massa neque nec eros. Donec maximus vulputate justo, et faucibus mi mattis ut. Donec at iaculis sapien. - -Proin sit amet mi mattis, vestibulum elit eu, scelerisque ante. Integer malesuada aliquet convallis. Maecenas pretium vitae ipsum sit amet iaculis. Quisque tincidunt nisi nisi, eu viverra massa feugiat in. Integer porttitor euismod libero at placerat. Maecenas pellentesque turpis placerat ante condimentum, ac congue lorem rutrum. Nulla ligula turpis, mollis vitae dignissim quis, faucibus et ligula. - -Donec a pulvinar justo. Praesent sed aliquet velit. Donec placerat blandit mi. Vivamus vulputate tempor accumsan. Vestibulum sit amet facilisis lacus, vitae consequat nisi. Nam aliquet nulla quis pulvinar tristique. Suspendisse rhoncus suscipit ipsum, sed sodales sem mattis interdum. Aenean interdum tristique tellus, tempor vestibulum nisl cursus ac. Nulla neque turpis, convallis at dapibus non, fermentum quis quam. Aenean eget ligula volutpat, aliquam leo sit amet, sagittis ligula. Suspendisse efficitur vel massa vitae dignissim. - -Mauris semper iaculis vulputate. Donec efficitur non ante quis pretium. Curabitur in dictum urna. Nullam imperdiet nisi eu leo lacinia egestas. Cras blandit mi nisi, sit amet condimentum justo tempor at. Cras ac arcu eu velit sodales tincidunt. Nunc tincidunt, felis vel fringilla sollicitudin, massa dui consequat lectus, sed dictum est dui at lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur condimentum tortor ac sagittis luctus. Suspendisse sed tincidunt lectus. Duis aliquet, libero imperdiet finibus tempus, lorem mauris ullamcorper nunc, at bibendum augue odio vitae tellus. Suspendisse ultrices, eros vel gravida molestie, turpis nisi rhoncus erat, a interdum est sapien et odio. - -Duis viverra dictum lectus vitae gravida. In hac habitasse platea dictumst. Sed vel lacinia diam. Aenean maximus elit vel ante sagittis, eu vehicula eros pharetra. Etiam pharetra diam at orci lacinia, nec posuere quam laoreet. Donec maximus quis felis vel aliquet. Morbi pulvinar dui a ipsum egestas, eget pharetra est fringilla. Vestibulum eget accumsan libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sollicitudin condimentum quam, quis placerat nunc imperdiet at. Vivamus ultrices, velit at maximus viverra, magna tortor imperdiet justo, sit amet fringilla lectus dolor facilisis urna. Sed placerat tristique lorem, ac elementum urna iaculis nec. Sed dapibus nisl eget scelerisque consequat. - -Etiam et dapibus nisi. Aliquam non finibus dui, lacinia condimentum enim. Sed ornare et lectus sed fermentum. Aliquam sed imperdiet arcu. Nullam pellentesque, dolor quis consectetur maximus, elit odio sagittis nibh, ut cursus augue nulla a orci. Etiam dictum mollis vehicula. Phasellus sagittis, risus quis semper dictum, nunc risus ultrices purus, et condimentum neque lorem nec libero. Donec posuere, libero eget ullamcorper pharetra, purus metus hendrerit nisl, ut viverra ante libero ut enim. Nunc vitae quam pellentesque, dictum arcu et, lacinia diam. Nunc in tempus sapien, nec dignissim justo. Curabitur elit tellus, placerat non congue id, pellentesque ut tellus. Nulla nibh eros, hendrerit nec venenatis in, consequat et odio. - -Sed quis pellentesque velit. Suspendisse cursus volutpat malesuada. Sed nec diam ac ipsum finibus sodales. Fusce tincidunt tempus urna, vestibulum tincidunt arcu imperdiet in. Donec arcu turpis, vestibulum aliquam volutpat ut, vulputate non lectus. Ut tristique faucibus blandit. Aliquam erat volutpat. Nulla facilisi. Sed in mattis lectus. Suspendisse potenti. Quisque dapibus fringilla orci, quis ultricies est volutpat non. - -In sit amet est condimentum, sollicitudin mauris non, egestas leo. Nulla facilisi. Phasellus venenatis, erat at lobortis dignissim, ligula enim ultricies felis, pulvinar egestas urna ante in tellus. Nam at lectus ante. Sed dictum vestibulum neque quis commodo. Aliquam laoreet metus ut mi placerat placerat. Sed feugiat nibh quis nulla fringilla bibendum sit amet nec purus. Vivamus ut leo quis sapien tempus lobortis eget ac odio. Suspendisse at ex id dolor fringilla mollis. Integer ex urna, congue ac turpis condimentum, hendrerit euismod tellus. In interdum aliquam tellus, a suscipit orci consectetur eu. Phasellus at odio at lectus sollicitudin luctus id nec diam. Nunc lacinia risus non aliquam malesuada. Proin rutrum consectetur lectus eget placerat. Mauris scelerisque nec nisl ac molestie. Sed sollicitudin scelerisque est, a hendrerit risus egestas in. - -Maecenas a quam condimentum, varius velit ac, pharetra neque. Morbi sagittis molestie nisl, eu luctus felis blandit sit amet. Maecenas accumsan nunc non justo ultricies blandit. Nulla non metus sollicitudin, pharetra dolor posuere, scelerisque tortor. Pellentesque euismod fringilla purus. Proin sed vehicula nulla. Vivamus scelerisque metus nunc, sed hendrerit dolor aliquet vel. Proin nec ante pulvinar elit pharetra cursus. In tempus lorem eros, ac auctor dolor tempor fringilla. Curabitur egestas imperdiet consectetur. Aliquam nibh tortor, dapibus eu orci a, ultrices condimentum urna. Etiam accumsan magna vel facilisis gravida. Mauris efficitur nisl dapibus orci luctus, sed bibendum mauris dictum. Quisque finibus lectus vel aliquet bibendum. - -Phasellus id augue nec magna viverra rhoncus nec at nibh. Mauris eu eros erat. Praesent finibus arcu non pretium cursus. In consectetur mi nec augue pretium, ac vulputate nisl luctus. Mauris sed gravida tortor, sit amet rutrum dolor. Aenean placerat dictum magna, vel condimentum est tincidunt at. Vivamus aliquet, dui ut pulvinar mattis, risus mauris malesuada ligula, et mattis neque ex eget lorem. Phasellus ut hendrerit tortor. Duis suscipit, eros a aliquam varius, arcu risus lobortis massa, et semper ipsum arcu sed sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vestibulum ipsum vitae enim malesuada, in aliquet justo ultricies. Ut volutpat gravida mi, elementum vehicula elit tristique eu. Curabitur ac nibh et ipsum placerat vestibulum vitae ac felis. Praesent turpis lorem, porta a mi quis, viverra cursus leo. - -Mauris tincidunt turpis eu lacus tincidunt rutrum. Quisque consectetur lectus at neque porttitor, non mollis urna ultrices. Duis eget semper est. Aliquam non elit vitae nibh condimentum tempor nec vel lacus. Etiam tempor lobortis ligula, ut pulvinar mauris tristique tempor. Sed bibendum vestibulum nisi sed tincidunt. Vestibulum vehicula tincidunt risus nec scelerisque. Integer convallis mi ac risus hendrerit porttitor. - -Proin in est viverra, sollicitudin nunc nec, dictum augue. Sed ultricies condimentum purus, ut ultrices ex eleifend sed. Aliquam porttitor sem nec quam accumsan commodo. Curabitur sed pellentesque urna. Duis eu ligula ac orci malesuada rutrum eget sit amet lacus. Nullam ut eros ex. Sed aliquet leo nec urna gravida volutpat. Integer imperdiet molestie ligula, ac convallis dolor. Suspendisse elementum ligula id risus dignissim, quis laoreet ante faucibus. Aenean porttitor sagittis commodo. Fusce justo purus, condimentum ut mollis vel, sollicitudin eget sapien. - -Sed interdum elit vel tortor convallis feugiat. Ut posuere ex nec venenatis interdum. Integer consectetur orci rhoncus tellus faucibus ullamcorper. Duis lacinia efficitur semper. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ultrices leo eget quam imperdiet, non tempor lacus condimentum. Cras vel dignissim diam. Mauris non maximus massa. Etiam a velit vel lacus ullamcorper faucibus. Curabitur quis facilisis nisi. In vehicula ut nulla vel consectetur. Duis iaculis eu tellus dictum mollis. Suspendisse eget rutrum odio. Vestibulum nec consectetur est, at vehicula velit. In a libero vitae lacus viverra sodales. - -Nulla interdum cursus leo, quis egestas elit auctor eget. Nullam mauris lacus, consectetur vitae augue non, commodo luctus justo. Cras porttitor aliquam eros in mattis. Morbi maximus libero neque, quis viverra magna fringilla quis. Ut aliquam ante vitae vehicula luctus. Sed congue a nulla et maximus. Vivamus porttitor felis sed augue gravida fermentum. Donec in lacus rutrum, finibus lacus ac, placerat quam. Proin placerat nunc vitae posuere iaculis. Etiam suscipit mi est, id congue diam commodo sit amet. Ut consectetur consectetur lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Aliquam erat volutpat. Curabitur convallis turpis sed massa cursus aliquet. Nullam id nibh ac ex accumsan tincidunt vitae nec nunc. Sed accumsan risus vitae ultrices semper. Sed ut sem eget arcu egestas sodales. Suspendisse facilisis risus in nulla condimentum suscipit. Nulla sed congue tortor. Etiam porttitor tellus lorem, non convallis arcu dapibus at. Nam vitae tristique dolor. Donec eu sem aliquam, tristique nulla ut, congue ante. Pellentesque vitae egestas turpis. Nam quis mauris consectetur purus elementum scelerisque. Vestibulum condimentum aliquet aliquam. - -Aliquam erat volutpat. Etiam et feugiat nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis est sodales, egestas odio fermentum, eleifend urna. Nulla sed volutpat nibh. Aenean ac placerat massa, elementum elementum lectus. Proin euismod, urna ut semper tristique, sapien ipsum aliquet risus, ut molestie odio sapien sed enim. Vivamus vestibulum purus risus, vel lobortis sem luctus vitae. Aliquam ultricies eu nulla id faucibus. Nunc eu odio ultricies, rhoncus lorem eget, pharetra sapien. Phasellus vitae neque ac sem ornare pharetra ut vitae purus. Sed malesuada tristique quam nec viverra. Sed condimentum, arcu id venenatis feugiat, massa tortor dapibus nisi, a facilisis lorem ligula semper mi. - -Donec lacinia felis laoreet sem dapibus mollis at a orci. Etiam viverra dolor nec magna tempus lacinia nec vel metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque eget quam massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas luctus, nunc sit amet egestas ultrices, nibh felis imperdiet est, id dignissim ante nibh non tellus. Ut eget lectus ipsum. - -Nullam porta diam ut arcu egestas congue. Nullam viverra nisi sed diam convallis eleifend. Nullam porta sed augue ullamcorper aliquet. Curabitur tempor sapien felis, at dictum dolor cursus nec. Nullam lorem risus, finibus non sollicitudin a, hendrerit vel diam. Praesent nibh nulla, semper id erat vitae, faucibus mattis nisi. Nulla ut libero id justo luctus convallis nec in tellus. - -In ultrices vel augue a pharetra. Donec accumsan malesuada massa vitae faucibus. Aenean consectetur nisi nulla. Praesent libero nisl, luctus eget vestibulum ac, ultricies sed ex. Sed lobortis ut elit a semper. Quisque dapibus bibendum gravida. Aenean porta vulputate nibh fringilla sollicitudin. Cras vel mi justo. Sed quis orci bibendum, hendrerit purus et, sollicitudin diam. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc ornare laoreet sem, non gravida sem pharetra sit amet. Morbi vel ullamcorper dui. Ut aliquam, enim sit amet molestie dignissim, quam orci gravida mi, sed mollis turpis mauris ut est. Nunc tincidunt enim a quam iaculis, sed dapibus diam dapibus. Donec malesuada commodo elit, eu blandit libero volutpat vitae. Fusce libero magna, tristique ut lacus eu, bibendum venenatis augue. Proin ornare augue et pulvinar lacinia. - -Nullam eget orci cursus, ullamcorper urna a, rhoncus orci. Morbi sed ipsum quis dui porttitor convallis. Ut ornare varius odio vitae varius. Sed sollicitudin sed risus nec varius. Aliquam placerat ac risus eu pulvinar. Vestibulum diam dolor, egestas nec purus et, molestie convallis sapien. Maecenas scelerisque mauris eu enim ultricies, id aliquam leo congue. Vestibulum imperdiet neque sed consequat condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eget porttitor turpis. Mauris vitae est eget justo porttitor imperdiet a et nibh. Cras elementum, lectus et vulputate eleifend, diam leo efficitur ipsum, eget finibus quam sapien at tellus. - -Vivamus dui metus, ornare at eros varius, facilisis malesuada mauris. Mauris laoreet felis at vestibulum pellentesque. Pellentesque fringilla elit orci. Pellentesque leo enim, sodales a consectetur eu, congue a eros. Aliquam eu dolor dui. Mauris turpis metus, volutpat id convallis sit amet, volutpat sit amet tortor. Donec eu tellus est. Suspendisse non leo urna. Etiam suscipit elementum mauris, ut pulvinar enim suscipit et. Sed ultrices pharetra tortor. Donec commodo enim sed massa dignissim, quis vestibulum lectus interdum. - -Duis vestibulum gravida dolor varius iaculis. Quisque id facilisis diam. Aliquam erat volutpat. Phasellus tincidunt pellentesque mi vitae facilisis. Nunc venenatis, arcu et commodo suscipit, purus mi rutrum odio, id aliquet lectus ex vitae dolor. Nulla ut commodo lectus. Phasellus interdum iaculis velit. Vestibulum eget malesuada tortor. Nam a tellus efficitur, iaculis augue nec, tincidunt felis. Maecenas molestie diam ut turpis iaculis facilisis. Aenean mattis magna eu est sollicitudin, quis faucibus ex tincidunt. Pellentesque maximus commodo metus vel malesuada. Aenean nec sapien dignissim, mollis augue vitae, gravida ex. - -Curabitur sit amet enim scelerisque, accumsan ex ut, facilisis leo. Nulla varius tortor neque, vitae imperdiet massa porttitor in. Cras quis magna justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tincidunt mi justo, a fringilla quam posuere sed. Quisque convallis lacus at euismod interdum. Vivamus cursus feugiat elit sit amet porttitor. Etiam eros magna, varius nec ex et, aliquam vulputate velit. Donec ac ligula non tellus eleifend convallis. Morbi posuere neque augue, et ullamcorper nisl rutrum eget. Aliquam augue nulla, malesuada nec cursus in, ornare at lacus. Pellentesque varius facilisis nunc sit amet venenatis. - -Nam ut tellus ullamcorper, finibus magna nec, semper elit. Fusce pulvinar nec purus blandit auctor. Ut egestas, est eget imperdiet aliquam, lectus purus ullamcorper neque, eget venenatis ligula magna ut leo. Ut fringilla ullamcorper risus sed tincidunt. Sed pulvinar vehicula tortor vel tincidunt. Nulla at vehicula ligula, sed rhoncus purus. Sed elementum, quam sit amet convallis finibus, nisi nunc venenatis mauris, sed luctus leo orci quis lacus. Maecenas venenatis est nec diam consectetur dignissim. Cras lacinia vehicula laoreet. Cras eu ex in nunc scelerisque imperdiet. - -Praesent eget nibh imperdiet, pulvinar dui eget, aliquet ipsum. Suspendisse eu hendrerit sem. In ac augue non enim porttitor pulvinar sit amet in mauris. Aenean vel justo quis metus facilisis feugiat nec eu nibh. In placerat, est sit amet blandit aliquet, erat nunc semper justo, eget pellentesque lorem mi quis neque. Pellentesque leo ex, semper sit amet accumsan nec, elementum id arcu. Vivamus faucibus ipsum non mollis imperdiet. Vestibulum sit amet sapien ac sem rutrum auctor a nec nunc. Pellentesque elementum sollicitudin tellus, vel malesuada lacus pretium eget. Nunc id nibh ac augue eleifend dictum. Etiam at tempus justo. - -Nunc bibendum risus sit amet ultrices congue. Nulla facilisi. Nulla id pulvinar erat. Curabitur libero odio, finibus et nisl eget, auctor gravida neque. Praesent nec interdum ex. Morbi gravida ante vel nisl cursus maximus. Vivamus vestibulum et quam ut facilisis. Vivamus vel erat lectus. Pellentesque finibus nisi eu sollicitudin pharetra. Pellentesque volutpat consectetur libero eget porta. Vestibulum fermentum ipsum sed dui tincidunt commodo. Mauris quis sodales elit. Nunc sodales felis hendrerit velit dignissim, nec finibus arcu sollicitudin. Phasellus a venenatis neque. Maecenas aliquam est quam, vitae viverra orci blandit ac. - -Donec interdum aliquet nunc, nec pretium turpis feugiat vel. Cras non justo cursus, ornare ligula tempor, auctor sem. Sed sed est sed nisl egestas consequat vitae vitae leo. Quisque leo elit, ultricies et eleifend porttitor, venenatis pellentesque leo. Integer elit urna, rhoncus a facilisis id, fermentum congue purus. Ut tempus pretium neque vitae mattis. Fusce id congue ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent imperdiet purus a nisl condimentum, sit amet rutrum enim maximus. - -Quisque leo quam, consectetur ac turpis vitae, pellentesque blandit mi. Duis quis suscipit tortor. Donec quis leo quis sapien ultrices gravida a eu mauris. Sed posuere nibh ut laoreet tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam turpis orci, tempor ac dignissim eget, maximus in purus. Praesent diam nulla, finibus eu feugiat sit amet, posuere at nulla. Ut vitae diam eu nibh ornare mattis at id ex. Proin faucibus efficitur mauris eu volutpat. In vel ullamcorper sapien, at tristique neque. - -Etiam accumsan est vel facilisis suscipit. Nulla congue orci in sem venenatis congue. Maecenas pharetra non nunc at euismod. Duis fermentum et sem non euismod. Nam tincidunt nisi a elit cursus varius. Maecenas vulputate eleifend consectetur. Aliquam erat volutpat. Donec consectetur sapien nec tellus facilisis consequat. Proin quis auctor felis. Donec et venenatis ligula, a convallis ante. Nulla tempor, mauris quis iaculis feugiat, lacus risus vulputate augue, ut facilisis nibh dui eget orci. Mauris leo dolor, rhoncus sed nisi id, molestie vehicula erat. Aliquam porta lacus id nibh mollis porta. Curabitur vel congue quam. Quisque ut ipsum blandit, imperdiet nisl sit amet, ullamcorper nulla. - -Sed purus enim, dictum ut eros eget, condimentum pharetra lorem. Suspendisse auctor nisi mi, at facilisis ligula luctus at. Nullam vulputate iaculis leo a fermentum. Aenean lobortis est vel elit convallis, id mollis lectus facilisis. Aliquam eu accumsan ante. Nunc aliquam vehicula diam, at ultrices diam vehicula at. Morbi mattis dapibus vehicula. Nulla nunc mi, gravida ac lacus ac, porta viverra mauris. Suspendisse potenti. - -Pellentesque scelerisque porta tellus quis commodo. Proin quam massa, cursus nec tellus eu, elementum dapibus lorem. Sed et tincidunt nisi, sed finibus turpis. Vestibulum dictum velit ultrices tempus placerat. Duis varius tempor scelerisque. Sed laoreet cursus magna, ac vulputate turpis imperdiet ultricies. Fusce lacinia posuere diam, ac vulputate justo ornare nec. In rutrum vestibulum purus. Sed ut enim convallis, ornare eros et, tempor massa. Aenean mattis nisl lectus, pharetra porttitor odio bibendum id. Etiam nibh quam, malesuada sed luctus eget, hendrerit ac ante. Aliquam vestibulum lectus at nunc convallis pretium. Praesent interdum turpis tortor, ac auctor turpis tristique id. Integer ac cursus elit. Quisque viverra massa neque, vel ullamcorper quam egestas id. - -Curabitur convallis ligula ipsum, non consequat turpis scelerisque vestibulum. Vestibulum blandit porta ante vitae vestibulum. Morbi sodales quis risus vitae porta. Nunc scelerisque congue dolor, a fermentum risus blandit a. Phasellus at nunc sed nibh feugiat pharetra vitae id leo. Vivamus volutpat leo nec ligula faucibus, at lacinia elit porttitor. Proin varius ligula et nibh aliquet, non malesuada nisl ornare. - -Aenean tempus bibendum aliquet. Morbi consequat nibh ex, at bibendum mauris pulvinar nec. Curabitur nec nibh sit amet elit fermentum volutpat quis non nisi. Praesent gravida, leo nec pulvinar condimentum, elit justo dignissim orci, sit amet iaculis lacus nisi ut sem. Fusce accumsan urna a arcu facilisis hendrerit. Proin ligula nulla, tempor vitae pretium non, finibus ut mi. Ut vestibulum est a lorem facilisis faucibus. Vestibulum et leo in velit consequat tempor. Integer ac purus et leo lobortis aliquam et vitae nulla. Quisque varius et nunc sit amet elementum. Vivamus nec lacinia odio, a maximus risus. Proin in justo eget odio porttitor tincidunt feugiat vel arcu. Sed fermentum augue ut mauris auctor, quis vestibulum lectus fringilla. Integer a mi maximus leo aliquet iaculis. - -Nam vel erat hendrerit dolor congue hendrerit malesuada vel sem. Morbi eget risus feugiat nisl tincidunt maximus eu sit amet leo. Maecenas quis cursus turpis, et scelerisque leo. Sed dui erat, imperdiet sed massa in, dictum tristique ligula. Quisque mauris diam, accumsan ac feugiat a, ornare at erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis at neque vitae nibh mollis egestas. Mauris sollicitudin lacus in neque facilisis, at varius mi eleifend. Vestibulum vulputate ipsum laoreet tortor pharetra, nec convallis turpis congue. Mauris in egestas mauris, condimentum aliquet tellus. Phasellus porttitor diam ut eros vehicula, dapibus maximus ipsum mollis. Nam congue neque lorem, eget ultricies nunc pretium a. - -Nullam tempus aliquam metus. Aliquam sit amet laoreet tellus. Aliquam mattis placerat maximus. Suspendisse varius dictum urna. Duis feugiat, est vitae molestie fringilla, enim leo porta ex, at dignissim libero nulla et nisl. Sed fringilla ipsum ac ipsum mollis, quis vulputate turpis ullamcorper. Quisque vel ante venenatis, placerat quam sit amet, placerat mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Sed suscipit in sapien in tincidunt. Aliquam erat volutpat. Duis vestibulum facilisis velit. Donec eget ante et lacus dictum aliquet. Nam et velit tellus. Maecenas rhoncus felis eget aliquet tristique. Pellentesque vehicula gravida lectus. Donec eget rhoncus metus. Etiam hendrerit arcu vitae nulla semper lacinia. Nunc ultricies magna a nisl lobortis consectetur. Nam nisi odio, molestie a gravida sed, consectetur at neque. Vivamus id facilisis est. Quisque viverra consectetur pellentesque. - -Quisque condimentum volutpat leo. In in dui enim. Nam varius orci non libero sodales, sed euismod mi condimentum. Nullam eu risus in enim gravida pulvinar. Duis laoreet odio metus, quis varius sapien blandit ut. Ut vitae bibendum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sagittis quam felis, ac pulvinar nulla consequat a. Integer quis est at dui auctor tincidunt ac vitae quam. - -Nulla libero massa, ultrices sit amet nibh id, tempus dapibus dolor. Integer sed magna et tellus congue pulvinar id in sapien. Curabitur eu maximus diam, in convallis libero. Phasellus quis rhoncus ligula, sed varius enim. Vestibulum sollicitudin, risus eget euismod sodales, est sapien aliquam lorem, hendrerit lacinia massa eros sed tellus. Donec odio erat, laoreet eleifend tempus et, lacinia at metus. Integer pharetra sem ultricies neque condimentum elementum. Proin nibh leo, pulvinar non nisl et, faucibus condimentum orci. Suspendisse convallis ut enim in aliquam. Vivamus aliquet lorem eu libero porttitor, at placerat nisi pharetra. Nam et magna ut diam ultricies consequat ut vitae odio. Proin porta nunc at egestas ultrices. Nam in erat quam. Curabitur congue aliquam velit id suscipit. Maecenas id pharetra orci. - -Morbi a nisi id risus suscipit viverra quis egestas mauris. Nam erat enim, sagittis a quam nec, commodo condimentum lorem. Donec nulla ipsum, consectetur ut aliquet elementum, pulvinar molestie lectus. Pellentesque nisl enim, commodo non arcu eu, elementum ultrices nisl. Vivamus placerat cursus purus vitae facilisis. Donec aliquam id ligula at lobortis. Aenean eu consectetur leo. Praesent sed felis at orci venenatis condimentum in quis lacus. Sed arcu erat, dictum ut ante sagittis, iaculis sollicitudin nulla. Fusce ut tincidunt nisl. Etiam convallis tortor eget pellentesque iaculis. Etiam elementum ante a ultrices porta. Quisque eleifend ipsum eget sapien efficitur, a tincidunt ex cursus. Praesent aliquam sem vitae odio suscipit molestie. Suspendisse volutpat ut libero et vulputate. - -Donec tincidunt velit urna, vehicula tincidunt tortor pellentesque vel. Donec vel lectus suscipit ipsum porta tristique in eu ante. Praesent vel accumsan tellus, nec vestibulum odio. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel magna eget lorem vehicula ullamcorper eu ut diam. Morbi lacus eros, molestie a dignissim dapibus, pulvinar accumsan justo. Pellentesque vitae metus nec risus viverra faucibus. Proin diam urna, vehicula id volutpat in, condimentum sed augue. Pellentesque vehicula mi vel ipsum venenatis feugiat. Integer augue diam, sollicitudin et justo sed, sodales pellentesque turpis. - -Integer eget tincidunt ante. Donec imperdiet laoreet dolor, et condimentum quam faucibus non. Nam a dignissim augue. Donec vel aliquet lectus. Praesent a ipsum eu odio consectetur mattis nec at neque. In quis auctor ex. Ut fringilla sodales rhoncus. Nunc euismod velit at nibh dapibus, id malesuada ligula tristique. - -Aenean augue nibh, finibus eu consequat nec, euismod at lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vitae enim ac orci finibus interdum. Nullam in eleifend ligula. Morbi aliquet orci tellus, quis ullamcorper ante dapibus ut. Ut condimentum aliquam lacus, in semper velit lacinia a. Integer et diam vitae magna fringilla egestas. Sed nec hendrerit lectus, vel posuere nibh. - -Duis tincidunt ipsum eu quam elementum, vel tempor justo tristique. Morbi in ipsum non quam blandit cursus non vitae ex. Sed rhoncus augue sit amet fringilla dignissim. Sed a lorem eu neque viverra finibus. Praesent vel maximus quam. Sed posuere, diam at convallis pulvinar, tortor turpis rhoncus sapien, eget lobortis urna nunc eget neque. Vestibulum ultrices vulputate risus, sit amet faucibus massa finibus non. Donec interdum posuere eros, a egestas diam tristique at. Donec eget est quis eros ultrices venenatis vitae ac quam. Cras vitae ipsum euismod, dignissim risus sit amet, dapibus velit. Donec ullamcorper eros est, ut mattis nisi bibendum at. Duis pellentesque augue quis urna pulvinar auctor. Phasellus ullamcorper magna vitae arcu luctus, ac feugiat justo accumsan. Nunc eu odio a velit varius blandit. Sed ultrices elit quis ligula laoreet viverra. Cras rutrum non neque quis sollicitudin. - -Aliquam nec nibh dignissim, consectetur dolor in, venenatis magna. Morbi sit amet posuere libero, quis malesuada sapien. Pellentesque eu magna at dui ultricies scelerisque. Duis non tortor sapien. Vestibulum pellentesque aliquam nulla, ut mattis libero commodo id. Phasellus sit amet velit eleifend, pretium est ac, placerat tellus. Curabitur non lacus tellus. - -Curabitur a arcu in orci tristique aliquet. Curabitur sed augue sem. Nam velit quam, ornare non consectetur in, vehicula dapibus arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut semper est neque, et blandit est pellentesque et. Quisque nec diam laoreet nisi vestibulum tempus. Proin non libero eget dolor rutrum placerat. Aenean ut purus sed nisi gravida consequat vitae ac metus. Nulla accumsan, nunc ac convallis tristique, metus libero rutrum metus, nec sagittis erat metus non ex. In dignissim sodales scelerisque. Aenean bibendum elementum ante, nec rhoncus turpis tempus quis. - -Nullam eu libero massa. Nulla nec auctor nunc. Fusce fermentum, nibh eget pretium fringilla, nisi ligula pharetra risus, pellentesque auctor leo nisl at neque. Sed sodales dictum mattis. Fusce id congue sapien, sit amet facilisis nibh. Donec ornare mi eget diam aliquet gravida. Nam volutpat massa tortor, non imperdiet lacus rhoncus ut. Pellentesque quis ultricies metus, eu dictum tellus. Ut suscipit, lorem vel venenatis consequat, enim erat imperdiet sapien, hendrerit faucibus ipsum nibh sed nibh. Maecenas elementum felis nec tortor interdum, nec ullamcorper massa varius. Nulla non leo velit. - -Aenean vel scelerisque nunc, ut convallis ex. Maecenas imperdiet tellus non aliquet laoreet. Aliquam malesuada ullamcorper felis non hendrerit. In tincidunt consequat fermentum. Suspendisse facilisis luctus eros, in feugiat nisl dictum a. Integer massa nisi, tincidunt laoreet aliquet ac, tempor eu elit. Proin ac quam vel nunc hendrerit auctor. Curabitur maximus orci sit amet ex tempus vehicula. - -Sed consequat arcu mi, a gravida est condimentum eget. Donec pretium lorem vel euismod cursus. Donec dignissim orci ac suscipit gravida. Maecenas dapibus, purus id placerat convallis, libero purus imperdiet dui, at consequat ex urna eget justo. Nam sapien lectus, sagittis ac feugiat in, porttitor ac mi. Etiam bibendum congue vehicula. In euismod sed ipsum at blandit. Duis suscipit massa sed nibh mollis, et tincidunt metus feugiat. Sed eget quam in magna porta ornare. Nam consectetur feugiat leo, id sollicitudin elit commodo vel. Pellentesque hendrerit nunc nulla, sed ultricies ante lacinia in. - -Integer vel libero quis magna tempor iaculis. Praesent mattis erat nibh, ut ultricies tortor hendrerit a. Donec non dictum sem, id gravida enim. Vestibulum ultrices, nisl eu euismod lobortis, dolor mi molestie erat, eu consequat eros ligula quis mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla cursus, augue sollicitudin dapibus convallis, erat arcu dapibus lorem, vel ornare eros quam vitae nunc. Aenean ut dapibus nunc, vel sagittis ex. Curabitur ut pulvinar tellus. Cras sit amet est at libero vestibulum semper et sed velit. Suspendisse porta ipsum ex, sit amet porttitor sapien elementum eu. Quisque euismod arcu non molestie iaculis. Maecenas et ullamcorper magna. Vivamus laoreet rhoncus fringilla. Nam ullamcorper nibh eu odio sagittis, vitae semper ex aliquet. Aenean in nisi vel nisi dapibus pellentesque a at turpis. Vestibulum non volutpat nulla. - -Morbi consectetur nisl et lacus tincidunt eleifend. Donec sed hendrerit libero. Proin vel convallis metus. Nam non tortor sapien. Duis porta mauris vel ornare blandit. Morbi at dictum metus. Morbi sed malesuada leo. Pellentesque malesuada nisi a neque placerat mollis. Donec non imperdiet odio, in congue nunc. - -Phasellus dapibus nulla at mollis accumsan. Phasellus quis libero ante. Praesent in neque efficitur, eleifend mauris sit amet, posuere metus. Mauris nisi mauris, pharetra ut vestibulum a, lobortis id erat. Praesent at condimentum tortor, a vehicula arcu. Cras suscipit mollis egestas. Phasellus sit amet tellus mattis, bibendum ligula sed, tempor ligula. Sed scelerisque ultrices nisl, quis fringilla mauris feugiat sed. Etiam eu erat pellentesque augue eleifend porta nec ac turpis. Duis at sodales massa. Aenean ac dui lobortis, rhoncus massa non, cursus massa. Suspendisse ante magna, sagittis at ullamcorper non, feugiat eu ligula. Maecenas facilisis, nulla a aliquet rhoncus, libero libero aliquet nunc, sed rhoncus eros diam a sem. - -In aliquam lacus vitae gravida blandit. Fusce molestie dui eget sapien interdum, in consectetur tortor feugiat. Nunc vitae enim vestibulum sapien gravida laoreet. Vestibulum fermentum ut dui in efficitur. Nullam quis ex vitae nisl facilisis convallis at a lacus. Sed scelerisque non libero in consequat. Integer posuere tortor vitae quam egestas varius. Sed eu turpis leo. Pellentesque vel urna quis nisi congue pellentesque a quis sem. Sed volutpat blandit rhoncus. Cras mi dui, malesuada ut volutpat vitae, tempus vel lacus. Ut mattis dui in enim porta, a pharetra turpis finibus. Nunc ut posuere mi. Aenean commodo risus ut leo malesuada, nec efficitur dui convallis. In hac habitasse platea dictumst. - -Phasellus interdum congue rutrum. Sed venenatis lectus a sollicitudin malesuada. Cras tortor ante, pharetra et turpis nec, iaculis accumsan sapien. Cras ac nulla rutrum, consequat lacus ac, lobortis nulla. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis bibendum turpis at massa fringilla pulvinar. Curabitur id sagittis metus, a molestie sem. Vivamus quis mauris sit amet augue consectetur pretium eu non arcu. Sed sit amet efficitur neque. Vestibulum consectetur ligula non commodo lobortis. Nunc tincidunt eros odio, id lacinia nulla maximus quis. - -Donec nec nibh vel metus bibendum facilisis eu ut eros. Nunc sagittis, ipsum vel faucibus gravida, nunc nunc sollicitudin est, eu pellentesque ex magna vel libero. Aenean at tellus at metus mollis vehicula id non tellus. Sed ac scelerisque velit. Morbi ullamcorper augue sapien, in elementum sapien ultrices et. Curabitur at est purus. Sed auctor, massa eget finibus vulputate, metus lectus fringilla dolor, at sagittis velit nulla vitae ex. Phasellus ac convallis sem. Aenean quis libero ipsum. Aliquam dapibus turpis quis imperdiet ultrices. Pellentesque vehicula bibendum porta. Nulla sed semper purus, nec accumsan nulla. Integer volutpat massa in lectus viverra egestas. - -Ut malesuada nisi quis lacus finibus, in consequat arcu pulvinar. Nulla pulvinar ornare sem sed scelerisque. Fusce lobortis et lacus vitae consectetur. Vivamus id nisl eu urna ullamcorper ornare in quis nulla. Sed laoreet, eros aliquet laoreet efficitur, quam eros cursus nunc, at iaculis lorem tortor eget lacus. Cras aliquam nec eros vel porta. Proin eget ipsum nec nisi vulputate ullamcorper sit amet non sapien. Donec sodales libero vitae tortor dignissim, et sollicitudin sapien vehicula. Donec tempor egestas fermentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc lorem leo, dignissim sed est ac, volutpat molestie libero. Ut feugiat lectus nec odio gravida auctor. Ut ac ipsum cursus, efficitur ipsum ac, vehicula turpis. Donec ac nibh a mauris finibus dignissim vel sed dolor. - -Fusce ornare augue consequat, dignissim purus vel, pulvinar leo. Pellentesque a sem volutpat, hendrerit libero non, consectetur augue. Etiam urna felis, maximus rutrum blandit eget, cursus at risus. Donec congue aliquet pharetra. Aenean id blandit metus. Nullam venenatis egestas neque non finibus. Proin rutrum sapien sit amet nisl vehicula rutrum. Maecenas aliquam libero vitae laoreet tempor. Sed ut consectetur urna. Donec gravida dui sit amet tempor posuere. Maecenas aliquam viverra libero. Donec sagittis vitae leo eget condimentum. Aenean fermentum, elit vitae volutpat hendrerit, risus neque vehicula libero, et aliquet erat felis quis ante. - -Suspendisse consequat molestie auctor. In varius enim nec viverra semper. Aenean dui purus, posuere quis sodales eget, interdum in augue. Integer a erat vitae nibh ultricies porttitor sed quis tortor. Nam commodo viverra nibh, eu luctus lorem ornare sed. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec at ornare augue. Pellentesque sit amet pretium mauris, et pellentesque neque. Morbi dictum odio eu tempor fringilla. Suspendisse porta elit dui, sit amet faucibus felis ornare at. Donec sollicitudin eros sapien, eget elementum dui malesuada quis. - -Maecenas lacinia faucibus risus, eget venenatis massa. Curabitur eget turpis eget lacus interdum egestas. Pellentesque ut neque a libero volutpat cursus. Fusce ac quam elementum, pretium orci et, rutrum erat. Phasellus vulputate quis magna nec accumsan. Integer fermentum quam in euismod tincidunt. Praesent tincidunt, mauris at ultrices faucibus, ante risus condimentum lectus, sit amet faucibus metus justo at massa. Ut iaculis interdum elit sit amet rutrum. Sed sed metus in mi laoreet iaculis at et lacus. Aliquam mattis pharetra erat sit amet vulputate. Morbi vitae erat in tellus commodo convallis semper quis dolor. Donec commodo pulvinar nunc, vitae eleifend justo sodales vel. Duis elementum sed augue quis semper. Curabitur lorem velit, facilisis a nisl id, finibus sagittis orci. - -Pellentesque rutrum in ligula vitae cursus. Donec eu sagittis urna. Quisque magna est, laoreet eget dignissim in, elementum ut est. Donec vitae mi tempus, pellentesque nulla eu, ultricies massa. Sed rutrum ligula mi, id viverra sapien accumsan sit amet. Vivamus egestas, felis nec feugiat blandit, nibh lacus mattis massa, at rutrum dolor orci eget magna. Sed aliquet quam lorem, et posuere neque blandit rhoncus. - -Sed luctus turpis et mauris iaculis, quis euismod libero aliquet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas tortor odio, vulputate sagittis suscipit eu, posuere sit amet dui. In nisi sem, euismod maximus interdum quis, facilisis eget nunc. Fusce vulputate quam in massa sollicitudin, eu posuere massa pulvinar. Nulla feugiat ultrices fermentum. Mauris fringilla est id diam malesuada condimentum. - -Maecenas nulla mauris, tempus vel erat non, fermentum gravida leo. Duis hendrerit tortor arcu, tempor viverra lectus pretium ac. Pellentesque convallis turpis purus, a vehicula nulla vulputate in. Morbi neque ante, rutrum et orci eu, blandit dapibus velit. Vestibulum varius imperdiet magna, vitae iaculis libero pretium hendrerit. Curabitur nec lacus varius, malesuada orci vel, faucibus neque. Donec tortor massa, sollicitudin sit amet feugiat at, imperdiet sit amet massa. Nunc at lobortis arcu, a dictum leo. Aliquam at erat odio. - -Ut neque felis, molestie vitae erat sit amet, venenatis commodo orci. Nunc libero purus, ultricies efficitur pretium quis, tempus eget purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque at fermentum magna, at fermentum purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur nunc lectus, lacinia vitae turpis sit amet, hendrerit pellentesque est. Etiam eget ex feugiat, rhoncus quam quis, commodo eros. Aenean laoreet nisl vitae tellus efficitur, at luctus nisi elementum. - -Vestibulum tincidunt vehicula nisl, nec auctor felis pretium eget. Aenean egestas cursus mauris, non mollis quam auctor ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam egestas leo sed aliquam sodales. Phasellus faucibus tortor ut ligula rhoncus hendrerit. Curabitur facilisis euismod ultrices. Nullam molestie, nulla ut facilisis accumsan, leo ante commodo neque, vitae eleifend lectus libero et leo. Phasellus id dapibus urna, id cursus lectus. Donec maximus, dui feugiat porta bibendum, orci diam venenatis ante, non rhoncus urna ante eget risus. Proin vitae erat nec elit pulvinar suscipit ac nec velit. Donec mollis nisl ut fringilla fringilla. Nulla dapibus nec nibh a blandit. Integer at enim posuere justo rhoncus tristique nec vel velit. Donec placerat, neque venenatis aliquet pellentesque, sapien eros posuere dui, quis dapibus arcu est eget turpis. Ut id faucibus dolor. - -Cras sed porta massa. Suspendisse non risus erat. Mauris ut justo id augue mattis iaculis. Curabitur eget velit urna. Sed blandit sodales rhoncus. Integer a libero nulla. Vestibulum sit amet euismod lacus. Nullam non metus at mi congue tincidunt ac id lorem. Pellentesque tellus risus, sodales nec nibh nec, ullamcorper semper turpis. Fusce nunc leo, ultricies a massa blandit, cursus interdum enim. Nulla at quam at libero volutpat eleifend sit amet ut nunc. Morbi pellentesque est elit, eget suscipit nisl eleifend nec. Maecenas tincidunt, eros at lacinia cursus, mauris nisl efficitur massa, eu tincidunt mi erat vel nisi. Suspendisse tempor euismod neque, eget sollicitudin massa ornare in. Suspendisse consectetur, purus quis laoreet dignissim, nisi purus mollis risus, eget accumsan magna erat ut magna. Morbi quis velit tortor. - -Etiam et neque semper, porttitor ipsum eu, vulputate arcu. Donec aliquam ornare eros, at malesuada nulla luctus sed. Phasellus tincidunt maximus enim quis porta. Praesent diam felis, aliquet vitae imperdiet pellentesque, interdum quis metus. Nullam ultricies lorem nec consequat euismod. Sed ornare condimentum magna. Quisque elementum gravida dignissim. In id massa gravida, maximus ex a, placerat ligula. Nullam scelerisque metus at consectetur interdum. Morbi bibendum neque nisi, vitae tincidunt urna eleifend eu. Aenean pharetra ullamcorper purus, vel efficitur mi. Aenean tincidunt malesuada blandit. - -Nam a venenatis nibh. Duis consectetur nulla vitae felis fringilla, sit amet elementum felis efficitur. Donec vitae dignissim sem. Donec vitae urna feugiat, pellentesque ipsum eu, consectetur nunc. In feugiat nisl ante, eget auctor orci fringilla eget. Vestibulum a risus vitae nisi hendrerit malesuada iaculis in augue. Nulla eu luctus est, ac eleifend nulla. - -Nam iaculis blandit lacus, at iaculis sapien blandit a. Sed quis feugiat urna, nec facilisis orci. Nunc pharetra euismod neque eu cursus. Maecenas eu lorem mattis, sollicitudin tortor sed, suscipit est. Curabitur a elit et nibh efficitur placerat eget eget dolor. Phasellus vitae mattis nisi, sed vehicula arcu. Nunc gravida tortor quis nisi tristique interdum. Vivamus augue enim, sagittis ac tellus vel, finibus facilisis ligula. Nullam gravida feugiat est elementum congue. Nullam vel semper felis. Sed id lorem euismod, auctor tortor eget, vestibulum metus. - -Nulla facilisi. Praesent ut bibendum velit. Phasellus id erat et dui semper rutrum quis id metus. Aliquam vitae orci et erat imperdiet dapibus et ac magna. Duis at urna odio. Phasellus ultricies, libero sed fringilla dictum, felis nisi aliquet eros, nec maximus sapien mi vel urna. Aliquam erat volutpat. Nunc dictum turpis nec neque commodo efficitur. - -Curabitur eget tincidunt nisi. Ut sit amet mollis felis, at suscipit nulla. Phasellus augue turpis, facilisis nec mi ac, venenatis mollis ipsum. Donec feugiat porta velit, nec dictum odio. Duis faucibus, ex non aliquet consequat, diam enim consectetur nunc, quis dapibus metus turpis quis diam. Etiam vel velit purus. Morbi mollis maximus purus at viverra. - -Proin id volutpat tortor. Nam consectetur ac tortor id placerat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam in nunc id odio ullamcorper maximus sed sed elit. Sed ut elementum ex. Cras tincidunt massa urna, sed consequat lacus finibus ut. Mauris rutrum ex at ipsum volutpat posuere. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc nisi est, egestas at felis eget, facilisis commodo lectus. Vivamus sapien lorem, hendrerit ut neque eu, condimentum pellentesque justo. Proin magna orci, ultricies non porttitor vel, tincidunt at nibh. In malesuada in mi eget aliquam. - -Aenean placerat urna eu tortor interdum aliquet. Vestibulum volutpat, ipsum non pretium hendrerit, nisl libero interdum enim, quis vulputate ligula leo ullamcorper neque. In viverra convallis turpis, elementum aliquam metus aliquam sed. Suspendisse vitae quam ac nulla condimentum rhoncus. Ut quis fermentum ipsum, nec faucibus neque. Sed cursus faucibus ligula ac pharetra. Etiam faucibus, massa eget condimentum finibus, tortor magna tristique nisl, et sagittis nisi enim ut enim. Nunc vehicula, ligula quis congue pulvinar, sem diam rhoncus libero, eget facilisis odio mi quis elit. Nullam et viverra mi, ut tincidunt purus. In dapibus risus in ligula rhoncus, sit amet interdum libero tincidunt. Morbi vehicula hendrerit lacus id fringilla. In maximus condimentum felis sed venenatis. Nullam sed mi ante. - -Donec pharetra commodo porttitor. Maecenas nulla mi, tempor vel est quis, aliquet dictum ligula. Vivamus maximus bibendum quam, vel mattis dolor bibendum convallis. Ut commodo finibus turpis, nec sollicitudin turpis cursus ac. Nullam sit amet nunc vitae sem aliquet aliquet ac sit amet risus. Ut viverra purus eget mauris facilisis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed id tincidunt leo. Donec aliquet lacinia metus vitae elementum. Donec sed imperdiet enim. Morbi congue vehicula porttitor. Sed lobortis commodo sem, et pharetra velit facilisis id. Integer commodo feugiat urna, quis vulputate ligula sagittis eget. Proin cursus vitae velit sed dignissim. Aenean elementum consectetur porttitor. - -Ut in interdum mauris. Cras tortor nulla, dapibus nec nisl vitae, interdum molestie lacus. Nunc sed porta erat. Mauris ac ultrices odio. Curabitur porttitor lacus ac massa ultricies condimentum. Integer ut accumsan ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed sollicitudin, ligula porta hendrerit vestibulum, tortor erat facilisis ante, vel dignissim est ipsum eget turpis. Phasellus rutrum pharetra massa, eleifend congue neque euismod eu. - -Nullam tristique eros id erat pharetra pretium. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras ut felis congue, elementum diam sed, elementum est. Donec sagittis nulla at auctor placerat. Duis gravida ex risus, et tristique enim dignissim a. Pellentesque urna velit, pretium ut libero imperdiet, eleifend volutpat tortor. Phasellus non vehicula felis, sed hendrerit justo. Pellentesque iaculis efficitur accumsan. Proin diam nisi, auctor sit amet molestie ut, pretium a felis. - -Aliquam quis nunc vulputate dui hendrerit porta. Duis non sapien eget dolor suscipit dapibus vel at urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla pharetra dignissim leo, a pellentesque eros vulputate sit amet. Sed augue turpis, consequat id tincidunt non, congue et eros. Ut enim dolor, egestas euismod volutpat a, posuere ut enim. Donec eget nisl ut erat semper dignissim id ut massa. Sed maximus vitae orci at euismod. Ut sit amet lorem sed magna cursus tempor ut sit amet odio. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed a turpis non ipsum pharetra vulputate id eu metus. Integer a tristique dui, sed vehicula metus. Fusce vehicula erat id nulla posuere, a venenatis neque gravida. Ut lobortis, leo eu ornare ultricies, dolor tortor volutpat arcu, ac auctor augue dui vitae felis. Aliquam placerat enim nec sem volutpat, a scelerisque eros gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce venenatis feugiat tempor. Nullam non dictum mauris, vitae venenatis sapien. Aliquam scelerisque ligula in libero condimentum facilisis. Mauris non arcu quis enim placerat blandit. Duis hendrerit sapien vehicula, gravida metus at, elementum leo. In fringilla mauris non est consequat fermentum. Integer turpis libero, tempor eget sapien nec, ultricies imperdiet tortor. - -Pellentesque quam nisl, condimentum eu mauris nec, faucibus fringilla augue. Proin vitae sagittis nibh. Nunc et aliquet nisl. Morbi volutpat imperdiet diam et sagittis. Vivamus imperdiet risus ut purus interdum gravida. Morbi consequat posuere dictum. Aenean enim quam, venenatis at odio ac, pellentesque condimentum massa. Vivamus nisl sapien, scelerisque a posuere vel, ullamcorper semper sem. Morbi sollicitudin tempor neque ut molestie. Donec in lectus pretium, venenatis diam id, pharetra metus. Duis lorem tellus, condimentum eget cursus vitae, tristique id est. Donec at nisi porttitor, blandit enim at, euismod sapien. Nam augue quam, sagittis sed enim eu, iaculis dapibus leo. Aliquam aliquet commodo turpis a commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur auctor, sem id semper dictum, augue eros sollicitudin elit, at vestibulum nisi ex et purus. - -Vivamus imperdiet ultrices commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. In lorem lacus, volutpat et ligula quis, facilisis sodales mauris. Quisque ultrices elit eget mauris accumsan condimentum. Vivamus risus lorem, sollicitudin vel scelerisque ut, ultricies ut lacus. Nunc id magna erat. Proin non interdum nulla. Maecenas quis ligula tellus. Pellentesque quis lorem eget augue auctor gravida eu in nisi. Maecenas at auctor nunc. Quisque volutpat lorem sit amet feugiat gravida. Praesent mattis tortor ligula, at placerat eros dapibus sit amet. Etiam imperdiet nisi ut ipsum eleifend, quis laoreet velit porttitor. - -Fusce id ullamcorper erat. Aliquam vel consequat eros, quis tempor dolor. Vivamus ut orci eu nisl congue dapibus non in massa. Integer maximus laoreet mi dictum ultrices. Proin dignissim dui eu accumsan rhoncus. Quisque varius cursus arcu at finibus. Sed auctor lacinia metus vitae viverra. Nam vel sapien placerat, bibendum elit sit amet, sagittis turpis. Nunc a commodo felis. - -Integer vehicula elementum feugiat. Proin eget libero ante. Aliquam in odio lacus. Etiam pretium imperdiet odio sed posuere. Quisque at magna id nisi tempor rhoncus sed et metus. Duis porta, sapien sed malesuada finibus, nunc dolor sodales purus, in ullamcorper libero nisi in nisl. Maecenas vitae nisl velit. Suspendisse potenti. Integer egestas, mi eu dictum accumsan, nulla odio congue massa, nec placerat ligula lacus quis mi. - -Sed sem neque, convallis vitae faucibus ornare, malesuada a risus. Nulla convallis, dui nec tincidunt porttitor, lectus arcu suscipit elit, in tristique lacus urna ac velit. Fusce in arcu eget est condimentum volutpat ac nec tortor. Curabitur dapibus odio tortor, in congue ex elementum eget. Vivamus laoreet elit massa, id elementum orci sagittis at. Curabitur interdum, odio eget convallis aliquam, lorem diam luctus leo, vitae feugiat ligula nibh at nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum non mauris molestie, mattis mauris id, fermentum lorem. Morbi nibh purus, facilisis vel tristique in, gravida in ex. Vivamus tincidunt urna at ex efficitur, eu dapibus nulla convallis. Proin vel pulvinar nibh. Donec aliquet semper orci et gravida. - -Nunc ornare et urna quis sagittis. Cras non dictum metus. In ac laoreet sem. Cras ornare libero sem, ut aliquet ipsum ornare laoreet. Donec id euismod tortor. Etiam odio mi, hendrerit ac urna vitae, gravida maximus mauris. Cras sed euismod neque. - -Vestibulum porta tristique placerat. Phasellus nec felis vel leo gravida faucibus in at neque. Maecenas felis dolor, sagittis vel elit eget, scelerisque egestas urna. Integer consequat nulla a urna euismod, ac feugiat sapien rhoncus. Nunc sit amet elit at urna aliquam bibendum id sed neque. Vestibulum non dictum mauris, tincidunt finibus purus. Donec posuere enim vel bibendum gravida. Ut elementum tortor a diam pharetra aliquam. Fusce ut nisi ut libero rhoncus scelerisque. - -Integer libero lorem, molestie non elit a, convallis tristique dui. Fusce sodales convallis ullamcorper. Cras eleifend lobortis erat sit amet cursus. Nam vel ipsum eros. Integer sed aliquam risus. Quisque dictum vulputate eros et iaculis. Etiam ac ultricies nisl. Nunc et nibh ut neque egestas porttitor. Aenean in laoreet lectus. Praesent et egestas arcu. Sed ullamcorper, enim ut fermentum euismod, odio nisi tempor nisl, sed feugiat mi nulla a libero. Integer cursus sagittis est, ac dapibus est mollis eget. - -Donec blandit placerat ex. Aliquam erat volutpat. Duis et odio tempus leo porttitor porttitor eu ac dolor. Mauris imperdiet, sapien sed suscipit pellentesque, nulla odio placerat nibh, et scelerisque ex tortor posuere enim. Aliquam fringilla porta cursus. Nullam sollicitudin, ante quis bibendum imperdiet, nisi sapien lacinia velit, eu vehicula justo turpis in leo. Morbi sit amet vulputate sem. Fusce fringilla tellus mi, in pellentesque tellus sollicitudin sit amet. Nunc venenatis lorem ac odio convallis, nec cursus arcu bibendum. Vivamus imperdiet maximus pellentesque. - -Nulla facilisi. Donec arcu sem, auctor at nisi a, bibendum maximus nulla. Phasellus sed diam facilisis, faucibus ligula sed, ultricies sapien. Aenean varius ut ligula tempor vehicula. Suspendisse pulvinar ipsum tincidunt varius lacinia. Ut enim mi, pulvinar vitae ex non, euismod sodales est. Donec porta molestie ex at ornare. Nam vehicula interdum dictum. Sed viverra sapien sed vehicula laoreet. Nulla eget turpis vel sem interdum rutrum. Vestibulum a dolor id purus mattis blandit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Nulla in arcu interdum, blandit mi vitae, imperdiet tellus. Maecenas egestas fermentum enim vitae vestibulum. Nulla dictum lorem ut justo interdum, eget placerat dolor elementum. Vestibulum sit amet pulvinar elit. Maecenas id mauris quam. Integer iaculis felis convallis, blandit sapien nec, pretium urna. Integer quis pellentesque enim. In egestas sit amet massa vitae pharetra. Cras non ultricies arcu, quis pretium sem. Donec fermentum eleifend risus cursus pellentesque. Quisque sodales ultricies dolor rutrum lacinia. In hac habitasse platea dictumst. Sed lacinia purus in arcu congue, sed scelerisque turpis iaculis. Phasellus a venenatis erat, ut tristique nulla. Vivamus dapibus felis id ex laoreet, nec feugiat libero posuere. Aenean et massa id diam dignissim iaculis. - -Vivamus est ligula, interdum vitae sagittis ac, finibus a nunc. Aenean maximus mollis dapibus. Vestibulum blandit urna quis metus finibus, at malesuada augue pulvinar. Proin consectetur ut ante vel maximus. Sed ut ex accumsan, consequat nisi in, suscipit sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam volutpat id velit sed suscipit. Phasellus id viverra dui, vel suscipit ligula. - -Donec semper ac ipsum in consectetur. Sed id eleifend ante, at pulvinar tellus. Quisque at mauris ex. In sit amet velit vitae nunc posuere dictum quis in mi. Proin lectus risus, finibus sit amet consequat ac, fringilla ut mauris. Proin et mi nisl. Maecenas condimentum dapibus mi id dapibus. Cras ullamcorper pulvinar justo ut egestas. Nam feugiat dui ac odio mollis, quis congue est efficitur. Vivamus luctus tristique ipsum, quis egestas lacus mollis id. Proin id placerat sapien. Sed et sem sed ex iaculis volutpat. Mauris eu interdum magna. Mauris vehicula, enim eu placerat sagittis, metus mauris molestie neque, ut fermentum nibh nisi quis tortor. - -Sed sagittis sem erat, vitae tristique purus tempor at. Nullam id urna mollis, aliquet ex eget, varius sem. Donec scelerisque cursus nulla, vel imperdiet ipsum cursus et. Vestibulum condimentum lorem neque, at auctor orci placerat sit amet. Vivamus felis metus, sodales vitae sollicitudin non, condimentum a leo. Praesent fermentum nisi eget ex tempus luctus. Cras sodales turpis nec ultrices placerat. Sed efficitur erat eu felis tempor, eget suscipit ligula porttitor. Cras a porttitor ante, a vehicula enim. Ut malesuada tellus lectus, nec tincidunt leo dapibus non. Phasellus at purus commodo, hendrerit lectus eu, scelerisque massa. Vivamus ex ligula, placerat id augue sit amet, tempor pretium augue. Curabitur aliquam lorem a venenatis pretium. Etiam quis efficitur lacus. Donec nec felis nulla. - -Nunc malesuada ipsum ut scelerisque condimentum. Suspendisse sapien elit, ornare et egestas in, ultricies nec nibh. Ut egestas, nunc in molestie cursus, velit arcu tempus nisl, non interdum ligula augue cursus nulla. Fusce pretium in odio non eleifend. Donec eu condimentum tellus. Ut vel nisl dictum, sollicitudin urna a, lobortis dolor. Proin malesuada ante in molestie feugiat. Duis leo sapien, porttitor finibus porttitor non, egestas ut nisi. - -Duis vel volutpat sapien. Mauris mattis nec lorem et vulputate. Nunc vitae nulla laoreet, dapibus magna finibus, lacinia orci. Quisque vestibulum ipsum id tortor blandit, in molestie elit eleifend. Maecenas sed leo aliquet nunc tincidunt ullamcorper quis ut sem. Vestibulum lectus leo, molestie ut sem at, accumsan consequat dolor. Phasellus sem elit, mollis vel tempor ac, bibendum vel sapien. Maecenas sed pulvinar odio. - -Cras vitae justo sed quam congue consectetur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer dignissim, velit vel commodo cursus, libero mauris sollicitudin nulla, id molestie velit dolor et dui. Ut at turpis vitae magna viverra tristique quis a nisi. Nulla sapien quam, cursus ac mauris in, suscipit placerat purus. Cras eget purus volutpat, egestas justo sed, porttitor ante. Vestibulum efficitur mattis fringilla. Integer sit amet consectetur massa. Phasellus non nunc et nisl semper fringilla. Praesent aliquam enim non lectus sodales, vel pretium elit sodales. Suspendisse vel dapibus elit, lobortis placerat magna. Aliquam molestie mi vitae nisi condimentum volutpat. - -Nulla quis lorem turpis. Nullam placerat iaculis nulla, hendrerit tincidunt eros vestibulum vitae. Mauris nulla justo, ultricies non sapien et, volutpat finibus diam. Proin in fringilla risus, vitae faucibus lorem. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut non posuere eros, ut fermentum lorem. Pellentesque mauris quam, vulputate nec erat a, efficitur varius elit. Sed commodo ullamcorper sem, eu sodales ipsum porttitor sit amet. Vivamus sodales tristique augue. Nam risus diam, feugiat vitae molestie eget, fringilla quis ante. Aenean eu massa sed tortor pulvinar condimentum. Pellentesque gravida ornare iaculis. Maecenas nec metus sem. In malesuada enim quis quam mattis, sed convallis metus varius. Mauris fermentum neque eu ipsum lobortis malesuada. - -Sed purus enim, bibendum sit amet lacinia id, accumsan sed justo. Proin eget accumsan turpis, fermentum convallis lorem. Mauris scelerisque luctus elit, a sodales eros ullamcorper a. Suspendisse sed ornare dolor, non vehicula enim. Ut efficitur diam eu metus. - - - -Quisque interdum feugiat quam vel aliquam. Curabitur imperdiet ultricies mi accumsan aliquet. Nam in arcu accumsan, faucibus est ut, iaculis eros. Fusce fermentum, risus sit amet sollicitudin placerat, diam velit ullamcorper nibh, ac ullamcorper nunc turpis a nunc. Nam sodales diam eget felis semper vulputate. Morbi tempus est purus, id lobortis justo viverra eu. Aliquam semper metus nibh, id laoreet ante luctus sed. Sed eget tincidunt tortor, in vestibulum diam. Nulla ac venenatis tortor. - -Vivamus dui ex, sollicitudin eget dui et, ultricies imperdiet tellus. Praesent a diam ut est egestas condimentum sit amet ut eros. Fusce velit leo, tincidunt hendrerit ullamcorper nec, commodo in augue. Donec pellentesque sodales nisl elementum tempor. Proin hendrerit porttitor hendrerit. Sed purus lacus, placerat at purus in, bibendum semper eros. Nulla elit dui, convallis id mollis vitae, lobortis ac elit. Proin condimentum in purus ut faucibus. Mauris ac sodales augue. - -Nullam venenatis fringilla tempus. Duis aliquet enim erat, a bibendum dui semper at. Aenean porta ligula ac justo dictum elementum. Aliquam erat volutpat. Vivamus nulla mauris, ultricies ut pharetra id, pulvinar sed felis. Vestibulum elementum cursus ultricies. Ut feugiat dolor vel egestas condimentum. Integer in lobortis metus. Duis volutpat ligula bibendum, condimentum magna vitae, gravida augue. - -Mauris a sem elit. Etiam at dolor enim. Nullam maximus ornare lectus et lobortis. Quisque mattis metus diam. Suspendisse potenti. Integer ornare dolor quis lorem dapibus, quis suscipit orci cursus. Maecenas facilisis laoreet tortor ac iaculis. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut ultricies ante quis nulla gravida, vel facilisis sapien consequat. Nam ligula quam, gravida sed dolor quis, vehicula varius orci. Maecenas egestas fermentum luctus. Donec efficitur tellus nulla, eu gravida diam tristique in. - -Quisque non ullamcorper leo, at viverra lacus. Curabitur malesuada magna nec urna ultrices lacinia vel ultricies magna. Etiam facilisis mauris velit, vehicula pulvinar quam gravida at. Donec molestie arcu in ipsum aliquam interdum. Phasellus vel semper dui, ut maximus nisl. Integer at nunc sit amet justo pellentesque tincidunt. Etiam sed euismod nibh, sollicitudin efficitur odio. Curabitur pretium odio eget enim commodo, at consectetur metus pulvinar. Suspendisse posuere ipsum at feugiat porta. Curabitur luctus imperdiet diam nec dignissim. Nulla facilisi. - -Proin pharetra tincidunt dui vitae fermentum. Donec eget venenatis enim. Mauris sollicitudin ipsum at urna condimentum, quis malesuada eros tempor. Duis elementum viverra ipsum, vel sollicitudin urna rhoncus id. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse potenti. Morbi facilisis sapien mattis lorem mattis sollicitudin. Integer non libero cursus quam cursus tristique. Nulla consequat est magna, in elementum nisl maximus euismod. Morbi a lacus et quam feugiat imperdiet. In finibus erat id posuere dictum. Donec sit amet mollis diam. Pellentesque pharetra tellus eget interdum dapibus. - -Vestibulum luctus at massa eget porttitor. Aenean blandit massa eget sapien convallis congue. Phasellus aliquam blandit risus, nec sollicitudin quam sollicitudin quis. Phasellus at odio et tortor molestie vulputate eu vitae leo. Curabitur ut turpis sem. Fusce et nisi vel risus accumsan tristique quis nec erat. Suspendisse potenti. Nullam vehicula molestie dolor eu finibus. Mauris ut dignissim arcu. Pellentesque ac hendrerit augue, eget scelerisque lacus. - -Nunc non est metus. Etiam ac mauris nec libero molestie egestas. Nunc aliquet nisl id felis ultrices pretium. Integer sapien neque, maximus vulputate arcu sit amet, congue tempor leo. Sed vel leo dolor. Vestibulum et dui venenatis, dignissim nisi eget, vehicula erat. Curabitur vitae justo et ligula semper fringilla vitae sit amet neque. - -Cras faucibus leo est, vel faucibus nisl pretium non. Integer mattis mi eu nisi ultricies maximus. Quisque semper consequat urna eu tempus. In at viverra nisi. Phasellus et arcu id nisi vehicula mattis sagittis eget orci. Praesent fringilla diam eget auctor elementum. In at est sem. Integer in mi arcu. Cras interdum elementum leo, ac tempor est vestibulum a. Integer et elit ipsum. Quisque nec nulla sit amet nisl mollis auctor viverra sed lacus. - -Phasellus et hendrerit mauris, tincidunt consectetur ligula. Curabitur volutpat gravida commodo. Ut ultricies varius magna, quis ullamcorper lorem pharetra quis. Suspendisse tempor nisi vel nunc gravida semper. Nunc molestie ac augue vel bibendum. Etiam ullamcorper vehicula rhoncus. Sed tempus ac mauris sit amet viverra. Etiam consequat egestas quam. Nulla maximus arcu in faucibus venenatis. Curabitur auctor eu mi faucibus fermentum. Duis varius magna est, eu rhoncus libero varius non. Donec aliquet pretium sapien vel egestas. Etiam vel velit lorem. - -Etiam nisl mi, semper nec convallis sit amet, cursus sed lacus. Duis dictum velit eget nisi consectetur, ut gravida dolor sollicitudin. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ac neque diam. Aliquam euismod vitae nisl vel interdum. Vivamus sollicitudin ac metus in accumsan. Nunc dui massa, mattis vitae fringilla mollis, ultrices quis elit. Mauris blandit elementum nulla, sit amet dignissim risus euismod et. Fusce placerat ex ac odio pharetra, vitae porta lectus tristique. Suspendisse ultricies, est malesuada semper varius, ex erat tempor libero, non semper nisi justo quis nibh. - -Duis id egestas orci. Duis vitae tempor purus. Donec tristique justo id consectetur fermentum. Donec tempus lectus id elit accumsan eleifend. Pellentesque pretium, nibh vitae porta volutpat, tortor ex aliquam purus, vel tincidunt nisi augue a velit. Ut non purus blandit, consectetur lectus a, molestie nulla. Ut convallis lacinia mauris et hendrerit. Donec maximus, tellus sit amet porta consectetur, odio turpis feugiat risus, eu mollis felis massa vel erat. Nulla fringilla sem sit amet magna cursus iaculis. Pellentesque ac lorem nec tellus mollis congue. Fusce ornare gravida magna nec fringilla. In ut rutrum arcu. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Praesent pretium placerat elit nec ultrices. - -Mauris vitae erat id diam ornare eleifend non nec nisi. Maecenas eget dolor id libero dignissim euismod at nec justo. Nulla in commodo tortor. Nullam eleifend sem ac purus imperdiet, ut aliquet nibh vulputate. Suspendisse sed consectetur nunc, sed pulvinar sem. Mauris eget leo lectus. Phasellus a ante varius, dignissim odio vitae, elementum nisl. Aenean ac urna vel sem ullamcorper tincidunt scelerisque non enim. Fusce nec est eu eros convallis semper. Etiam nec nisl nunc. - -Mauris fermentum erat et sapien imperdiet egestas. Mauris ac eros ut nisi volutpat viverra et quis nibh. Quisque nibh dui, pellentesque malesuada lectus vitae, laoreet tempus nulla. Pellentesque eget libero egestas, bibendum lectus sed, sollicitudin purus. Quisque quis dictum orci. Quisque rutrum accumsan fermentum. Quisque viverra, urna sed cursus euismod, lectus mauris bibendum eros, et mattis massa neque nec eros. Donec maximus vulputate justo, et faucibus mi mattis ut. Donec at iaculis sapien. - -Proin sit amet mi mattis, vestibulum elit eu, scelerisque ante. Integer malesuada aliquet convallis. Maecenas pretium vitae ipsum sit amet iaculis. Quisque tincidunt nisi nisi, eu viverra massa feugiat in. Integer porttitor euismod libero at placerat. Maecenas pellentesque turpis placerat ante condimentum, ac congue lorem rutrum. Nulla ligula turpis, mollis vitae dignissim quis, faucibus et ligula. - -Donec a pulvinar justo. Praesent sed aliquet velit. Donec placerat blandit mi. Vivamus vulputate tempor accumsan. Vestibulum sit amet facilisis lacus, vitae consequat nisi. Nam aliquet nulla quis pulvinar tristique. Suspendisse rhoncus suscipit ipsum, sed sodales sem mattis interdum. Aenean interdum tristique tellus, tempor vestibulum nisl cursus ac. Nulla neque turpis, convallis at dapibus non, fermentum quis quam. Aenean eget ligula volutpat, aliquam leo sit amet, sagittis ligula. Suspendisse efficitur vel massa vitae dignissim. - -Mauris semper iaculis vulputate. Donec efficitur non ante quis pretium. Curabitur in dictum urna. Nullam imperdiet nisi eu leo lacinia egestas. Cras blandit mi nisi, sit amet condimentum justo tempor at. Cras ac arcu eu velit sodales tincidunt. Nunc tincidunt, felis vel fringilla sollicitudin, massa dui consequat lectus, sed dictum est dui at lacus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur condimentum tortor ac sagittis luctus. Suspendisse sed tincidunt lectus. Duis aliquet, libero imperdiet finibus tempus, lorem mauris ullamcorper nunc, at bibendum augue odio vitae tellus. Suspendisse ultrices, eros vel gravida molestie, turpis nisi rhoncus erat, a interdum est sapien et odio. - -Duis viverra dictum lectus vitae gravida. In hac habitasse platea dictumst. Sed vel lacinia diam. Aenean maximus elit vel ante sagittis, eu vehicula eros pharetra. Etiam pharetra diam at orci lacinia, nec posuere quam laoreet. Donec maximus quis felis vel aliquet. Morbi pulvinar dui a ipsum egestas, eget pharetra est fringilla. Vestibulum eget accumsan libero. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. In sollicitudin condimentum quam, quis placerat nunc imperdiet at. Vivamus ultrices, velit at maximus viverra, magna tortor imperdiet justo, sit amet fringilla lectus dolor facilisis urna. Sed placerat tristique lorem, ac elementum urna iaculis nec. Sed dapibus nisl eget scelerisque consequat. - -Etiam et dapibus nisi. Aliquam non finibus dui, lacinia condimentum enim. Sed ornare et lectus sed fermentum. Aliquam sed imperdiet arcu. Nullam pellentesque, dolor quis consectetur maximus, elit odio sagittis nibh, ut cursus augue nulla a orci. Etiam dictum mollis vehicula. Phasellus sagittis, risus quis semper dictum, nunc risus ultrices purus, et condimentum neque lorem nec libero. Donec posuere, libero eget ullamcorper pharetra, purus metus hendrerit nisl, ut viverra ante libero ut enim. Nunc vitae quam pellentesque, dictum arcu et, lacinia diam. Nunc in tempus sapien, nec dignissim justo. Curabitur elit tellus, placerat non congue id, pellentesque ut tellus. Nulla nibh eros, hendrerit nec venenatis in, consequat et odio. - -Sed quis pellentesque velit. Suspendisse cursus volutpat malesuada. Sed nec diam ac ipsum finibus sodales. Fusce tincidunt tempus urna, vestibulum tincidunt arcu imperdiet in. Donec arcu turpis, vestibulum aliquam volutpat ut, vulputate non lectus. Ut tristique faucibus blandit. Aliquam erat volutpat. Nulla facilisi. Sed in mattis lectus. Suspendisse potenti. Quisque dapibus fringilla orci, quis ultricies est volutpat non. - -In sit amet est condimentum, sollicitudin mauris non, egestas leo. Nulla facilisi. Phasellus venenatis, erat at lobortis dignissim, ligula enim ultricies felis, pulvinar egestas urna ante in tellus. Nam at lectus ante. Sed dictum vestibulum neque quis commodo. Aliquam laoreet metus ut mi placerat placerat. Sed feugiat nibh quis nulla fringilla bibendum sit amet nec purus. Vivamus ut leo quis sapien tempus lobortis eget ac odio. Suspendisse at ex id dolor fringilla mollis. Integer ex urna, congue ac turpis condimentum, hendrerit euismod tellus. In interdum aliquam tellus, a suscipit orci consectetur eu. Phasellus at odio at lectus sollicitudin luctus id nec diam. Nunc lacinia risus non aliquam malesuada. Proin rutrum consectetur lectus eget placerat. Mauris scelerisque nec nisl ac molestie. Sed sollicitudin scelerisque est, a hendrerit risus egestas in. - -Maecenas a quam condimentum, varius velit ac, pharetra neque. Morbi sagittis molestie nisl, eu luctus felis blandit sit amet. Maecenas accumsan nunc non justo ultricies blandit. Nulla non metus sollicitudin, pharetra dolor posuere, scelerisque tortor. Pellentesque euismod fringilla purus. Proin sed vehicula nulla. Vivamus scelerisque metus nunc, sed hendrerit dolor aliquet vel. Proin nec ante pulvinar elit pharetra cursus. In tempus lorem eros, ac auctor dolor tempor fringilla. Curabitur egestas imperdiet consectetur. Aliquam nibh tortor, dapibus eu orci a, ultrices condimentum urna. Etiam accumsan magna vel facilisis gravida. Mauris efficitur nisl dapibus orci luctus, sed bibendum mauris dictum. Quisque finibus lectus vel aliquet bibendum. - -Phasellus id augue nec magna viverra rhoncus nec at nibh. Mauris eu eros erat. Praesent finibus arcu non pretium cursus. In consectetur mi nec augue pretium, ac vulputate nisl luctus. Mauris sed gravida tortor, sit amet rutrum dolor. Aenean placerat dictum magna, vel condimentum est tincidunt at. Vivamus aliquet, dui ut pulvinar mattis, risus mauris malesuada ligula, et mattis neque ex eget lorem. Phasellus ut hendrerit tortor. Duis suscipit, eros a aliquam varius, arcu risus lobortis massa, et semper ipsum arcu sed sapien. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vestibulum ipsum vitae enim malesuada, in aliquet justo ultricies. Ut volutpat gravida mi, elementum vehicula elit tristique eu. Curabitur ac nibh et ipsum placerat vestibulum vitae ac felis. Praesent turpis lorem, porta a mi quis, viverra cursus leo. - -Mauris tincidunt turpis eu lacus tincidunt rutrum. Quisque consectetur lectus at neque porttitor, non mollis urna ultrices. Duis eget semper est. Aliquam non elit vitae nibh condimentum tempor nec vel lacus. Etiam tempor lobortis ligula, ut pulvinar mauris tristique tempor. Sed bibendum vestibulum nisi sed tincidunt. Vestibulum vehicula tincidunt risus nec scelerisque. Integer convallis mi ac risus hendrerit porttitor. - -Proin in est viverra, sollicitudin nunc nec, dictum augue. Sed ultricies condimentum purus, ut ultrices ex eleifend sed. Aliquam porttitor sem nec quam accumsan commodo. Curabitur sed pellentesque urna. Duis eu ligula ac orci malesuada rutrum eget sit amet lacus. Nullam ut eros ex. Sed aliquet leo nec urna gravida volutpat. Integer imperdiet molestie ligula, ac convallis dolor. Suspendisse elementum ligula id risus dignissim, quis laoreet ante faucibus. Aenean porttitor sagittis commodo. Fusce justo purus, condimentum ut mollis vel, sollicitudin eget sapien. - -Sed interdum elit vel tortor convallis feugiat. Ut posuere ex nec venenatis interdum. Integer consectetur orci rhoncus tellus faucibus ullamcorper. Duis lacinia efficitur semper. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur ultrices leo eget quam imperdiet, non tempor lacus condimentum. Cras vel dignissim diam. Mauris non maximus massa. Etiam a velit vel lacus ullamcorper faucibus. Curabitur quis facilisis nisi. In vehicula ut nulla vel consectetur. Duis iaculis eu tellus dictum mollis. Suspendisse eget rutrum odio. Vestibulum nec consectetur est, at vehicula velit. In a libero vitae lacus viverra sodales. - -Nulla interdum cursus leo, quis egestas elit auctor eget. Nullam mauris lacus, consectetur vitae augue non, commodo luctus justo. Cras porttitor aliquam eros in mattis. Morbi maximus libero neque, quis viverra magna fringilla quis. Ut aliquam ante vitae vehicula luctus. Sed congue a nulla et maximus. Vivamus porttitor felis sed augue gravida fermentum. Donec in lacus rutrum, finibus lacus ac, placerat quam. Proin placerat nunc vitae posuere iaculis. Etiam suscipit mi est, id congue diam commodo sit amet. Ut consectetur consectetur lobortis. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Aliquam erat volutpat. Curabitur convallis turpis sed massa cursus aliquet. Nullam id nibh ac ex accumsan tincidunt vitae nec nunc. Sed accumsan risus vitae ultrices semper. Sed ut sem eget arcu egestas sodales. Suspendisse facilisis risus in nulla condimentum suscipit. Nulla sed congue tortor. Etiam porttitor tellus lorem, non convallis arcu dapibus at. Nam vitae tristique dolor. Donec eu sem aliquam, tristique nulla ut, congue ante. Pellentesque vitae egestas turpis. Nam quis mauris consectetur purus elementum scelerisque. Vestibulum condimentum aliquet aliquam. - -Aliquam erat volutpat. Etiam et feugiat nisi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec quis est sodales, egestas odio fermentum, eleifend urna. Nulla sed volutpat nibh. Aenean ac placerat massa, elementum elementum lectus. Proin euismod, urna ut semper tristique, sapien ipsum aliquet risus, ut molestie odio sapien sed enim. Vivamus vestibulum purus risus, vel lobortis sem luctus vitae. Aliquam ultricies eu nulla id faucibus. Nunc eu odio ultricies, rhoncus lorem eget, pharetra sapien. Phasellus vitae neque ac sem ornare pharetra ut vitae purus. Sed malesuada tristique quam nec viverra. Sed condimentum, arcu id venenatis feugiat, massa tortor dapibus nisi, a facilisis lorem ligula semper mi. - -Donec lacinia felis laoreet sem dapibus mollis at a orci. Etiam viverra dolor nec magna tempus lacinia nec vel metus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Quisque eget quam massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas luctus, nunc sit amet egestas ultrices, nibh felis imperdiet est, id dignissim ante nibh non tellus. Ut eget lectus ipsum. - -Nullam porta diam ut arcu egestas congue. Nullam viverra nisi sed diam convallis eleifend. Nullam porta sed augue ullamcorper aliquet. Curabitur tempor sapien felis, at dictum dolor cursus nec. Nullam lorem risus, finibus non sollicitudin a, hendrerit vel diam. Praesent nibh nulla, semper id erat vitae, faucibus mattis nisi. Nulla ut libero id justo luctus convallis nec in tellus. - -In ultrices vel augue a pharetra. Donec accumsan malesuada massa vitae faucibus. Aenean consectetur nisi nulla. Praesent libero nisl, luctus eget vestibulum ac, ultricies sed ex. Sed lobortis ut elit a semper. Quisque dapibus bibendum gravida. Aenean porta vulputate nibh fringilla sollicitudin. Cras vel mi justo. Sed quis orci bibendum, hendrerit purus et, sollicitudin diam. - -Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nunc ornare laoreet sem, non gravida sem pharetra sit amet. Morbi vel ullamcorper dui. Ut aliquam, enim sit amet molestie dignissim, quam orci gravida mi, sed mollis turpis mauris ut est. Nunc tincidunt enim a quam iaculis, sed dapibus diam dapibus. Donec malesuada commodo elit, eu blandit libero volutpat vitae. Fusce libero magna, tristique ut lacus eu, bibendum venenatis augue. Proin ornare augue et pulvinar lacinia. - -Nullam eget orci cursus, ullamcorper urna a, rhoncus orci. Morbi sed ipsum quis dui porttitor convallis. Ut ornare varius odio vitae varius. Sed sollicitudin sed risus nec varius. Aliquam placerat ac risus eu pulvinar. Vestibulum diam dolor, egestas nec purus et, molestie convallis sapien. Maecenas scelerisque mauris eu enim ultricies, id aliquam leo congue. Vestibulum imperdiet neque sed consequat condimentum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris eget porttitor turpis. Mauris vitae est eget justo porttitor imperdiet a et nibh. Cras elementum, lectus et vulputate eleifend, diam leo efficitur ipsum, eget finibus quam sapien at tellus. - -Vivamus dui metus, ornare at eros varius, facilisis malesuada mauris. Mauris laoreet felis at vestibulum pellentesque. Pellentesque fringilla elit orci. Pellentesque leo enim, sodales a consectetur eu, congue a eros. Aliquam eu dolor dui. Mauris turpis metus, volutpat id convallis sit amet, volutpat sit amet tortor. Donec eu tellus est. Suspendisse non leo urna. Etiam suscipit elementum mauris, ut pulvinar enim suscipit et. Sed ultrices pharetra tortor. Donec commodo enim sed massa dignissim, quis vestibulum lectus interdum. - -Duis vestibulum gravida dolor varius iaculis. Quisque id facilisis diam. Aliquam erat volutpat. Phasellus tincidunt pellentesque mi vitae facilisis. Nunc venenatis, arcu et commodo suscipit, purus mi rutrum odio, id aliquet lectus ex vitae dolor. Nulla ut commodo lectus. Phasellus interdum iaculis velit. Vestibulum eget malesuada tortor. Nam a tellus efficitur, iaculis augue nec, tincidunt felis. Maecenas molestie diam ut turpis iaculis facilisis. Aenean mattis magna eu est sollicitudin, quis faucibus ex tincidunt. Pellentesque maximus commodo metus vel malesuada. Aenean nec sapien dignissim, mollis augue vitae, gravida ex. - -Curabitur sit amet enim scelerisque, accumsan ex ut, facilisis leo. Nulla varius tortor neque, vitae imperdiet massa porttitor in. Cras quis magna justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse tincidunt mi justo, a fringilla quam posuere sed. Quisque convallis lacus at euismod interdum. Vivamus cursus feugiat elit sit amet porttitor. Etiam eros magna, varius nec ex et, aliquam vulputate velit. Donec ac ligula non tellus eleifend convallis. Morbi posuere neque augue, et ullamcorper nisl rutrum eget. Aliquam augue nulla, malesuada nec cursus in, ornare at lacus. Pellentesque varius facilisis nunc sit amet venenatis. - -Nam ut tellus ullamcorper, finibus magna nec, semper elit. Fusce pulvinar nec purus blandit auctor. Ut egestas, est eget imperdiet aliquam, lectus purus ullamcorper neque, eget venenatis ligula magna ut leo. Ut fringilla ullamcorper risus sed tincidunt. Sed pulvinar vehicula tortor vel tincidunt. Nulla at vehicula ligula, sed rhoncus purus. Sed elementum, quam sit amet convallis finibus, nisi nunc venenatis mauris, sed luctus leo orci quis lacus. Maecenas venenatis est nec diam consectetur dignissim. Cras lacinia vehicula laoreet. Cras eu ex in nunc scelerisque imperdiet. - -Praesent eget nibh imperdiet, pulvinar dui eget, aliquet ipsum. Suspendisse eu hendrerit sem. In ac augue non enim porttitor pulvinar sit amet in mauris. Aenean vel justo quis metus facilisis feugiat nec eu nibh. In placerat, est sit amet blandit aliquet, erat nunc semper justo, eget pellentesque lorem mi quis neque. Pellentesque leo ex, semper sit amet accumsan nec, elementum id arcu. Vivamus faucibus ipsum non mollis imperdiet. Vestibulum sit amet sapien ac sem rutrum auctor a nec nunc. Pellentesque elementum sollicitudin tellus, vel malesuada lacus pretium eget. Nunc id nibh ac augue eleifend dictum. Etiam at tempus justo. - -Nunc bibendum risus sit amet ultrices congue. Nulla facilisi. Nulla id pulvinar erat. Curabitur libero odio, finibus et nisl eget, auctor gravida neque. Praesent nec interdum ex. Morbi gravida ante vel nisl cursus maximus. Vivamus vestibulum et quam ut facilisis. Vivamus vel erat lectus. Pellentesque finibus nisi eu sollicitudin pharetra. Pellentesque volutpat consectetur libero eget porta. Vestibulum fermentum ipsum sed dui tincidunt commodo. Mauris quis sodales elit. Nunc sodales felis hendrerit velit dignissim, nec finibus arcu sollicitudin. Phasellus a venenatis neque. Maecenas aliquam est quam, vitae viverra orci blandit ac. - -Donec interdum aliquet nunc, nec pretium turpis feugiat vel. Cras non justo cursus, ornare ligula tempor, auctor sem. Sed sed est sed nisl egestas consequat vitae vitae leo. Quisque leo elit, ultricies et eleifend porttitor, venenatis pellentesque leo. Integer elit urna, rhoncus a facilisis id, fermentum congue purus. Ut tempus pretium neque vitae mattis. Fusce id congue ipsum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Praesent imperdiet purus a nisl condimentum, sit amet rutrum enim maximus. - -Quisque leo quam, consectetur ac turpis vitae, pellentesque blandit mi. Duis quis suscipit tortor. Donec quis leo quis sapien ultrices gravida a eu mauris. Sed posuere nibh ut laoreet tincidunt. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam turpis orci, tempor ac dignissim eget, maximus in purus. Praesent diam nulla, finibus eu feugiat sit amet, posuere at nulla. Ut vitae diam eu nibh ornare mattis at id ex. Proin faucibus efficitur mauris eu volutpat. In vel ullamcorper sapien, at tristique neque. - -Etiam accumsan est vel facilisis suscipit. Nulla congue orci in sem venenatis congue. Maecenas pharetra non nunc at euismod. Duis fermentum et sem non euismod. Nam tincidunt nisi a elit cursus varius. Maecenas vulputate eleifend consectetur. Aliquam erat volutpat. Donec consectetur sapien nec tellus facilisis consequat. Proin quis auctor felis. Donec et venenatis ligula, a convallis ante. Nulla tempor, mauris quis iaculis feugiat, lacus risus vulputate augue, ut facilisis nibh dui eget orci. Mauris leo dolor, rhoncus sed nisi id, molestie vehicula erat. Aliquam porta lacus id nibh mollis porta. Curabitur vel congue quam. Quisque ut ipsum blandit, imperdiet nisl sit amet, ullamcorper nulla. - -Sed purus enim, dictum ut eros eget, condimentum pharetra lorem. Suspendisse auctor nisi mi, at facilisis ligula luctus at. Nullam vulputate iaculis leo a fermentum. Aenean lobortis est vel elit convallis, id mollis lectus facilisis. Aliquam eu accumsan ante. Nunc aliquam vehicula diam, at ultrices diam vehicula at. Morbi mattis dapibus vehicula. Nulla nunc mi, gravida ac lacus ac, porta viverra mauris. Suspendisse potenti. - -Pellentesque scelerisque porta tellus quis commodo. Proin quam massa, cursus nec tellus eu, elementum dapibus lorem. Sed et tincidunt nisi, sed finibus turpis. Vestibulum dictum velit ultrices tempus placerat. Duis varius tempor scelerisque. Sed laoreet cursus magna, ac vulputate turpis imperdiet ultricies. Fusce lacinia posuere diam, ac vulputate justo ornare nec. In rutrum vestibulum purus. Sed ut enim convallis, ornare eros et, tempor massa. Aenean mattis nisl lectus, pharetra porttitor odio bibendum id. Etiam nibh quam, malesuada sed luctus eget, hendrerit ac ante. Aliquam vestibulum lectus at nunc convallis pretium. Praesent interdum turpis tortor, ac auctor turpis tristique id. Integer ac cursus elit. Quisque viverra massa neque, vel ullamcorper quam egestas id. - -Curabitur convallis ligula ipsum, non consequat turpis scelerisque vestibulum. Vestibulum blandit porta ante vitae vestibulum. Morbi sodales quis risus vitae porta. Nunc scelerisque congue dolor, a fermentum risus blandit a. Phasellus at nunc sed nibh feugiat pharetra vitae id leo. Vivamus volutpat leo nec ligula faucibus, at lacinia elit porttitor. Proin varius ligula et nibh aliquet, non malesuada nisl ornare. - -Aenean tempus bibendum aliquet. Morbi consequat nibh ex, at bibendum mauris pulvinar nec. Curabitur nec nibh sit amet elit fermentum volutpat quis non nisi. Praesent gravida, leo nec pulvinar condimentum, elit justo dignissim orci, sit amet iaculis lacus nisi ut sem. Fusce accumsan urna a arcu facilisis hendrerit. Proin ligula nulla, tempor vitae pretium non, finibus ut mi. Ut vestibulum est a lorem facilisis faucibus. Vestibulum et leo in velit consequat tempor. Integer ac purus et leo lobortis aliquam et vitae nulla. Quisque varius et nunc sit amet elementum. Vivamus nec lacinia odio, a maximus risus. Proin in justo eget odio porttitor tincidunt feugiat vel arcu. Sed fermentum augue ut mauris auctor, quis vestibulum lectus fringilla. Integer a mi maximus leo aliquet iaculis. - -Nam vel erat hendrerit dolor congue hendrerit malesuada vel sem. Morbi eget risus feugiat nisl tincidunt maximus eu sit amet leo. Maecenas quis cursus turpis, et scelerisque leo. Sed dui erat, imperdiet sed massa in, dictum tristique ligula. Quisque mauris diam, accumsan ac feugiat a, ornare at erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Duis at neque vitae nibh mollis egestas. Mauris sollicitudin lacus in neque facilisis, at varius mi eleifend. Vestibulum vulputate ipsum laoreet tortor pharetra, nec convallis turpis congue. Mauris in egestas mauris, condimentum aliquet tellus. Phasellus porttitor diam ut eros vehicula, dapibus maximus ipsum mollis. Nam congue neque lorem, eget ultricies nunc pretium a. - -Nullam tempus aliquam metus. Aliquam sit amet laoreet tellus. Aliquam mattis placerat maximus. Suspendisse varius dictum urna. Duis feugiat, est vitae molestie fringilla, enim leo porta ex, at dignissim libero nulla et nisl. Sed fringilla ipsum ac ipsum mollis, quis vulputate turpis ullamcorper. Quisque vel ante venenatis, placerat quam sit amet, placerat mi. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Sed suscipit in sapien in tincidunt. Aliquam erat volutpat. Duis vestibulum facilisis velit. Donec eget ante et lacus dictum aliquet. Nam et velit tellus. Maecenas rhoncus felis eget aliquet tristique. Pellentesque vehicula gravida lectus. Donec eget rhoncus metus. Etiam hendrerit arcu vitae nulla semper lacinia. Nunc ultricies magna a nisl lobortis consectetur. Nam nisi odio, molestie a gravida sed, consectetur at neque. Vivamus id facilisis est. Quisque viverra consectetur pellentesque. - -Quisque condimentum volutpat leo. In in dui enim. Nam varius orci non libero sodales, sed euismod mi condimentum. Nullam eu risus in enim gravida pulvinar. Duis laoreet odio metus, quis varius sapien blandit ut. Ut vitae bibendum ipsum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Sed sagittis quam felis, ac pulvinar nulla consequat a. Integer quis est at dui auctor tincidunt ac vitae quam. - -Nulla libero massa, ultrices sit amet nibh id, tempus dapibus dolor. Integer sed magna et tellus congue pulvinar id in sapien. Curabitur eu maximus diam, in convallis libero. Phasellus quis rhoncus ligula, sed varius enim. Vestibulum sollicitudin, risus eget euismod sodales, est sapien aliquam lorem, hendrerit lacinia massa eros sed tellus. Donec odio erat, laoreet eleifend tempus et, lacinia at metus. Integer pharetra sem ultricies neque condimentum elementum. Proin nibh leo, pulvinar non nisl et, faucibus condimentum orci. Suspendisse convallis ut enim in aliquam. Vivamus aliquet lorem eu libero porttitor, at placerat nisi pharetra. Nam et magna ut diam ultricies consequat ut vitae odio. Proin porta nunc at egestas ultrices. Nam in erat quam. Curabitur congue aliquam velit id suscipit. Maecenas id pharetra orci. - -Morbi a nisi id risus suscipit viverra quis egestas mauris. Nam erat enim, sagittis a quam nec, commodo condimentum lorem. Donec nulla ipsum, consectetur ut aliquet elementum, pulvinar molestie lectus. Pellentesque nisl enim, commodo non arcu eu, elementum ultrices nisl. Vivamus placerat cursus purus vitae facilisis. Donec aliquam id ligula at lobortis. Aenean eu consectetur leo. Praesent sed felis at orci venenatis condimentum in quis lacus. Sed arcu erat, dictum ut ante sagittis, iaculis sollicitudin nulla. Fusce ut tincidunt nisl. Etiam convallis tortor eget pellentesque iaculis. Etiam elementum ante a ultrices porta. Quisque eleifend ipsum eget sapien efficitur, a tincidunt ex cursus. Praesent aliquam sem vitae odio suscipit molestie. Suspendisse volutpat ut libero et vulputate. - -Donec tincidunt velit urna, vehicula tincidunt tortor pellentesque vel. Donec vel lectus suscipit ipsum porta tristique in eu ante. Praesent vel accumsan tellus, nec vestibulum odio. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi vel magna eget lorem vehicula ullamcorper eu ut diam. Morbi lacus eros, molestie a dignissim dapibus, pulvinar accumsan justo. Pellentesque vitae metus nec risus viverra faucibus. Proin diam urna, vehicula id volutpat in, condimentum sed augue. Pellentesque vehicula mi vel ipsum venenatis feugiat. Integer augue diam, sollicitudin et justo sed, sodales pellentesque turpis. - -Integer eget tincidunt ante. Donec imperdiet laoreet dolor, et condimentum quam faucibus non. Nam a dignissim augue. Donec vel aliquet lectus. Praesent a ipsum eu odio consectetur mattis nec at neque. In quis auctor ex. Ut fringilla sodales rhoncus. Nunc euismod velit at nibh dapibus, id malesuada ligula tristique. - -Aenean augue nibh, finibus eu consequat nec, euismod at lectus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aenean vitae enim ac orci finibus interdum. Nullam in eleifend ligula. Morbi aliquet orci tellus, quis ullamcorper ante dapibus ut. Ut condimentum aliquam lacus, in semper velit lacinia a. Integer et diam vitae magna fringilla egestas. Sed nec hendrerit lectus, vel posuere nibh. - -Duis tincidunt ipsum eu quam elementum, vel tempor justo tristique. Morbi in ipsum non quam blandit cursus non vitae ex. Sed rhoncus augue sit amet fringilla dignissim. Sed a lorem eu neque viverra finibus. Praesent vel maximus quam. Sed posuere, diam at convallis pulvinar, tortor turpis rhoncus sapien, eget lobortis urna nunc eget neque. Vestibulum ultrices vulputate risus, sit amet faucibus massa finibus non. Donec interdum posuere eros, a egestas diam tristique at. Donec eget est quis eros ultrices venenatis vitae ac quam. Cras vitae ipsum euismod, dignissim risus sit amet, dapibus velit. Donec ullamcorper eros est, ut mattis nisi bibendum at. Duis pellentesque augue quis urna pulvinar auctor. Phasellus ullamcorper magna vitae arcu luctus, ac feugiat justo accumsan. Nunc eu odio a velit varius blandit. Sed ultrices elit quis ligula laoreet viverra. Cras rutrum non neque quis sollicitudin. - -Aliquam nec nibh dignissim, consectetur dolor in, venenatis magna. Morbi sit amet posuere libero, quis malesuada sapien. Pellentesque eu magna at dui ultricies scelerisque. Duis non tortor sapien. Vestibulum pellentesque aliquam nulla, ut mattis libero commodo id. Phasellus sit amet velit eleifend, pretium est ac, placerat tellus. Curabitur non lacus tellus. - -Curabitur a arcu in orci tristique aliquet. Curabitur sed augue sem. Nam velit quam, ornare non consectetur in, vehicula dapibus arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Ut semper est neque, et blandit est pellentesque et. Quisque nec diam laoreet nisi vestibulum tempus. Proin non libero eget dolor rutrum placerat. Aenean ut purus sed nisi gravida consequat vitae ac metus. Nulla accumsan, nunc ac convallis tristique, metus libero rutrum metus, nec sagittis erat metus non ex. In dignissim sodales scelerisque. Aenean bibendum elementum ante, nec rhoncus turpis tempus quis. - -Nullam eu libero massa. Nulla nec auctor nunc. Fusce fermentum, nibh eget pretium fringilla, nisi ligula pharetra risus, pellentesque auctor leo nisl at neque. Sed sodales dictum mattis. Fusce id congue sapien, sit amet facilisis nibh. Donec ornare mi eget diam aliquet gravida. Nam volutpat massa tortor, non imperdiet lacus rhoncus ut. Pellentesque quis ultricies metus, eu dictum tellus. Ut suscipit, lorem vel venenatis consequat, enim erat imperdiet sapien, hendrerit faucibus ipsum nibh sed nibh. Maecenas elementum felis nec tortor interdum, nec ullamcorper massa varius. Nulla non leo velit. - -Aenean vel scelerisque nunc, ut convallis ex. Maecenas imperdiet tellus non aliquet laoreet. Aliquam malesuada ullamcorper felis non hendrerit. In tincidunt consequat fermentum. Suspendisse facilisis luctus eros, in feugiat nisl dictum a. Integer massa nisi, tincidunt laoreet aliquet ac, tempor eu elit. Proin ac quam vel nunc hendrerit auctor. Curabitur maximus orci sit amet ex tempus vehicula. - -Sed consequat arcu mi, a gravida est condimentum eget. Donec pretium lorem vel euismod cursus. Donec dignissim orci ac suscipit gravida. Maecenas dapibus, purus id placerat convallis, libero purus imperdiet dui, at consequat ex urna eget justo. Nam sapien lectus, sagittis ac feugiat in, porttitor ac mi. Etiam bibendum congue vehicula. In euismod sed ipsum at blandit. Duis suscipit massa sed nibh mollis, et tincidunt metus feugiat. Sed eget quam in magna porta ornare. Nam consectetur feugiat leo, id sollicitudin elit commodo vel. Pellentesque hendrerit nunc nulla, sed ultricies ante lacinia in. - -Integer vel libero quis magna tempor iaculis. Praesent mattis erat nibh, ut ultricies tortor hendrerit a. Donec non dictum sem, id gravida enim. Vestibulum ultrices, nisl eu euismod lobortis, dolor mi molestie erat, eu consequat eros ligula quis mauris. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla cursus, augue sollicitudin dapibus convallis, erat arcu dapibus lorem, vel ornare eros quam vitae nunc. Aenean ut dapibus nunc, vel sagittis ex. Curabitur ut pulvinar tellus. Cras sit amet est at libero vestibulum semper et sed velit. Suspendisse porta ipsum ex, sit amet porttitor sapien elementum eu. Quisque euismod arcu non molestie iaculis. Maecenas et ullamcorper magna. Vivamus laoreet rhoncus fringilla. Nam ullamcorper nibh eu odio sagittis, vitae semper ex aliquet. Aenean in nisi vel nisi dapibus pellentesque a at turpis. Vestibulum non volutpat nulla. - -Morbi consectetur nisl et lacus tincidunt eleifend. Donec sed hendrerit libero. Proin vel convallis metus. Nam non tortor sapien. Duis porta mauris vel ornare blandit. Morbi at dictum metus. Morbi sed malesuada leo. Pellentesque malesuada nisi a neque placerat mollis. Donec non imperdiet odio, in congue nunc. - -Phasellus dapibus nulla at mollis accumsan. Phasellus quis libero ante. Praesent in neque efficitur, eleifend mauris sit amet, posuere metus. Mauris nisi mauris, pharetra ut vestibulum a, lobortis id erat. Praesent at condimentum tortor, a vehicula arcu. Cras suscipit mollis egestas. Phasellus sit amet tellus mattis, bibendum ligula sed, tempor ligula. Sed scelerisque ultrices nisl, quis fringilla mauris feugiat sed. Etiam eu erat pellentesque augue eleifend porta nec ac turpis. Duis at sodales massa. Aenean ac dui lobortis, rhoncus massa non, cursus massa. Suspendisse ante magna, sagittis at ullamcorper non, feugiat eu ligula. Maecenas facilisis, nulla a aliquet rhoncus, libero libero aliquet nunc, sed rhoncus eros diam a sem. - -In aliquam lacus vitae gravida blandit. Fusce molestie dui eget sapien interdum, in consectetur tortor feugiat. Nunc vitae enim vestibulum sapien gravida laoreet. Vestibulum fermentum ut dui in efficitur. Nullam quis ex vitae nisl facilisis convallis at a lacus. Sed scelerisque non libero in consequat. Integer posuere tortor vitae quam egestas varius. Sed eu turpis leo. Pellentesque vel urna quis nisi congue pellentesque a quis sem. Sed volutpat blandit rhoncus. Cras mi dui, malesuada ut volutpat vitae, tempus vel lacus. Ut mattis dui in enim porta, a pharetra turpis finibus. Nunc ut posuere mi. Aenean commodo risus ut leo malesuada, nec efficitur dui convallis. In hac habitasse platea dictumst. - -Phasellus interdum congue rutrum. Sed venenatis lectus a sollicitudin malesuada. Cras tortor ante, pharetra et turpis nec, iaculis accumsan sapien. Cras ac nulla rutrum, consequat lacus ac, lobortis nulla. Interdum et malesuada fames ac ante ipsum primis in faucibus. Duis bibendum turpis at massa fringilla pulvinar. Curabitur id sagittis metus, a molestie sem. Vivamus quis mauris sit amet augue consectetur pretium eu non arcu. Sed sit amet efficitur neque. Vestibulum consectetur ligula non commodo lobortis. Nunc tincidunt eros odio, id lacinia nulla maximus quis. - -Donec nec nibh vel metus bibendum facilisis eu ut eros. Nunc sagittis, ipsum vel faucibus gravida, nunc nunc sollicitudin est, eu pellentesque ex magna vel libero. Aenean at tellus at metus mollis vehicula id non tellus. Sed ac scelerisque velit. Morbi ullamcorper augue sapien, in elementum sapien ultrices et. Curabitur at est purus. Sed auctor, massa eget finibus vulputate, metus lectus fringilla dolor, at sagittis velit nulla vitae ex. Phasellus ac convallis sem. Aenean quis libero ipsum. Aliquam dapibus turpis quis imperdiet ultrices. Pellentesque vehicula bibendum porta. Nulla sed semper purus, nec accumsan nulla. Integer volutpat massa in lectus viverra egestas. - -Ut malesuada nisi quis lacus finibus, in consequat arcu pulvinar. Nulla pulvinar ornare sem sed scelerisque. Fusce lobortis et lacus vitae consectetur. Vivamus id nisl eu urna ullamcorper ornare in quis nulla. Sed laoreet, eros aliquet laoreet efficitur, quam eros cursus nunc, at iaculis lorem tortor eget lacus. Cras aliquam nec eros vel porta. Proin eget ipsum nec nisi vulputate ullamcorper sit amet non sapien. Donec sodales libero vitae tortor dignissim, et sollicitudin sapien vehicula. Donec tempor egestas fermentum. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc lorem leo, dignissim sed est ac, volutpat molestie libero. Ut feugiat lectus nec odio gravida auctor. Ut ac ipsum cursus, efficitur ipsum ac, vehicula turpis. Donec ac nibh a mauris finibus dignissim vel sed dolor. - -Fusce ornare augue consequat, dignissim purus vel, pulvinar leo. Pellentesque a sem volutpat, hendrerit libero non, consectetur augue. Etiam urna felis, maximus rutrum blandit eget, cursus at risus. Donec congue aliquet pharetra. Aenean id blandit metus. Nullam venenatis egestas neque non finibus. Proin rutrum sapien sit amet nisl vehicula rutrum. Maecenas aliquam libero vitae laoreet tempor. Sed ut consectetur urna. Donec gravida dui sit amet tempor posuere. Maecenas aliquam viverra libero. Donec sagittis vitae leo eget condimentum. Aenean fermentum, elit vitae volutpat hendrerit, risus neque vehicula libero, et aliquet erat felis quis ante. - -Suspendisse consequat molestie auctor. In varius enim nec viverra semper. Aenean dui purus, posuere quis sodales eget, interdum in augue. Integer a erat vitae nibh ultricies porttitor sed quis tortor. Nam commodo viverra nibh, eu luctus lorem ornare sed. Interdum et malesuada fames ac ante ipsum primis in faucibus. Donec at ornare augue. Pellentesque sit amet pretium mauris, et pellentesque neque. Morbi dictum odio eu tempor fringilla. Suspendisse porta elit dui, sit amet faucibus felis ornare at. Donec sollicitudin eros sapien, eget elementum dui malesuada quis. - -Maecenas lacinia faucibus risus, eget venenatis massa. Curabitur eget turpis eget lacus interdum egestas. Pellentesque ut neque a libero volutpat cursus. Fusce ac quam elementum, pretium orci et, rutrum erat. Phasellus vulputate quis magna nec accumsan. Integer fermentum quam in euismod tincidunt. Praesent tincidunt, mauris at ultrices faucibus, ante risus condimentum lectus, sit amet faucibus metus justo at massa. Ut iaculis interdum elit sit amet rutrum. Sed sed metus in mi laoreet iaculis at et lacus. Aliquam mattis pharetra erat sit amet vulputate. Morbi vitae erat in tellus commodo convallis semper quis dolor. Donec commodo pulvinar nunc, vitae eleifend justo sodales vel. Duis elementum sed augue quis semper. Curabitur lorem velit, facilisis a nisl id, finibus sagittis orci. - -Pellentesque rutrum in ligula vitae cursus. Donec eu sagittis urna. Quisque magna est, laoreet eget dignissim in, elementum ut est. Donec vitae mi tempus, pellentesque nulla eu, ultricies massa. Sed rutrum ligula mi, id viverra sapien accumsan sit amet. Vivamus egestas, felis nec feugiat blandit, nibh lacus mattis massa, at rutrum dolor orci eget magna. Sed aliquet quam lorem, et posuere neque blandit rhoncus. - -Sed luctus turpis et mauris iaculis, quis euismod libero aliquet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Maecenas tortor odio, vulputate sagittis suscipit eu, posuere sit amet dui. In nisi sem, euismod maximus interdum quis, facilisis eget nunc. Fusce vulputate quam in massa sollicitudin, eu posuere massa pulvinar. Nulla feugiat ultrices fermentum. Mauris fringilla est id diam malesuada condimentum. - -Maecenas nulla mauris, tempus vel erat non, fermentum gravida leo. Duis hendrerit tortor arcu, tempor viverra lectus pretium ac. Pellentesque convallis turpis purus, a vehicula nulla vulputate in. Morbi neque ante, rutrum et orci eu, blandit dapibus velit. Vestibulum varius imperdiet magna, vitae iaculis libero pretium hendrerit. Curabitur nec lacus varius, malesuada orci vel, faucibus neque. Donec tortor massa, sollicitudin sit amet feugiat at, imperdiet sit amet massa. Nunc at lobortis arcu, a dictum leo. Aliquam at erat odio. - -Ut neque felis, molestie vitae erat sit amet, venenatis commodo orci. Nunc libero purus, ultricies efficitur pretium quis, tempus eget purus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque at fermentum magna, at fermentum purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur nunc lectus, lacinia vitae turpis sit amet, hendrerit pellentesque est. Etiam eget ex feugiat, rhoncus quam quis, commodo eros. Aenean laoreet nisl vitae tellus efficitur, at luctus nisi elementum. - -Vestibulum tincidunt vehicula nisl, nec auctor felis pretium eget. Aenean egestas cursus mauris, non mollis quam auctor ac. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nam egestas leo sed aliquam sodales. Phasellus faucibus tortor ut ligula rhoncus hendrerit. Curabitur facilisis euismod ultrices. Nullam molestie, nulla ut facilisis accumsan, leo ante commodo neque, vitae eleifend lectus libero et leo. Phasellus id dapibus urna, id cursus lectus. Donec maximus, dui feugiat porta bibendum, orci diam venenatis ante, non rhoncus urna ante eget risus. Proin vitae erat nec elit pulvinar suscipit ac nec velit. Donec mollis nisl ut fringilla fringilla. Nulla dapibus nec nibh a blandit. Integer at enim posuere justo rhoncus tristique nec vel velit. Donec placerat, neque venenatis aliquet pellentesque, sapien eros posuere dui, quis dapibus arcu est eget turpis. Ut id faucibus dolor. - -Cras sed porta massa. Suspendisse non risus erat. Mauris ut justo id augue mattis iaculis. Curabitur eget velit urna. Sed blandit sodales rhoncus. Integer a libero nulla. Vestibulum sit amet euismod lacus. Nullam non metus at mi congue tincidunt ac id lorem. Pellentesque tellus risus, sodales nec nibh nec, ullamcorper semper turpis. Fusce nunc leo, ultricies a massa blandit, cursus interdum enim. Nulla at quam at libero volutpat eleifend sit amet ut nunc. Morbi pellentesque est elit, eget suscipit nisl eleifend nec. Maecenas tincidunt, eros at lacinia cursus, mauris nisl efficitur massa, eu tincidunt mi erat vel nisi. Suspendisse tempor euismod neque, eget sollicitudin massa ornare in. Suspendisse consectetur, purus quis laoreet dignissim, nisi purus mollis risus, eget accumsan magna erat ut magna. Morbi quis velit tortor. - -Etiam et neque semper, porttitor ipsum eu, vulputate arcu. Donec aliquam ornare eros, at malesuada nulla luctus sed. Phasellus tincidunt maximus enim quis porta. Praesent diam felis, aliquet vitae imperdiet pellentesque, interdum quis metus. Nullam ultricies lorem nec consequat euismod. Sed ornare condimentum magna. Quisque elementum gravida dignissim. In id massa gravida, maximus ex a, placerat ligula. Nullam scelerisque metus at consectetur interdum. Morbi bibendum neque nisi, vitae tincidunt urna eleifend eu. Aenean pharetra ullamcorper purus, vel efficitur mi. Aenean tincidunt malesuada blandit. - -Nam a venenatis nibh. Duis consectetur nulla vitae felis fringilla, sit amet elementum felis efficitur. Donec vitae dignissim sem. Donec vitae urna feugiat, pellentesque ipsum eu, consectetur nunc. In feugiat nisl ante, eget auctor orci fringilla eget. Vestibulum a risus vitae nisi hendrerit malesuada iaculis in augue. Nulla eu luctus est, ac eleifend nulla. - -Nam iaculis blandit lacus, at iaculis sapien blandit a. Sed quis feugiat urna, nec facilisis orci. Nunc pharetra euismod neque eu cursus. Maecenas eu lorem mattis, sollicitudin tortor sed, suscipit est. Curabitur a elit et nibh efficitur placerat eget eget dolor. Phasellus vitae mattis nisi, sed vehicula arcu. Nunc gravida tortor quis nisi tristique interdum. Vivamus augue enim, sagittis ac tellus vel, finibus facilisis ligula. Nullam gravida feugiat est elementum congue. Nullam vel semper felis. Sed id lorem euismod, auctor tortor eget, vestibulum metus. - -Nulla facilisi. Praesent ut bibendum velit. Phasellus id erat et dui semper rutrum quis id metus. Aliquam vitae orci et erat imperdiet dapibus et ac magna. Duis at urna odio. Phasellus ultricies, libero sed fringilla dictum, felis nisi aliquet eros, nec maximus sapien mi vel urna. Aliquam erat volutpat. Nunc dictum turpis nec neque commodo efficitur. - -Curabitur eget tincidunt nisi. Ut sit amet mollis felis, at suscipit nulla. Phasellus augue turpis, facilisis nec mi ac, venenatis mollis ipsum. Donec feugiat porta velit, nec dictum odio. Duis faucibus, ex non aliquet consequat, diam enim consectetur nunc, quis dapibus metus turpis quis diam. Etiam vel velit purus. Morbi mollis maximus purus at viverra. - -Proin id volutpat tortor. Nam consectetur ac tortor id placerat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam in nunc id odio ullamcorper maximus sed sed elit. Sed ut elementum ex. Cras tincidunt massa urna, sed consequat lacus finibus ut. Mauris rutrum ex at ipsum volutpat posuere. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nunc nisi est, egestas at felis eget, facilisis commodo lectus. Vivamus sapien lorem, hendrerit ut neque eu, condimentum pellentesque justo. Proin magna orci, ultricies non porttitor vel, tincidunt at nibh. In malesuada in mi eget aliquam. - -Aenean placerat urna eu tortor interdum aliquet. Vestibulum volutpat, ipsum non pretium hendrerit, nisl libero interdum enim, quis vulputate ligula leo ullamcorper neque. In viverra convallis turpis, elementum aliquam metus aliquam sed. Suspendisse vitae quam ac nulla condimentum rhoncus. Ut quis fermentum ipsum, nec faucibus neque. Sed cursus faucibus ligula ac pharetra. Etiam faucibus, massa eget condimentum finibus, tortor magna tristique nisl, et sagittis nisi enim ut enim. Nunc vehicula, ligula quis congue pulvinar, sem diam rhoncus libero, eget facilisis odio mi quis elit. Nullam et viverra mi, ut tincidunt purus. In dapibus risus in ligula rhoncus, sit amet interdum libero tincidunt. Morbi vehicula hendrerit lacus id fringilla. In maximus condimentum felis sed venenatis. Nullam sed mi ante. - -Donec pharetra commodo porttitor. Maecenas nulla mi, tempor vel est quis, aliquet dictum ligula. Vivamus maximus bibendum quam, vel mattis dolor bibendum convallis. Ut commodo finibus turpis, nec sollicitudin turpis cursus ac. Nullam sit amet nunc vitae sem aliquet aliquet ac sit amet risus. Ut viverra purus eget mauris facilisis tristique. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed id tincidunt leo. Donec aliquet lacinia metus vitae elementum. Donec sed imperdiet enim. Morbi congue vehicula porttitor. Sed lobortis commodo sem, et pharetra velit facilisis id. Integer commodo feugiat urna, quis vulputate ligula sagittis eget. Proin cursus vitae velit sed dignissim. Aenean elementum consectetur porttitor. - -Ut in interdum mauris. Cras tortor nulla, dapibus nec nisl vitae, interdum molestie lacus. Nunc sed porta erat. Mauris ac ultrices odio. Curabitur porttitor lacus ac massa ultricies condimentum. Integer ut accumsan ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Sed sollicitudin, ligula porta hendrerit vestibulum, tortor erat facilisis ante, vel dignissim est ipsum eget turpis. Phasellus rutrum pharetra massa, eleifend congue neque euismod eu. - -Nullam tristique eros id erat pharetra pretium. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras ut felis congue, elementum diam sed, elementum est. Donec sagittis nulla at auctor placerat. Duis gravida ex risus, et tristique enim dignissim a. Pellentesque urna velit, pretium ut libero imperdiet, eleifend volutpat tortor. Phasellus non vehicula felis, sed hendrerit justo. Pellentesque iaculis efficitur accumsan. Proin diam nisi, auctor sit amet molestie ut, pretium a felis. - -Aliquam quis nunc vulputate dui hendrerit porta. Duis non sapien eget dolor suscipit dapibus vel at urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla pharetra dignissim leo, a pellentesque eros vulputate sit amet. Sed augue turpis, consequat id tincidunt non, congue et eros. Ut enim dolor, egestas euismod volutpat a, posuere ut enim. Donec eget nisl ut erat semper dignissim id ut massa. Sed maximus vitae orci at euismod. Ut sit amet lorem sed magna cursus tempor ut sit amet odio. Interdum et malesuada fames ac ante ipsum primis in faucibus. - -Sed a turpis non ipsum pharetra vulputate id eu metus. Integer a tristique dui, sed vehicula metus. Fusce vehicula erat id nulla posuere, a venenatis neque gravida. Ut lobortis, leo eu ornare ultricies, dolor tortor volutpat arcu, ac auctor augue dui vitae felis. Aliquam placerat enim nec sem volutpat, a scelerisque eros gravida. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Fusce venenatis feugiat tempor. Nullam non dictum mauris, vitae venenatis sapien. Aliquam scelerisque ligula in libero condimentum facilisis. Mauris non arcu quis enim placerat blandit. Duis hendrerit sapien vehicula, gravida metus at, elementum leo. In fringilla mauris non est consequat fermentum. Integer turpis libero, tempor eget sapien nec, ultricies imperdiet tortor. - -Pellentesque quam nisl, condimentum eu mauris nec, faucibus fringilla augue. Proin vitae sagittis nibh. Nunc et aliquet nisl. Morbi volutpat imperdiet diam et sagittis. Vivamus imperdiet risus ut purus interdum gravida. Morbi consequat posuere dictum. Aenean enim quam, venenatis at odio ac, pellentesque condimentum massa. Vivamus nisl sapien, scelerisque a posuere vel, ullamcorper semper sem. Morbi sollicitudin tempor neque ut molestie. Donec in lectus pretium, venenatis diam id, pharetra metus. Duis lorem tellus, condimentum eget cursus vitae, tristique id est. Donec at nisi porttitor, blandit enim at, euismod sapien. Nam augue quam, sagittis sed enim eu, iaculis dapibus leo. Aliquam aliquet commodo turpis a commodo. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur auctor, sem id semper dictum, augue eros sollicitudin elit, at vestibulum nisi ex et purus. - -Vivamus imperdiet ultrices commodo. Interdum et malesuada fames ac ante ipsum primis in faucibus. In lorem lacus, volutpat et ligula quis, facilisis sodales mauris. Quisque ultrices elit eget mauris accumsan condimentum. Vivamus risus lorem, sollicitudin vel scelerisque ut, ultricies ut lacus. Nunc id magna erat. Proin non interdum nulla. Maecenas quis ligula tellus. Pellentesque quis lorem eget augue auctor gravida eu in nisi. Maecenas at auctor nunc. Quisque volutpat lorem sit amet feugiat gravida. Praesent mattis tortor ligula, at placerat eros dapibus sit amet. Etiam imperdiet nisi ut ipsum eleifend, quis laoreet velit porttitor. - -Fusce id ullamcorper erat. Aliquam vel consequat eros, quis tempor dolor. Vivamus ut orci eu nisl congue dapibus non in massa. Integer maximus laoreet mi dictum ultrices. Proin dignissim dui eu accumsan rhoncus. Quisque varius cursus arcu at finibus. Sed auctor lacinia metus vitae viverra. Nam vel sapien placerat, bibendum elit sit amet, sagittis turpis. Nunc a commodo felis. - -Integer vehicula elementum feugiat. Proin eget libero ante. Aliquam in odio lacus. Etiam pretium imperdiet odio sed posuere. Quisque at magna id nisi tempor rhoncus sed et metus. Duis porta, sapien sed malesuada finibus, nunc dolor sodales purus, in ullamcorper libero nisi in nisl. Maecenas vitae nisl velit. Suspendisse potenti. Integer egestas, mi eu dictum accumsan, nulla odio congue massa, nec placerat ligula lacus quis mi. - -Sed sem neque, convallis vitae faucibus ornare, malesuada a risus. Nulla convallis, dui nec tincidunt porttitor, lectus arcu suscipit elit, in tristique lacus urna ac velit. Fusce in arcu eget est condimentum volutpat ac nec tortor. Curabitur dapibus odio tortor, in congue ex elementum eget. Vivamus laoreet elit massa, id elementum orci sagittis at. Curabitur interdum, odio eget convallis aliquam, lorem diam luctus leo, vitae feugiat ligula nibh at nisl. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Vestibulum non mauris molestie, mattis mauris id, fermentum lorem. Morbi nibh purus, facilisis vel tristique in, gravida in ex. Vivamus tincidunt urna at ex efficitur, eu dapibus nulla convallis. Proin vel pulvinar nibh. Donec aliquet semper orci et gravida. - -Nunc ornare et urna quis sagittis. Cras non dictum metus. In ac laoreet sem. Cras ornare libero sem, ut aliquet ipsum ornare laoreet. Donec id euismod tortor. Etiam odio mi, hendrerit ac urna vitae, gravida maximus mauris. Cras sed euismod neque. - -Vestibulum porta tristique placerat. Phasellus nec felis vel leo gravida faucibus in at neque. Maecenas felis dolor, sagittis vel elit eget, scelerisque egestas urna. Integer consequat nulla a urna euismod, ac feugiat sapien rhoncus. Nunc sit amet elit at urna aliquam bibendum id sed neque. Vestibulum non dictum mauris, tincidunt finibus purus. Donec posuere enim vel bibendum gravida. Ut elementum tortor a diam pharetra aliquam. Fusce ut nisi ut libero rhoncus scelerisque. - -Integer libero lorem, molestie non elit a, convallis tristique dui. Fusce sodales convallis ullamcorper. Cras eleifend lobortis erat sit amet cursus. Nam vel ipsum eros. Integer sed aliquam risus. Quisque dictum vulputate eros et iaculis. Etiam ac ultricies nisl. Nunc et nibh ut neque egestas porttitor. Aenean in laoreet lectus. Praesent et egestas arcu. Sed ullamcorper, enim ut fermentum euismod, odio nisi tempor nisl, sed feugiat mi nulla a libero. Integer cursus sagittis est, ac dapibus est mollis eget. - -Donec blandit placerat ex. Aliquam erat volutpat. Duis et odio tempus leo porttitor porttitor eu ac dolor. Mauris imperdiet, sapien sed suscipit pellentesque, nulla odio placerat nibh, et scelerisque ex tortor posuere enim. Aliquam fringilla porta cursus. Nullam sollicitudin, ante quis bibendum imperdiet, nisi sapien lacinia velit, eu vehicula justo turpis in leo. Morbi sit amet vulputate sem. Fusce fringilla tellus mi, in pellentesque tellus sollicitudin sit amet. Nunc venenatis lorem ac odio convallis, nec cursus arcu bibendum. Vivamus imperdiet maximus pellentesque. - -Nulla facilisi. Donec arcu sem, auctor at nisi a, bibendum maximus nulla. Phasellus sed diam facilisis, faucibus ligula sed, ultricies sapien. Aenean varius ut ligula tempor vehicula. Suspendisse pulvinar ipsum tincidunt varius lacinia. Ut enim mi, pulvinar vitae ex non, euismod sodales est. Donec porta molestie ex at ornare. Nam vehicula interdum dictum. Sed viverra sapien sed vehicula laoreet. Nulla eget turpis vel sem interdum rutrum. Vestibulum a dolor id purus mattis blandit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. - -Nulla in arcu interdum, blandit mi vitae, imperdiet tellus. Maecenas egestas fermentum enim vitae vestibulum. Nulla dictum lorem ut justo interdum, eget placerat dolor elementum. Vestibulum sit amet pulvinar elit. Maecenas id mauris quam. Integer iaculis felis convallis, blandit sapien nec, pretium urna. Integer quis pellentesque enim. In egestas sit amet massa vitae pharetra. Cras non ultricies arcu, quis pretium sem. Donec fermentum eleifend risus cursus pellentesque. Quisque sodales ultricies dolor rutrum lacinia. In hac habitasse platea dictumst. Sed lacinia purus in arcu congue, sed scelerisque turpis iaculis. Phasellus a venenatis erat, ut tristique nulla. Vivamus dapibus felis id ex laoreet, nec feugiat libero posuere. Aenean et massa id diam dignissim iaculis. - -Vivamus est ligula, interdum vitae sagittis ac, finibus a nunc. Aenean maximus mollis dapibus. Vestibulum blandit urna quis metus finibus, at malesuada augue pulvinar. Proin consectetur ut ante vel maximus. Sed ut ex accumsan, consequat nisi in, suscipit sapien. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Etiam volutpat id velit sed suscipit. Phasellus id viverra dui, vel suscipit ligula. - -Donec semper ac ipsum in consectetur. Sed id eleifend ante, at pulvinar tellus. Quisque at mauris ex. In sit amet velit vitae nunc posuere dictum quis in mi. Proin lectus risus, finibus sit amet consequat ac, fringilla ut mauris. Proin et mi nisl. Maecenas condimentum dapibus mi id dapibus. Cras ullamcorper pulvinar justo ut egestas. Nam feugiat dui ac odio mollis, quis congue est efficitur. Vivamus luctus tristique ipsum, quis egestas lacus mollis id. Proin id placerat sapien. Sed et sem sed ex iaculis volutpat. Mauris eu interdum magna. Mauris vehicula, enim eu placerat sagittis, metus mauris molestie neque, ut fermentum nibh nisi quis tortor. - -Sed sagittis sem erat, vitae tristique purus tempor at. Nullam id urna mollis, aliquet ex eget, varius sem. Donec scelerisque cursus nulla, vel imperdiet ipsum cursus et. Vestibulum condimentum lorem neque, at auctor orci placerat sit amet. Vivamus felis metus, sodales vitae sollicitudin non, condimentum a leo. Praesent fermentum nisi eget ex tempus luctus. Cras sodales turpis nec ultrices placerat. Sed efficitur erat eu felis tempor, eget suscipit ligula porttitor. Cras a porttitor ante, a vehicula enim. Ut malesuada tellus lectus, nec tincidunt leo dapibus non. Phasellus at purus commodo, hendrerit lectus eu, scelerisque massa. Vivamus ex ligula, placerat id augue sit amet, tempor pretium augue. Curabitur aliquam lorem a venenatis pretium. Etiam quis efficitur lacus. Donec nec felis nulla. - -Nunc malesuada ipsum ut scelerisque condimentum. Suspendisse sapien elit, ornare et egestas in, ultricies nec nibh. Ut egestas, nunc in molestie cursus, velit arcu tempus nisl, non interdum ligula augue cursus nulla. Fusce pretium in odio non eleifend. Donec eu condimentum tellus. Ut vel nisl dictum, sollicitudin urna a, lobortis dolor. Proin malesuada ante in molestie feugiat. Duis leo sapien, porttitor finibus porttitor non, egestas ut nisi. - -Duis vel volutpat sapien. Mauris mattis nec lorem et vulputate. Nunc vitae nulla laoreet, dapibus magna finibus, lacinia orci. Quisque vestibulum ipsum id tortor blandit, in molestie elit eleifend. Maecenas sed leo aliquet nunc tincidunt ullamcorper quis ut sem. Vestibulum lectus leo, molestie ut sem at, accumsan consequat dolor. Phasellus sem elit, mollis vel tempor ac, bibendum vel sapien. Maecenas sed pulvinar odio. - -Cras vitae justo sed quam congue consectetur. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer dignissim, velit vel commodo cursus, libero mauris sollicitudin nulla, id molestie velit dolor et dui. Ut at turpis vitae magna viverra tristique quis a nisi. Nulla sapien quam, cursus ac mauris in, suscipit placerat purus. Cras eget purus volutpat, egestas justo sed, porttitor ante. Vestibulum efficitur mattis fringilla. Integer sit amet consectetur massa. Phasellus non nunc et nisl semper fringilla. Praesent aliquam enim non lectus sodales, vel pretium elit sodales. Suspendisse vel dapibus elit, lobortis placerat magna. Aliquam molestie mi vitae nisi condimentum volutpat. - -Nulla quis lorem turpis. Nullam placerat iaculis nulla, hendrerit tincidunt eros vestibulum vitae. Mauris nulla justo, ultricies non sapien et, volutpat nec. \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/artifacts/mb/config/allowSharedTopicSubscriptionsConfig/broker.xml b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/artifacts/mb/config/allowSharedTopicSubscriptionsConfig/broker.xml deleted file mode 100644 index 6300756b..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/artifacts/mb/config/allowSharedTopicSubscriptionsConfig/broker.xml +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - - - default - - - localhost - 7611 - 0 - - 5 - - 10 - - - - - - 0.0.0.0 - - - - - - repository/resources/security/wso2carbon.jks - wso2carbon - SunX509 - - - repository/resources/security/client-truststore.jks - wso2carbon - SunX509 - - - - 10 - true - true - - - - - 0.0.0.0 - - - - - - repository/resources/security/wso2carbon.jks - wso2carbon - SunX509 - - - repository/resources/security/client-truststore.jks - wso2carbon - SunX509 - - - - - 32768 - - - 32768 - - - - - OPTIONAL - - - - - - - NOT_REQUIRED - - - - - /permission/admin/mqtt/connect - - - - - - - - - - - - - - - WSO2MBStoreDB - 08 - 23,27,44 - 21,22 - 40 - - - - WSO2MBStoreDB - 08 - 23,27,44 - 21,22 - 40 - - - - - 256 - - 4 - - 2 - - - strong - - - false - - - - org.wso2.andes.server.cluster.coordination.TimeStampBasedMessageIdGenerator - - - 10 - - - - - - - 10000000 - - - - - - - - 2000 - - - 1000 - - - 1000 - - - 5 - - - - - 1000 - - - 4096 - - - 5 - - - 5 - - - 5 - - - 65000 - - - - 100 - - 120 - - - - - DISCARD_NONE - - 60 - - - - - - 1 - - - 100 - - - 1000 - - - - - - 3 - - - 65500 - - - false - - - 1000 - - - - - - 1 - - - 65536 - - - 70 - - - 180 - - - 1 - - - - - - false - - - 600 - - - 900 - - - 3 - - - - - - - - 100 - - - 100000 - - - false - - - - - - - - 800 - 8000 - - - - - 100 - 1000 - - - - - - RDBMS - - - - - - 5 - - - 900 - - - - - - 1 - - - - - - - default - - - diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/automation.xml b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/automation.xml deleted file mode 100644 index 97ba3327..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/automation.xml +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - - - 60000 - - standalone - - true - - false - - - - - - - http://10.100.2.51:4444/wd/hub/ - - - - firefox - - /home/test/name/webDriver - - - - - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - - - - - keystores/products/wso2carbon.jks - - JKS - - wso2carbon - - wso2carbon - - wso2carbon - - - - - client-truststore.jks - - JKS - - wso2carbon - - - - - - https://wso2.org/repo - file:///home/krishantha/test - - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - authUser1 - authUser1 - - - authUser2 - authUser2 - - - authUser3 - authUser3 - - - authUser4 - authUser4 - - - authUser5 - authUser5 - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - admin - admin - - - - - tenant1user1 - tenant1user1 - - - tenant1user2 - tenant1user2 - - - - - - - admin - admin - - - - - tenant2user1 - tenant2user1 - - - - - - - admin - admin - - - - - topictenantuser1 - topictenantuser1 - - - topictenantuser2 - topictenantuser2 - - - - - - - admin - admin - - - - - topictenantuser1 - topictenantuser1 - - - topictenantuser2 - topictenantuser2 - - - - - - - admin - admin - - - - - dlctenantuser1 - dlctenantuser1 - - - - - - - - - - - - - localhost - - - 11063 - 10743 - 6972 - 9972 - - - - - - - - - - - - - - - org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension - - - - - org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/automationXMLSchema.xsd b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/automationXMLSchema.xsd deleted file mode 100644 index c23f84ed..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/automationXMLSchema.xsd +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - ================================================= - Parameters ================================================= - Browser type with used by framework to execute UI test, supported types - - chrome|firefox|opera|ie|htmlUnit - - - - - - - Change this to edit wait time for test - artifact deployment - - - - - - Change this to product|platform/cloud to - execute test on specific environment - - - - - - - Change this to true if you want to generate - coverage statistics - - - - - - Change this to true if you want to enable - framework dashboard - - - - - - - - - - - - - - - Change to enable remote webDriver - URL of remote webDriver server - - - - - - - - - - - - - Type of the browser selenium tests - are running" - - - - - - - - path to webDriver - executable - required only for - chrome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KeyStore which will be used for - encrypting/decrypting passwords - and other sensitive information. - - - - - - - Keystore file location - - - - - - Keystore type (JKS/PKCS12 etc.) - - - - - - Keystore password - - - - - - Private Key alias - - - - - - Private Key password - - - - - - - - - - System wide trust-store which is used to - maintain the certificates of all - the trusted parties. - - - - - - - trust-store file location - - - - - - trust-store type (JKS/PKCS12 - etc.) - - - - - - trust-store password - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/axis2config/axis2_client.xml b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/axis2config/axis2_client.xml deleted file mode 100644 index a8b584d0..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/axis2config/axis2_client.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - - true - false - false - - - 500 - - 15000 - - - false - - - - true - - - - - - false - - - admin - axis2 - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6071 - - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 - chunked - 60000 - 60000 - - - HTTP/1.1 - chunked - 60000 - 60000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar deleted file mode 100644 index d28b3a08..00000000 Binary files a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar deleted file mode 100644 index 5903cc4b..00000000 Binary files a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/filters.txt b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/filters.txt deleted file mode 100644 index 04aa6cb7..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/filters.txt +++ /dev/null @@ -1,17 +0,0 @@ --*.stub* --*.stub_ --*.stub_4.0.0 --*.stub- --org.eclipse.* --*.equinox.* --org.wso2.carbon.user.core.* --samples.* --*.log4j* --*.axis2* --*.ui* --*.tenant* --*.stratos* --*.eventing* --*tests-transports* --org.wso2.carbon.mediation.statistics* --*startup* \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/instrumentation.txt b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/instrumentation.txt deleted file mode 100644 index 12af5f28..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/instrumentation.txt +++ /dev/null @@ -1,2 +0,0 @@ -org.wso2.carbon.andes* -org.dna* diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/keystores/products/client-truststore.jks b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/keystores/products/client-truststore.jks deleted file mode 100644 index cd16dd7e..00000000 Binary files a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/keystores/products/client-truststore.jks and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/keystores/products/wso2carbon.jks b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/keystores/products/wso2carbon.jks deleted file mode 100644 index 7942c53c..00000000 Binary files a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/keystores/products/wso2carbon.jks and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/log4j.properties b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/log4j.properties deleted file mode 100644 index 535afa56..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/log4j.properties +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# -# WSO2 Inc. licenses this file to you 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. -# - -# -# This is the log4j configuration file used by WSO2 Carbon -# -# IMPORTANT : Please do not remove or change the names of any -# of the Appenders defined here. The layout pattern & log file -# can be changed using the WSO2 Carbon Management Console, and those -# settings will override the settings in this file. -# - -log4j.rootLogger=INFO, console, Default - -log4j.logger.org.wso2=INFO -log4j.logger.org.apache.axis2.deployment.ModuleDeployer=WARN -#Automation file apender -log4j.appender.Default=org.apache.log4j.RollingFileAppender -log4j.appender.Default.File=logs/automation.log -log4j.appender.Default.Append=true -log4j.appender.Default.MaxFileSize=10MB -log4j.appender.Default.MaxBackupIndex=10 -log4j.appender.Default.layout=org.apache.log4j.PatternLayout -log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n - - -#Automation console apender -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/sample/sample_1KB_msg.xml b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/sample/sample_1KB_msg.xml deleted file mode 100644 index bf5ff502..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/sample/sample_1KB_msg.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - BOOK_QTY - - 1.000 - - - - - - - - BOOK_QTY - - 1.000 - - - - - DZ - - DZN - - X - - - - - - NO - - NO - - X - - X - - - - - - BOOK_QTY - - 1.000 - - - - - DZ - - DZ22222221231231231231 - - X - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/testng-server-mgt.xml b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/testng-server-mgt.xml deleted file mode 100644 index 33aa07ba..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/testng-server-mgt.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/testng.xml b/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/testng.xml deleted file mode 100644 index d571022c..00000000 --- a/modules/broker/integration/tests-integration/tests-amqp/src/test/resources/testng.xml +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-mqtt/pom.xml b/modules/broker/integration/tests-integration/tests-mqtt/pom.xml deleted file mode 100644 index a9398dc9..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/pom.xml +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - org.wso2.mb - org.wso2.mb.integration.tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - MB MQTT based Test Module - org.wso2.carbon.mb.mqtt.test - jar - - - - - maven-surefire-plugin - false - 2.12.4 - - - -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m - false - - src/test/resources/testng-server-mgt.xml - src/test/resources/testng.xml - - - - - maven.test.haltafterfailure - false - - - carbon.zip - - ${basedir}/../../../distribution/target/wso2iot-broker-${product.wso2iot.broker.version}.zip - - - - framework.resource.location - - ${basedir}/src/test/resources/ - - - - usedefaultlisteners - false - - - project.build.directory - ${project.build.directory} - - ${basedir}/target/security-verifier/ - ${basedir}/src/test/resources/instrumentation.txt - ${basedir}/src/test/resources/filters.txt - - ${basedir}/target - - - - maven-dependency-plugin - - - - copy-jacoco-dependencies - compile - - copy-dependencies - - - ${project.build.directory}/jacoco - jar - org.jacoco.agent - - - - copy-secVerifier - compile - - copy-dependencies - - - ${basedir}/target/security-verifier - aar - SecVerifier - true - - - - unpack-mar-jks - compile - - unpack - - - - - org.wso2.mb - wso2iot-broker - ${product.wso2iot.broker.version} - zip - true - ${basedir}/target/tobeCopied/ - **/*.jks,**/*.mar,**/axis2_client.xml - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.7.1 - - ${basedir}/target/report - amqp-test - - - - integration-test - - report-only - - - - - - maven-resources-plugin - 2.6 - - - copy-resources-jks - compile - - copy-resources - - - ${basedir}/src/test/resources/keystores/products - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/resources/security/ - - - **/*.jks - - - - - - - copy-axis2files - compile - - copy-resources - - - ${basedir}/src/test/resources/axis2config - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/conf/axis2/ - - - **/*.xml - - - - - - - copy-resources-mar - compile - - copy-resources - - - ${basedir}/src/test/resources/client/modules - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/deployment/client/modules - - - **/*.mar - - - - - - - - - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - - - org.wso2.carbon.automation - org.wso2.carbon.automation.extensions - - - org.apache.ftpserver - :ftpserver-core - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.test.utils - - - org.wso2.mb - org.wso2.mb.integration.common.utils - - - org.wso2.mb - org.wso2.mb.integration.common.clients - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.extensions - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.tests - - - slf4j.wso2 - slf4j - - - org.testng - testng - - - org.jacoco - org.jacoco.agent - - - org.wso2.carbon.registry - org.wso2.carbon.registry.resource.stub - - - org.wso2.carbon.identity - org.wso2.carbon.um.ws.api.stub - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/DataProvider/QualityOfServiceDataProvider.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/DataProvider/QualityOfServiceDataProvider.java deleted file mode 100644 index f05ca4ad..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/DataProvider/QualityOfServiceDataProvider.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.DataProvider; - -import org.testng.annotations.DataProvider; -import org.wso2.mb.integration.common.clients.QualityOfService; - -/** - * Data provider to feed Quality Of Service values to test cases. - */ -public class QualityOfServiceDataProvider { - - /** - * Get the Quality Of Service set to run tests. - * - * @return Quality Of Service set to test - */ - @DataProvider(name = "QualityOfServiceDataProvider") - public static Object[][] createData() { - return new Object[][]{ - {QualityOfService.MOST_ONCE}, - {QualityOfService.LEAST_ONCE}, - {QualityOfService.EXACTLY_ONCE} - }; - } - -} - - diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicAuthorizationTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicAuthorizationTestCase.java deleted file mode 100644 index afa27333..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicAuthorizationTestCase.java +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.admin.client.LogViewerClient; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.carbon.logging.view.stub.LogViewerLogViewerException; -import org.wso2.carbon.logging.view.stub.types.carbon.LogEvent; -import org.wso2.carbon.registry.resource.stub.ResourceAdminServiceExceptionException; -import org.wso2.carbon.um.ws.api.stub.UserStoreExceptionException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.mb.integration.tests.mqtt.functional.util.RemoteAuthorizationManagerServiceClient; -import org.wso2.mb.integration.tests.mqtt.functional.util.ResourceAdminServiceClient; - -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.List; - -/** - * Verifies basic mqtt message transactions are functional. - *

- * Send a single mqtt messages with unauthorized user and not recieve. - * Send messages with authorized user and receive them. - */ -public class BasicAuthorizationTestCase extends MBIntegrationBaseTest { - - private UserManagementClient userMgtClient; - private ResourceAdminServiceClient resourceAdminServiceClient; - private static final int MAX_LEVELS = 50; - private static final int UNAUTHORIZED_USERS = 10; - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Setup test configuration by creating users and providing permission to access topics. - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, ConfigurationException, - AutomationUtilException, UserAdminUserAdminException, - UserStoreExceptionException, ResourceAdminServiceExceptionException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_MQTT_USER_AUTHENTICATION, "REQUIRED"); - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_MQTT_USER_AUTHORIZATION, "REQUIRED"); - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - - LoginLogoutClient loginLogoutClient = new LoginLogoutClient(automationContext); - String sessionCookie = loginLogoutClient.login(); - userMgtClient = new UserManagementClient(backendURL, sessionCookie); - resourceAdminServiceClient = new ResourceAdminServiceClient(backendURL, sessionCookie); - resourceAdminServiceClient.addCollection("/_system/governance/permission/admin/mqtt", "connect", "", ""); - resourceAdminServiceClient.addCollection("/_system/governance/permission/admin/mqtt/topic/authorization", - "test", "", ""); - String resource = "/_system/governance/permission/admin/mqtt/topic/authorization/test"; - String usersList[] = new String[MAX_LEVELS]; - RemoteAuthorizationManagerServiceClient remoteAuthorizationManagerServiceClient = - new RemoteAuthorizationManagerServiceClient(backendURL, sessionCookie); - for (int i = 0; i < MAX_LEVELS; i++) { - //create user - userMgtClient.addUser("user" + i + "-mqtt", "passWord1@", null, "default"); - - //create permission resource - resourceAdminServiceClient.addCollection(resource, "" + i, "", ""); - resource = resource + "/" + i; - - //create role - String users[] = new String[1]; - users[0] = "user" + i + "-mqtt"; - // Create roles - usersList[i] = ("user" + i + "-mqtt"); - userMgtClient.addRole("mqtt-publish-" + i, users, null); - userMgtClient.addRole("mqtt-subscribe-" + i, users, null); - - remoteAuthorizationManagerServiceClient.authorizeRole("mqtt-publish-" + i, - resource.split("/_system/governance")[1], "publish"); - remoteAuthorizationManagerServiceClient.authorizeRole("mqtt-subscribe-" + i, - resource.split("/_system/governance")[1], "subscribe"); - } - remoteAuthorizationManagerServiceClient.authorizeRole("mqtt-connect", "/permission/admin/mqtt/connect", - "authorize"); - - userMgtClient.addRole("mqtt-connect", usersList, null); - for (int i = 0; i < UNAUTHORIZED_USERS; i++) { - userMgtClient.addUser("un_user" + i + "-mqtt", "passWord1@", null, "default"); - } - } - - /** - * Send a single mqtt message on qos {@link QualityOfService#LEAST_ONCE} and receive. - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test Subscription and Authorization with wildcard topics") - public void performAuthorizationBasedOnWildCardTopics() - throws MqttException, XPathExpressionException, LogViewerLogViewerException, RemoteException { - int noOfMessages = 1; - boolean saveMessages = true; - String topicPrefix = "authorization/test/0/#"; - MQTTClientEngine mqttClientEngineSub; - mqttClientEngineSub = new MQTTClientEngine(); - MQTTClientConnectionConfiguration mqttClientConnectionConfiguration = - mqttClientEngineSub.getConfigurations(automationContext); - mqttClientConnectionConfiguration.setBrokerUserName("user0-mqtt"); - mqttClientConnectionConfiguration.setBrokerPassword("passWord1@"); - mqttClientEngineSub.createSubscriberConnection(mqttClientConnectionConfiguration, topicPrefix, - QualityOfService.LEAST_ONCE, saveMessages, ClientMode.BLOCKING); - topicPrefix = "authorization/test/0"; - for (int i = 1; i < MAX_LEVELS; i++) { - topicPrefix = topicPrefix + "/" + i; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - mqttClientConnectionConfiguration = mqttClientEngine.getConfigurations(automationContext); - mqttClientConnectionConfiguration.setBrokerUserName("user" + i + "-mqtt"); - mqttClientConnectionConfiguration.setBrokerPassword("passWord1@"); - mqttClientEngine.createPublisherConnection(mqttClientConnectionConfiguration, topicPrefix, - QualityOfService.LEAST_ONCE, MQTTConstants.TEMPLATE_PAYLOAD, noOfMessages, ClientMode.BLOCKING); - } - - mqttClientEngineSub.waitUntilAllMessageReceivedAndShutdownClients(); - List receivedMessages = mqttClientEngineSub.getReceivedMessages(); - Assert.assertEquals(receivedMessages.size(), MAX_LEVELS - 1, "The received message count is incorrect."); - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - /** - * This will test the publish and subscribe flow with the authorized users. - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test Publish and Subscribe with Authorization") - public void performAuthorizationForPublishAndSubscribe() - throws MqttException, XPathExpressionException, LogViewerLogViewerException, RemoteException { - int noOfMessages = 500; - boolean saveMessages = true; - - String topicPrefix = "authorization/test"; - for (int i = 0; i < 10; i++) { - topicPrefix = topicPrefix + "/" + i; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration mqttClientConnectionConfiguration = - mqttClientEngine.getConfigurations(automationContext); - mqttClientConnectionConfiguration.setBrokerUserName("user" + i + "-mqtt"); - mqttClientConnectionConfiguration.setBrokerPassword("passWord1@"); - mqttClientEngine.createSubscriberConnection(mqttClientConnectionConfiguration, topicPrefix, - QualityOfService.LEAST_ONCE, saveMessages, - ClientMode.BLOCKING); - mqttClientEngine.createPublisherConnection(mqttClientConnectionConfiguration, topicPrefix, - QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfMessages, - ClientMode.BLOCKING); - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - List receivedMessages = mqttClientEngine.getReceivedMessages(); - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - } - } - - /** - * Restore to the previous configurations when the message content test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSecurityTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSecurityTestCase.java deleted file mode 100644 index 678fc63e..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSecurityTestCase.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Factory; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.Tenant; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.operations.mqtt.blocking.MQTTBlockingPublisherClient; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; -import java.util.List; - - -/** - * Includes test cases to verify MQTT security. Following test cases will run all modes in {@link TestUserMode} - */ -public class BasicSecurityTestCase extends MBIntegrationBaseTest { - - private static final Log log = LogFactory.getLog(BasicSecurityTestCase.class); - - /** - * The current test user mode - */ - private TestUserMode userMode; - - - /** - * Instantiates the testcase class with specified user mode - * @param userMode supplied user mode ( by data provider) - */ - @Factory(dataProvider = "userModeProvider") - public BasicSecurityTestCase(TestUserMode userMode){ - - this.userMode = userMode; - - } - - /** - * Initialize super class. - * @throws XPathExpressionException - * - * @throws Exception - */ - @BeforeClass(alwaysRun = true) - public void prepare() throws XPathExpressionException { - super.init(userMode); - } - - /** - * Try to connect to MB using a invalid user name and a password for in - * super user mode and another modes specified in - * {@link BasicSecurityTestCase#userModeProvider()}. - * - * @throws MqttException this is expected only if it's due to a bad user name or a password - * @throws XPathExpressionException if test frame work can't read the configurations. - */ - @Test(groups = { "wso2.mb", "mqtt" }, description = "Try to connect to MB using a invalid user name and a password", - expectedExceptions = MqttException.class, expectedExceptionsMessageRegExp = ".*Bad user name or password.*") - public void performInvalidUserCredentialsTestCase() throws MqttException, XPathExpressionException { - String topic = "InvalidUserCredentialsTestCase:" + userMode.name(); - int inValidNumberOfMessages = 1; // we don't really expect to send - // messages. - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = - mqttClientEngine.getConfigurations(automationContext); - - String invalidUserName = "invalidUserName"; - Tenant currentTenant = automationContext.getContextTenant(); - - if ( automationContext.getSuperTenant().getDomain().equals(currentTenant.getDomain())){ - invalidUserName = invalidUserName + "@" + currentTenant.getDomain(); - } - - configuration.setBrokerUserName(invalidUserName); - configuration.setBrokerPassword("invalidPassword"); - - new MQTTBlockingPublisherClient(configuration, mqttClientEngine.generateClientID(), topic, - QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, inValidNumberOfMessages); - - } - - - /** - * Send a single mqtt message on qos {@link QualityOfService#LEAST_ONCE} and - * receive it. However testcase will be run for all user modes specified in - * {@link BasicSecurityTestCase#userModeProvider()} - * - * @throws MqttException if an error occurs - * @throws XPathExpressionException if test frame work can't read the configurations. - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt message send receive test case with non admin user, super tenant") - public void performBasicSendReceiveTestCaseWithNonAdminCredentials() throws MqttException, XPathExpressionException { - String topic = "BasicSendReceiveTestCaseWithNonAdminCredentials:" + userMode.name(); - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = - mqttClientEngine.getConfigurations(automationContext); - - Tenant tenant = automationContext.getContextTenant(); - topic = tenant.getDomain() + "/" + topic; - User user = tenant.getContextUser(); - configuration.setBrokerUserName(user.getUserName()); - configuration.setBrokerPassword(user.getPassword()); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.LEAST_ONCE, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, configuration); - - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, configuration); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - @DataProvider - private static TestUserMode[][] userModeProvider() { - return new TestUserMode[][] { new TestUserMode[]{TestUserMode.SUPER_TENANT_ADMIN}, - new TestUserMode[]{TestUserMode.SUPER_TENANT_USER}, - new TestUserMode[]{TestUserMode.TENANT_ADMIN}, - new TestUserMode[]{TestUserMode.TENANT_USER},}; - } - - - - -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSendCompressReceiveTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSendCompressReceiveTestCase.java deleted file mode 100644 index 13f912dd..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSendCompressReceiveTestCase.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.util.List; -import java.util.Random; - -/** - * This class contains tests for MQTT message content validity, with compression. - */ -public class BasicSendCompressReceiveTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set allowCompression to true so that broker will compress messages before storing into the database, and - * reduce maximum content chunk size to 100 from default value (65500); to create more content chunks - * from compressed content, to check chunk data retrieval. - * - * @throws XPathExpressionException - * @throws java.io.IOException - * @throws org.apache.commons.configuration.ConfigurationException - * @throws org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, ConfigurationException, - AutomationUtilException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_ALLOW_COMPRESSION, "true"); - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_MAX_CONTENT_CHUNK_SIZE, "100"); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Send a single mqtt message on qos {@link QualityOfService#LEAST_ONCE} and receive. - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt message send compress receive test case") - public void performBasicSendCompressReceiveTestCase() throws MqttException, XPathExpressionException, - IOException { - - String topic = "BasicSendCompressReceiveTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - //Input file size is 256KB - int messageSize = 250 * 1024; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - //create the subscribers - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.LEAST_ONCE, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, automationContext); - - byte[] payload = new byte[messageSize]; - new Random().nextBytes(payload); - - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, payload, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - Assert.assertEquals(receivedMessages.get(0).getPayload(), payload, "The received message is incorrect"); - } - - /** - * Restore to the previous configurations when the message content compression test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSendReceiveTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSendReceiveTestCase.java deleted file mode 100644 index 4debfb2e..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/BasicSendReceiveTestCase.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.apache.commons.configuration.ConfigurationException; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.util.List; - -/** - * Verifies basic mqtt message transactions are functional. - *

- * Send a single mqtt messages on qos 1 and receive. - * Send 100 messages on qos 1 and receive them. - */ -public class BasicSendReceiveTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Set allowCompression to false, so that broker won't compress messages - * - * @throws XPathExpressionException - * @throws java.io.IOException - * @throws org.apache.commons.configuration.ConfigurationException - * @throws org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException - */ - @BeforeClass - public void setupConfiguration() throws XPathExpressionException, IOException, ConfigurationException, - AutomationUtilException { - - super.serverManager = new ServerConfigurationManager(automationContext); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration.PERFORMANCE_TUNING_ALLOW_COMPRESSION, "false"); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Send a single mqtt message on qos {@link QualityOfService#LEAST_ONCE} and receive. - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt message send receive test case") - public void performBasicSendReceiveTestCase() throws MqttException, XPathExpressionException { - String topic = "BasicSendReceiveTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - //create the subscribers - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.LEAST_ONCE, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - /** - * Send 100 mqtt message on qos {@link QualityOfService#LEAST_ONCE} and receive them. - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt message send receive test case") - public void performBasicSendReceiveMultipleMessagesTestCase() - throws MqttException, XPathExpressionException { - String topic = "BasicSendReceiveMultipleMessagesTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 100; - boolean saveMessages = false; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - //create the subscribers - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.LEAST_ONCE, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(mqttClientEngine.getReceivedMessageCount(), noOfMessages, - "The received message count is incorrect."); - - } - - /** - * Restore to the previous configurations when the message content test is complete. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass - public void tearDown() throws IOException, AutomationUtilException { - super.serverManager.restoreToLastConfiguration(true); - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/CleanSessionTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/CleanSessionTestCase.java deleted file mode 100644 index e334b01d..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/CleanSessionTestCase.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.mb.integration.tests.mqtt.DataProvider.QualityOfServiceDataProvider; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Verify MQTT clean session option by sending messages with clean session = false - * and disconnecting the subscriber. - */ -public class CleanSessionTestCase extends MBIntegrationBaseTest { - - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * 1. Subscribe to a topic with given Quality of Service setting clean session to false. - * 2. Close the subscriber without unsubscribing. - * 3. Publish 3 messages to the same topic one from each QOS level. - * 3. Resubscribe with the same settings. - * 4. Verify that two messages have been received which were published when client was disconnected which belongs - * to qos 1 and 2. - * - * @param qualityOfService The Quality of Service of the subscriber - */ - @Test(groups = {"wso2.mb", "mqtt"}, dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void performCleanSessionTestCase(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException { - int noOfMessagesPerQos = 1; - int noOfPublishersPerQos = 1; - int expectedCount = noOfMessagesPerQos * 2; // Only qos 1 and 2 messages are expected - - // QOS 0 subscribers shouldn't receive messages after re-connect. - if(qualityOfService == QualityOfService.MOST_ONCE) { - expectedCount = 0; - } - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topic = "CleanSessionTestCase" + qualityOfService.getValue(); - - MQTTClientConnectionConfiguration configuration = mqttClientEngine.getConfigurations(automationContext); - configuration.setCleanSession(false); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(configuration, topic, qualityOfService, false, ClientMode.BLOCKING); - - mqttClientEngine.shutdown(); - - // Directly get the 0'th value from the list since we only subscribed one subscriber - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - // Disconnect the subscriber - subscriber.disconnect(); - - // Publish qos 0 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, noOfMessagesPerQos, ClientMode.BLOCKING, - automationContext); - - // Publish qos 1 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, noOfMessagesPerQos, ClientMode.BLOCKING, - automationContext); - - // Publish qos 2 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, noOfMessagesPerQos, ClientMode.BLOCKING, - automationContext); - - - // Re connect the subscriber and subscribe to the same topic - subscriber.connect(); - subscriber.subscribe(); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), expectedCount, "Incorrect number of messages were " + - "received after reconnecting the subscriber"); - } - - /** - * 1. Subscribe to a topic with given Quality of Service setting clean session to false. - * 2. Close the subscriber - * 3. Un-subscribe from the relevant topic - * 3. Publish 3 messages to the same topic one from each QOS level. - * 3. Resubscribe with the same settings. - * 4. Verify that the messages which were sent had not being consumed - * - * @param qualityOfService The Quality of Service of the subscriber - */ - @Test(groups = {"wso2.mb", "mqtt"}, dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void performCleanSessionWithUnSubscriptionTestCase(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException { - int noOfMessagesPerQos = 1; - int noOfPublishersPerQos = 1; - // Only qos 1 and 2 messages are expected, always we should not expect to receive - // messages after un-subscribing - int expectedCount = 0; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topic = "CleanSessionWithUnSubscriptionTestCase" + qualityOfService.getValue(); - - MQTTClientConnectionConfiguration configuration = mqttClientEngine.getConfigurations(automationContext); - configuration.setCleanSession(false); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(configuration, topic, qualityOfService, false, ClientMode.BLOCKING); - - // Directly get the 0'th value from the list since we only subscribed one subscriber - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - //Will unsubscribe - subscriber.unsubscribe(); - // Disconnect the subscriber - subscriber.disconnect(); - - //Will shut-down any connected client - mqttClientEngine.shutdown(); - - // Publish qos 0 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, noOfMessagesPerQos, ClientMode.BLOCKING, - automationContext); - - // Publish qos 1 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, noOfMessagesPerQos, ClientMode.BLOCKING, - automationContext); - - // Publish qos 2 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, noOfMessagesPerQos, ClientMode.BLOCKING, - automationContext); - - - // Re connect the subscriber and subscribe to the same topic - subscriber.connect(); - subscriber.subscribe(); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), expectedCount, "Incorrect number of messages were " + - "received after connecting to the subscriber"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/ClientReconnectTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/ClientReconnectTestCase.java deleted file mode 100644 index 73adaa4f..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/ClientReconnectTestCase.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.*; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Check for client reconnect scenarios. - */ -public class ClientReconnectTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Check client reconnect scenario. - * - * 1. Subscribe to a topic. - * 2. Publish 10 messages. - * 3. Verify 10 messages are received. - * 4. Disconnect subscriber. - * 5. Reconnect subscriber and re-subscribe to the same topic. - * 6. Publish 10 messages. - * 7. Verify 10 more messages are received. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test - public void performClientReconnectTest() throws MqttException, XPathExpressionException { - String topicName = "clientReconnectTest"; - int noOfMessages = 10; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topicName, QualityOfService.MOST_ONCE, 1, false, - ClientMode.BLOCKING, automationContext); - - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - mqttClientEngine.createPublisherConnection(topicName, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, noOfMessages, ClientMode.ASYNC, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), noOfMessages, "Did not receive excepted message " + - "count before disconnecting"); - - // Reconnect subscriber - subscriber.disconnect(); - subscriber.connect(); - subscriber.subscribe(); - - mqttClientEngine.createPublisherConnection(topicName, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, noOfMessages, ClientMode.ASYNC, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), noOfMessages * 2, "Did not recieve expected message" + - " count after reconnecting"); - - - - - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/DuplicateClientIDTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/DuplicateClientIDTestCase.java deleted file mode 100644 index f40dabb3..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/DuplicateClientIDTestCase.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.apache.commons.lang.RandomStringUtils; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.operations.mqtt.async.MQTTAsyncSubscriberClient; -import org.wso2.mb.integration.common.clients.operations.mqtt.blocking.MQTTBlockingSubscriberClient; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; -import java.util.List; -import java.util.concurrent.TimeUnit; - -/** - * Test case to validate the MQTT broker behaviour when connecting 2 clients with same client IDs. - * Expectation : client1 should be disconnected upon arrival of client2, and client2 should then be connected. - */ -public class DuplicateClientIDTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Validate the MQTT broker behaviour when connecting 2 clients with same client IDs. - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Send message and receive for a long topic hierarchy") - public void performDuplicateClientIDTestCase() throws MqttException, XPathExpressionException, InterruptedException { - - String dupClientID = "DUP_" + RandomStringUtils.random(MQTTConstants.CLIENT_ID_LENGTH - 4, String.valueOf(System - .currentTimeMillis())); - - String dupTopicName = "duplicateTopicA"; - - MQTTClientEngine mqttClientEngine = null; - - try { - - mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConfig = mqttClientEngine.getConfigurations(automationContext); - - mqttClientEngine.createSubscriberConnection(clientConfig, dupTopicName, QualityOfService.LEAST_ONCE, true, - ClientMode.ASYNC, dupClientID); - - TimeUnit.MILLISECONDS.sleep(MQTTConstants.CLIENT_CONNECT_TIMEOUT); - - Assert.assertTrue(mqttClientEngine.getSubscriberList().get(0).isConnected(), - "Client 1 has not yet connected, or has been disconnected."); - - mqttClientEngine.createSubscriberConnection(clientConfig, dupTopicName, QualityOfService.LEAST_ONCE, true, - ClientMode.ASYNC, dupClientID); - - TimeUnit.MILLISECONDS.sleep(MQTTConstants.CLIENT_CONNECT_TIMEOUT); - - Assert.assertFalse(mqttClientEngine.getSubscriberList().get(0).isConnected(), "Due to Client 2, client 1 should be disconnected, " + - "but it is not."); - - Assert.assertTrue(mqttClientEngine.getSubscriberList().get(1).isConnected(), "Client 2 has not yet connected, or has been disconnected."); - - } finally { - if (null != mqttClientEngine) { - mqttClientEngine.shutdown(); - log.info("clients are disconnected"); - } - } - - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/LongTopicTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/LongTopicTestCase.java deleted file mode 100644 index 44a51a1a..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/LongTopicTestCase.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; -import java.util.List; - -/** - * Verifies message send/receive functionality within an extended topic hierarchy. - */ -public class LongTopicTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send message and receive for a long topic hierarchy. - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Send message and receive for a long topic hierarchy") - public void performLongTopicTestCase() throws MqttException, XPathExpressionException { - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - String longTopic = "1/2/3/this_is_a_long_topic_that_needs_to/work/4/5/6/7/8"; - - //create the subscribers - mqttClientEngine.createSubscriberConnection(longTopic, QualityOfService.LEAST_ONCE, 1, true, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(longTopic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, 1, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), 1, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/PermissionTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/PermissionTestCase.java deleted file mode 100644 index 62690dbf..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/PermissionTestCase.java +++ /dev/null @@ -1,205 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.integration.tests.mqtt.functional; - - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; -import java.util.List; - -/** - * The following test cases are related to permissions of users and tenant domains. - */ -public class PermissionTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Publishes and subscribes from admin in carbon.super domain. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}) - public void performAdminPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, FrameworkConstants.SUPER_TENANT_ADMIN, "admin-topic"); - } - - /** - * Publishes and subscribes from a user in carbon.user domain. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}) - public void performUserPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, "user1", "user-topic"); - } - - /** - * Publishes and subscribes from admin in carbon.super domain. - * Publishes and subscribes from a user in carbon.user domain to the same topic. - * Exception should occur. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}, expectedExceptions = MqttException.class) - public void performAdminAndUserPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, FrameworkConstants.SUPER_TENANT_ADMIN, "user-admin-topic"); - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, "user1", "user-admin-topic"); - } - - /** - * Publishes and subscribes from admin in a tenant(testtenant1.com") domain. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}) - public void performTenantAdminPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase("tenant1", "admin", "tenant-admin-topic"); - } - - /** - * Publishes and subscribes from a user in a tenant(testtenant1.com") domain. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}) - public void performTenantUserPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase("tenant1", "tenant1user1", "tenant-user-topic"); - } - - /** - * Publishes and subscribes from admin in a tenant(testtenant1.com") domain. - * Publishes and subscribes from a user in a tenant(testtenant1.com") domain to the same topic. - * Exception should occur. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}, expectedExceptions = MqttException.class) - public void performTenantAdminAndUserPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase("tenant1", "admin", "tenant-user-admin-topic"); - runTestCase("tenant1", "tenant1user1", "tenant-user-admin-topic"); - } - - /** - * Publishes and subscribes from admin in carbon.super domain. - * Publishes and subscribes from admin in a tenant(testtenant1.com") domain to the same topic. - * Exception should occur. - * Redo the same test by changing the order. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}, expectedExceptions = MqttException.class) - public void performDomainAcrossAdminPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, FrameworkConstants.SUPER_TENANT_ADMIN, "cross-admin-topic-1"); - runTestCase("tenant1", "admin", "cross-admin-topic-1"); - - runTestCase("tenant1", "admin", "cross-admin-topic-2"); - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, FrameworkConstants.SUPER_TENANT_ADMIN, "cross-admin-topic-2"); - } - - /** - * Publishes and subscribes from a user in carbon.super domain. - * Publishes and subscribes from a user in a tenant(testtenant1.com") domain to the same topic. - * Exception should occur. - * Redo the same test by changing the order. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}, expectedExceptions = MqttException.class) - public void performDomainAcrossUserPermissionTestCase() throws MqttException, XPathExpressionException { - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, "user1", "cross-user-topic-1"); - runTestCase("tenant1", "tenant1user1", "cross-user-topic-1"); - - runTestCase("tenant1", "tenant1user1", "cross-user-topic-2"); - runTestCase(FrameworkConstants.SUPER_TENANT_KEY, "user1", "cross-user-topic-1"); - - } - - /** - * Publishes and receives mqtt messages from a user of a tenant group to a destination. - * - * @param tenantDomainKey The tenant domain key of the user. Refers to the key in automation.xml - * @param userKey The user's key in automation.xml - * @param destinationName The topic destination. - * @throws MqttException - * @throws XPathExpressionException - */ - public void runTestCase(String tenantDomainKey, String userKey, String destinationName) throws MqttException, - XPathExpressionException { - - // Get user's automation context. - AutomationContext userAutomationContext = new AutomationContext("MB", "mb001", tenantDomainKey, userKey); - User contextUser = userAutomationContext.getContextTenant().getContextUser(); - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - // Setting username and password for the client. - MQTTClientConnectionConfiguration mqttClientConnectionConfiguration = - mqttClientEngine.getConfigurations(userAutomationContext); - mqttClientConnectionConfiguration.setBrokerUserName(contextUser.getUserName()); - mqttClientConnectionConfiguration.setBrokerPassword(contextUser.getPassword()); - - // Creating subscribers - mqttClientEngine.createSubscriberConnection(destinationName, QualityOfService.LEAST_ONCE, 1, true, - ClientMode.BLOCKING, mqttClientConnectionConfiguration); - - // Creating publishers - mqttClientEngine.createPublisherConnection(destinationName, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, 10, ClientMode.BLOCKING, mqttClientConnectionConfiguration); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - // Evaluating - Assert.assertEquals(receivedMessages.size(), 10, "The received message count is incorrect."); - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, "The received " + - "message is incorrect"); - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/QOSTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/QOSTestCase.java deleted file mode 100644 index 7404c913..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/QOSTestCase.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.mb.integration.tests.mqtt.DataProvider.QualityOfServiceDataProvider; - -import javax.xml.xpath.XPathExpressionException; -import java.util.List; - -/** - * Check for basic publish/subscribe on QOS 0,1 and 2. - */ -public class QOSTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send a message and receive in QOS {@link QualityOfService#MOST_ONCE}, {@link QualityOfService#LEAST_ONCE} and - * {@link QualityOfService#EXACTLY_ONCE}. - * - * @param qualityOfService The Quality of service to test - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Send message and receive in QOS 0", - dataProvider = "QualityOfServiceDataProvider", dataProviderClass = QualityOfServiceDataProvider.class) - public void performQOS0TestCase(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException { - String topicName = "QOSTestCase" + qualityOfService.getValue(); - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topicName, qualityOfService, noOfSubscribers, true, - ClientMode.ASYNC, automationContext); - - mqttClientEngine.createPublisherConnection(topicName, qualityOfService, MQTTConstants.TEMPLATE_PAYLOAD, - noOfPublishers, noOfMessages, ClientMode.ASYNC, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/RetainTopicTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/RetainTopicTestCase.java deleted file mode 100644 index c1e8b163..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/RetainTopicTestCase.java +++ /dev/null @@ -1,242 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.ClientMode; - -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - - -import javax.xml.xpath.XPathExpressionException; -import java.util.List; - -/** - * - * This test case will verify functionality of MQTT retain feature. Retain feature will keep last - * retain enabled message from publisher, for future subscribers. - * - */ -public class RetainTopicTestCase extends MBIntegrationBaseTest { - - - - /** - * Initialize super class. - * - * @throws XPathExpressionException - */ - @BeforeClass - public void prepare() throws XPathExpressionException { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send a single mqtt message with retain enabled and receive. - * - * @throws org.eclipse.paho.client.mqttv3.MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt retain message send receive test case") - public void performSendReceiveRetainTopicTestCase() - throws MqttException, XPathExpressionException { - String topic = "SendReceiveRetainTopicTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - boolean retained = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = mqttClientEngine.getConfigurations(automationContext); - configuration.setRetain(retained); - - //create the subscriber to receive retain topic message - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.MOST_ONCE, noOfSubscribers, - saveMessages, ClientMode.BLOCKING, automationContext); - - // create publisher to publish retain topic message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, configuration); - - // wait until all messages received by subscriber and shut down clients. - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - // Verify received messages equals to send message count. - Assert.assertEquals(receivedMessages.size(), noOfMessages, - "The received message count is incorrect."); - - // Verify message payload has received correctly - Assert.assertEquals(receivedMessages.get(0).getPayload(), - MQTTConstants.TEMPLATE_PAYLOAD, "The received message is incorrect"); - - } - - - - /** - * Send and receive single mqtt message with retain enabled. Subscriber will subscribe - * after message been published. - * - * @throws org.eclipse.paho.client.mqttv3.MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt retain message send receive test case") - public void performSendReceiveRetainTopicForLateSubscriberTestCase() - throws MqttException, XPathExpressionException { - String topic = "SendReceiveRetainTopicForLateSubscriberTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - boolean retained = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = mqttClientEngine.getConfigurations(automationContext); - configuration.setRetain(retained); - - //First, create publisher and publish retain topic message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, configuration); - - - //Finally,create the subscriber to receive retain topic message - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.MOST_ONCE, noOfSubscribers, - saveMessages, ClientMode.BLOCKING, automationContext); - - // wait until all messages received by subscriber and shut down clients. - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - // Verify received messages equals to send message count. - Assert.assertEquals(receivedMessages.size(), noOfMessages, - "The received message count is incorrect."); - - // Verify message payload has received correctly - Assert.assertEquals(receivedMessages.get(0).getPayload(), - MQTTConstants.TEMPLATE_PAYLOAD, "The received message is incorrect"); - - } - - - /** - *

This test case will check if retain topic message will get deleted if it received retained - * enabled message with empty payload. This is the default way of removing a retained topic from - * broker as per MQTT specification v 3.1. - * - * Test scenario - * 1. Publish one retained topic message for 'topic2'. - * 2. Add one subscriber and verify if retained topic message getting received. - * 3. Publish retain topic message with empty payload for 'topic2'. This will delete retained - * entry for 'topic2' from broker. - * 4. Add new subscriber for 'topic2' and verify it's not receiving any retained messages from - * broker. - * - * @see - * http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/MQTT_V3.1_Protocol_Specific.pdf - * - * @throws org.eclipse.paho.client.mqttv3.MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Remove MQTT retain test case") - public void performRemoveRetainTopicTestCase() throws MqttException, XPathExpressionException { - String topic = "RemoveRetainTopicTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - boolean retained = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = mqttClientEngine.getConfigurations(automationContext); - // Set retain flag into configurations. - configuration.setRetain(retained); - - //Create publisher and publish retain topic message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, configuration); - - - //Create the subscriber to receive retain topic message - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.MOST_ONCE, noOfSubscribers, - saveMessages, ClientMode.BLOCKING, automationContext); - - - // wait until all messages received by subscriber. - mqttClientEngine.waitUntilExpectedNumberOfMessagesReceived(1,20000L); - - // shut down all clients. - mqttClientEngine.shutdown(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - // Verify received messages equals to send message count. - Assert.assertEquals(receivedMessages.size(), noOfMessages, - "The received message count is incorrect."); - - // Verify message payload has received correctly - Assert.assertEquals(receivedMessages.get(0).getPayload(), - MQTTConstants.TEMPLATE_PAYLOAD, "Received message payload is incorrect"); - - - - // new mqtt client engine has initialized to check if new subscriber gets retained message - // once it's been deleted by sending empty payload. Since need to reset message received - // counts, had to initialize a new mqtt client engine. - MQTTClientEngine mqttClientEngine1 = new MQTTClientEngine(); - - // Create new publisher and publish retain topic message with empty payload. This will delete - // retain entry for 'topic2'. - mqttClientEngine1.createPublisherConnection(topic, QualityOfService.MOST_ONCE, "".getBytes(), - noOfPublishers, noOfMessages, ClientMode.BLOCKING, - configuration); - - //Create the new subscriber to receive retain topic message. - mqttClientEngine1.createSubscriberConnection(topic, QualityOfService.MOST_ONCE, noOfSubscribers, - saveMessages, ClientMode.BLOCKING, automationContext); - - // wait until messages received by subscriber. - mqttClientEngine1.waitUntilExpectedNumberOfMessagesReceived(0,20000L); - - // shut down all clients. - mqttClientEngine1.shutdown(); - - receivedMessages = mqttClientEngine1.getReceivedMessages(); - - // Since there's no retain messages for 'topic2' on broker, subscriber won't receive - // any messages upon subscribe. - Assert.assertEquals(receivedMessages.size(), 0, "Received message count is incorrect."); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/SingleClientMultipleSubscriptionsTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/SingleClientMultipleSubscriptionsTestCase.java deleted file mode 100644 index fed5527a..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/SingleClientMultipleSubscriptionsTestCase.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.*; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Test case to verify subscribing to multiple topics with the same client. - */ -public class SingleClientMultipleSubscriptionsTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Subscribe to two topics with the same client and verify whether messages are received from both topics. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Subscribe to two topics with the same client id") - public void performSingleClientMultipleSubscriptionsTest() throws MqttException, XPathExpressionException { - String topic1 = "singleClientMultipleSubscriptions1"; - String topic2 = "singleClientMultipleSubscriptions2"; - int noOfMessages = 1; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - //create the subscriber - mqttClientEngine.createSubscriberConnection(topic1, QualityOfService.LEAST_ONCE, 1, false, - ClientMode.BLOCKING, automationContext); - - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - subscriber.subscribe(topic2); - - mqttClientEngine.createPublisherConnection(topic1, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, - noOfMessages, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(topic2, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, - noOfMessages, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(mqttClientEngine.getReceivedMessageCount(), noOfMessages * 2, - "Did not receive expected message count "); - - - } - - /** - * Check if a subscriber who subscribed to two topics with clean session false, receive messages to an inactive - * subscription when one subscription is inactive. - * - * 1. Create a topic with a subscriber with clean session false - * 2. Disconnect the subscriber (The subscription will be added to inactive sessions) - * 3. Add some messages to the created topic. (The messages will be persisted) - * 4. Using the same client ID create another topic. (With different topic name) - * 5. Publish some messages to the inactive topic. - * 6. Client should not receive any messages - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Subscribe to two topics with clean session false and make" - + "one subscription inactive") - public void performSameClientDifferentTopicsTest() throws XPathExpressionException, MqttException { - String topic1 = "SameClientDifferentTopics1"; - String topic2 = "SameClientDifferentTopic2"; - int noOfMessages = 1; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration mqttConfigs = mqttClientEngine.getConfigurations(automationContext); - - mqttConfigs.setCleanSession(false); - //create the subscriber - mqttClientEngine.createSubscriberConnection(topic1, QualityOfService.EXACTLY_ONCE, 1, false, - ClientMode.BLOCKING, mqttConfigs); - - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - subscriber.disconnect(); - - // Publish messages to the topic with inactive subscriber - mqttClientEngine.createPublisherConnection(topic1, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, - noOfMessages, ClientMode.BLOCKING, automationContext); - - // Re-connect and subscribe to a different topic - subscriber.connect(); - - subscriber.subscribe(topic2); - - // Publish messages to the topic with inactive subscriber - mqttClientEngine.createPublisherConnection(topic1, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, - noOfMessages, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(mqttClientEngine.getReceivedMessageCount(), 0, "Received messages in a different topic" - + "when no messages are expected"); - - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/WildcardTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/WildcardTestCase.java deleted file mode 100644 index bde42152..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/WildcardTestCase.java +++ /dev/null @@ -1,400 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.mb.integration.tests.mqtt.DataProvider.QualityOfServiceDataProvider; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Test different combinations of MQTT wildcards. - * - * 1. Test single level wildcard in different places of the topic hierarchy - * 2. Test multi level wildcard in different places of the topic hierarchy - * 3. Test combination of single level wild card and multi level wild card - */ -public class WildcardTestCase extends MBIntegrationBaseTest { - - private static final String multiLevelWildCard = "#"; - private static final String singleLevelWildCard = "+"; - - private static final int noOfPublisherThreads = 1; - private static final int noOfMessagesPerPublisher = 1; - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass(alwaysRun = true) - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Test multi level wildcard {@value WildcardTestCase#multiLevelWildCard}. - * 1. Subscribe to {@value WildcardTestCase#multiLevelWildCard} - * 2. Subscribe to multi/level/{@value WildcardTestCase#multiLevelWildCard} - * 3. Publish to multi/level/wild/card - * 4. Assert received messages - * 5. Publish to multi - * 6. Assert received messages - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test multi level wildcard") - public void performMultiLevelWildcardTestCase() throws MqttException, XPathExpressionException { - int noOfTopLevelSubscribers = 1; - int noOfMidLevelSubscribers = 1; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - // Creating Subscribers - - // Receive all the messages - mqttClientEngine.createSubscriberConnection(multiLevelWildCard, QualityOfService.LEAST_ONCE, - noOfTopLevelSubscribers, false, ClientMode.BLOCKING, automationContext); - - // Receive messages published to 'multi/level' and all it's sub levels - mqttClientEngine.createSubscriberConnection("multi/level/" + multiLevelWildCard, QualityOfService.LEAST_ONCE, - noOfMidLevelSubscribers, false, ClientMode.BLOCKING, automationContext); - - // Creating Publishers - - // Publish to 'multi/level/wild/card' - mqttClientEngine.createPublisherConnection("multi/level/wild/card", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - int receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - - int expectedMessageCount = noOfPublisherThreads * noOfMessagesPerPublisher * (noOfTopLevelSubscribers + - noOfMidLevelSubscribers); - - Assert.assertEquals(receivedMessageCount, expectedMessageCount, "Did not received expected message count " + - "after publishing to leaf level."); - - // Publish to 'multi' - mqttClientEngine.createPublisherConnection("multi", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - expectedMessageCount = expectedMessageCount + noOfPublisherThreads * noOfMessagesPerPublisher * - (noOfTopLevelSubscribers); - - Assert.assertEquals(receivedMessageCount, expectedMessageCount, "Did not received expected message count " + - "after publishing to top level."); - } - - /** - * Test single level wildcard {@value WildcardTestCase#singleLevelWildCard}. - * 1. Subscribe to {@value WildcardTestCase#singleLevelWildCard} - * 2. Subscribe to single/{@value WildcardTestCase#singleLevelWildCard} - * 3. Subscribe to single/level/{@value WildcardTestCase#singleLevelWildCard} - * 4. Publish to single - * 5. Assert received messages - * 6. Publish to single/level - * 7. Assert received messages - * 8. Publish to single/level/wildcard - * 9. Assert received messages - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test single level wildcard") - public void performSingleLevelWildcardTest() throws MqttException, XPathExpressionException { - int noOfTopLevelOnlySubscribers = 1; - int noOfMidLevelOnlySubscribers = 1; - int noOfLeafLevelOnlySubscribers = 1; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - // Creating Subscribers - - // Receive all the messages published to top nodes only - mqttClientEngine.createSubscriberConnection(singleLevelWildCard, QualityOfService.LEAST_ONCE, - noOfTopLevelOnlySubscribers, false, ClientMode.BLOCKING, automationContext); - - // Receive messages published to 'single/' and all it's sub levels - mqttClientEngine.createSubscriberConnection("single/" + singleLevelWildCard, - QualityOfService.LEAST_ONCE, - noOfMidLevelOnlySubscribers, false, ClientMode.BLOCKING, automationContext); - - // Receive messages published to 'single/level/' and all it's sub levels - mqttClientEngine.createSubscriberConnection("single/level/" + singleLevelWildCard, QualityOfService.LEAST_ONCE, - noOfLeafLevelOnlySubscribers, false, ClientMode.BLOCKING, automationContext); - - // Creating Publishers - - // Publish to 'single' - mqttClientEngine.createPublisherConnection("single", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - int receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - int expectedMessageCount = noOfPublisherThreads * noOfMessagesPerPublisher * (noOfTopLevelOnlySubscribers); - - Assert.assertEquals(receivedMessageCount, expectedMessageCount, "Did not received expected message count " + - "after publishing to top level."); - - // Publish to 'single/level' - mqttClientEngine.createPublisherConnection("single/level", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - expectedMessageCount = expectedMessageCount + noOfPublisherThreads * noOfMessagesPerPublisher * - (noOfMidLevelOnlySubscribers); - - Assert.assertEquals(receivedMessageCount, expectedMessageCount, "Did not received expected message count " + - "after publishing to mid level."); - - // Publish to 'single/level/wildcard' - mqttClientEngine.createPublisherConnection("single/level/wildcard", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - expectedMessageCount = expectedMessageCount + noOfPublisherThreads * noOfMessagesPerPublisher * - (noOfLeafLevelOnlySubscribers); - - Assert.assertEquals(receivedMessageCount, expectedMessageCount, "Did not received expected message count " + - "after publishing to leaf level."); - } - - /** - * Test single level and multi level wildcards in conjunction. - * 1. Subscribe to {@value WildcardTestCase#singleLevelWildCard}/{@value WildcardTestCase#multiLevelWildCard} - * 2. Subscribe to mixed/{@value WildcardTestCase#singleLevelWildCard}/wild/{@value WildcardTestCase#multiLevelWildCard} - * 3. Subscribe to {@value WildcardTestCase#singleLevelWildCard}/level/{@value WildcardTestCase#multiLevelWildCard} - * 4. Subscribe to mixed/level/{@value WildcardTestCase#singleLevelWildCard}/{@value WildcardTestCase#multiLevelWildCard} - * 5. Publish to mixed and assert received messages - * 6. Publish to mixed/level and assert received messages - * 7. Publish to mixed/level/wild/card and assert received messages - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test single level and multi level wildcards in conjunction", - enabled = false) - public void performMixWildcardTestCase() throws MqttException, XPathExpressionException { // Disabled due to MQTT Client not supporting - int noOfAllLevelSubscribers = 1; - int noOfMidAnySubscribers = 1; - int noOfStartWithAnySubscribers = 1; - int noOfAdjacentWildcardSubscribers = 1; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - // Creating Subscribers - - // Receive all the messages published - '+/#' - mqttClientEngine.createSubscriberConnection(singleLevelWildCard + "/" + multiLevelWildCard, - QualityOfService.LEAST_ONCE, noOfAllLevelSubscribers, false, ClientMode.BLOCKING, - automationContext); - - // Receive all the messages published to 'mixed//wild' and all it's sub topics - mqttClientEngine.createSubscriberConnection("mixed/" + singleLevelWildCard + "/wild/" + multiLevelWildCard, - QualityOfService.LEAST_ONCE, noOfMidAnySubscribers, false, ClientMode.BLOCKING, automationContext); - - // Receive all the messages published to '/level' and all it's sub topics - mqttClientEngine.createSubscriberConnection(singleLevelWildCard + "/level/" + multiLevelWildCard, - QualityOfService.LEAST_ONCE, noOfStartWithAnySubscribers, false, ClientMode.BLOCKING, - automationContext); - - // Receive all the messages published to sub trees of 'mixed/level' but not 'mixed/level' - mqttClientEngine.createSubscriberConnection("mixed/level/" + singleLevelWildCard + "/" + multiLevelWildCard, - QualityOfService.LEAST_ONCE, noOfAdjacentWildcardSubscribers, false, ClientMode.BLOCKING, - automationContext ); - - // Creating Publishers - - // Publish to 'mixed' - mqttClientEngine.createPublisherConnection("mixed", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - int receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - int expectedCount = noOfMessagesPerPublisher * noOfPublisherThreads * (noOfAllLevelSubscribers); - - Assert.assertEquals(receivedMessageCount, expectedCount, "Did not received expected message count after " + - "publishing to top level."); - - // Publish to 'mixed/level' - mqttClientEngine.createPublisherConnection("mixed/level", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - expectedCount = expectedCount + noOfMessagesPerPublisher * noOfPublisherThreads - * (noOfAllLevelSubscribers + noOfStartWithAnySubscribers); - - Assert.assertEquals(receivedMessageCount, expectedCount, "Did not received expected message count after " + - "publishing to two-level topic."); - - // Publish to 'mixed/level/wild/card' - mqttClientEngine.createPublisherConnection("mixed/level/wild/card", QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - receivedMessageCount = mqttClientEngine.getReceivedMessageCount(); - expectedCount = expectedCount + noOfMessagesPerPublisher * noOfPublisherThreads * (noOfAllLevelSubscribers + - noOfMidAnySubscribers + noOfStartWithAnySubscribers + noOfAdjacentWildcardSubscribers); - - Assert.assertEquals(receivedMessageCount, expectedCount, "Did not received expected message count after " + - "publishing to two-level topic."); - - } - - /** - * When a subscriber is subscribed to a wildcard destination, when a message is received check whether the - * topic name received with the message is the message published non-wildcard destination, not the subscribed - * wildcard destination. - * - * @param qualityOfService The quality of service level - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test a non wildcard topic name is received from subscriber", - dataProvider = "QualityOfServiceDataProvider", dataProviderClass = QualityOfServiceDataProvider.class) - public void performReceivedTopicWildCardTest(QualityOfService qualityOfService) throws MqttException, - XPathExpressionException { - - String topTopicTree = "wild/card/"; - String leafTopic = "topic"; - - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - mqttClientEngine.createSubscriberConnection(topTopicTree + singleLevelWildCard, qualityOfService, 1, true, - ClientMode.BLOCKING, automationContext); - - - - mqttClientEngine.createPublisherConnection(topTopicTree + leafTopic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublisherThreads, - noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - String lastTopicReceived = mqttClientEngine.getSubscriberList().get(0).getCallbackHandler().getLastTopicReceived(); - - Assert.assertEquals(lastTopicReceived, (topTopicTree + leafTopic), "Did not received the expected topic name"); - - - - } - - /** - * Test multiple connections with the same client. - * - * 1. Subscribe to 4 topics (1/2/3, a/+/#, x/y/#, #) from same client. - * 2. Publish to topic 1/2/3. - * 3. Verify two messages are received. - * 4. Unsubscribe a/+/# and #. - * 5. Publish to a/b/c. - * 6. Verify no messages are received. - * 7. Publish to 1/2/3. - * 8. Verify 1 messages is received. - * - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Test multiple connections with the same client") - public void performMultipleWildCardSubscriptionsTest() throws MqttException, XPathExpressionException { - - String topic1 = "1/2/3"; - String topic2 = "a/+/#"; - String topic3 = "x/y/#"; - String topic4 = "#"; - - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - // Create first subscription - mqttClientEngine.createSubscriberConnection(topic1, QualityOfService.MOST_ONCE, 1, true, - ClientMode.BLOCKING, automationContext); - - // Retrieve the subscription object to subscribe to other topics - AndesMQTTClient mqttClient = mqttClientEngine.getSubscriberList().get(0); - - mqttClient.subscribe(topic2); - mqttClient.subscribe(topic3); - mqttClient.subscribe(topic4); - - // Publish to 1/2/3 - mqttClientEngine.createPublisherConnection(topic1, QualityOfService.MOST_ONCE, MQTTConstants.TEMPLATE_PAYLOAD, - noOfPublisherThreads, noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - int expectedCount = noOfPublisherThreads * noOfMessagesPerPublisher * 2; - - mqttClientEngine.waitUntilAllMessageReceived(); - - // Verify message count - Assert.assertEquals(mqttClient.getReceivedMessageCount(), expectedCount, "Did not receive expected message" - + " count after first publishing to 1/2/3"); - - // Unsubscribe a/+/# and # - mqttClient.unsubscribe(topic2); - mqttClient.unsubscribe(topic4); - - // Publish to a/b/c - mqttClientEngine.createPublisherConnection("a/b/c", QualityOfService.MOST_ONCE, MQTTConstants.TEMPLATE_PAYLOAD, - noOfPublisherThreads, noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - - // Expected count should not increase since no messages should be received - - Assert.assertEquals(mqttClient.getReceivedMessageCount(), expectedCount, "Messges received after publishing" - + " to a/b/c when no messages should be received."); - - // Publish to 1/2/3 again - mqttClientEngine.createPublisherConnection(topic1, QualityOfService.MOST_ONCE, MQTTConstants.TEMPLATE_PAYLOAD, - noOfPublisherThreads, noOfMessagesPerPublisher, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceived(); - - expectedCount = expectedCount + noOfPublisherThreads * noOfMessagesPerPublisher; - - // Verify client received the messages published to 1/2/3 - - Assert.assertEquals(mqttClient.getReceivedMessageCount(), expectedCount, "Did not receive expected message" - + " count after publishing to 1/2/3 for the second time."); - - // Close the connection - mqttClientEngine.shutdown(); - - } - - -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/util/RemoteAuthorizationManagerServiceClient.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/util/RemoteAuthorizationManagerServiceClient.java deleted file mode 100644 index 9626f3e7..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/util/RemoteAuthorizationManagerServiceClient.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.functional.util; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.um.ws.api.stub.RemoteAuthorizationManagerServiceStub; -import org.wso2.carbon.um.ws.api.stub.UserStoreExceptionException; - -import java.rmi.RemoteException; - -/** - * This is a utility class that is used to call the AuthorizationManagerService - */ -public class RemoteAuthorizationManagerServiceClient { - private static final Log log = LogFactory.getLog(RemoteAuthorizationManagerServiceClient.class); - private final String serviceName = "RemoteAuthorizationManagerService"; - private RemoteAuthorizationManagerServiceStub remoteAuthorizationManagerServiceStub; - - private String endPoint; - - /** - * Initialize the stub. - * @param backEndUrl URL of the back end service. - * @param sessionCookie sessionCookie of a logged in User - * @throws AxisFault throws when initialization fails - */ - public RemoteAuthorizationManagerServiceClient(String backEndUrl, String sessionCookie) throws AxisFault { - this.endPoint = backEndUrl + serviceName; - remoteAuthorizationManagerServiceStub = new RemoteAuthorizationManagerServiceStub(endPoint); - long soTimeout = 5 * 60 * 1000; // Three minutes - ServiceClient client = remoteAuthorizationManagerServiceStub._getServiceClient(); - Options option = client.getOptions(); - option.setManageSession(true); - option.setTimeOutInMilliSeconds(soTimeout); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, sessionCookie); - } - - /** - * Call the internal stub to check whether the role is authorized with particular resource. - * @param roleName that needs to authorized. - * @param resourceId Permission String - * @param action Permission Action that relavant to the permission string - * @throws RemoteException thrown when remote invocation fails. - * @throws UserStoreExceptionException throws when any errors thrown on authorize role flow releavant to userstore impl. - */ - public void authorizeRole(String roleName, String resourceId, String action) throws RemoteException, - UserStoreExceptionException { - remoteAuthorizationManagerServiceStub.authorizeRole(roleName, resourceId, action); - } -} - diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/util/ResourceAdminServiceClient.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/util/ResourceAdminServiceClient.java deleted file mode 100644 index 33649dd6..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/functional/util/ResourceAdminServiceClient.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ -package org.wso2.mb.integration.tests.mqtt.functional.util; - -import org.apache.axis2.AxisFault; -import org.apache.axis2.client.Options; -import org.apache.axis2.client.ServiceClient; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.registry.resource.stub.ResourceAdminServiceExceptionException; -import org.wso2.carbon.registry.resource.stub.ResourceAdminServiceResourceServiceExceptionException; -import org.wso2.carbon.registry.resource.stub.ResourceAdminServiceStub; -import org.wso2.carbon.registry.resource.stub.beans.xsd.CollectionContentBean; -import org.wso2.carbon.registry.resource.stub.beans.xsd.ContentBean; -import org.wso2.carbon.registry.resource.stub.beans.xsd.MetadataBean; -import org.wso2.carbon.registry.resource.stub.beans.xsd.PermissionBean; -import org.wso2.carbon.registry.resource.stub.beans.xsd.VersionPath; -import org.wso2.carbon.registry.resource.stub.beans.xsd.VersionsBean; -import org.wso2.carbon.registry.resource.stub.common.xsd.ResourceData; - - -import javax.activation.DataHandler; -import java.rmi.RemoteException; - -/** - * This is a utility class that is used to call the RemoteAdminService. - */ -public class ResourceAdminServiceClient { - private static final Log log = LogFactory.getLog(ResourceAdminServiceClient.class); - - private final String serviceName = "ResourceAdminService"; - private ResourceAdminServiceStub resourceAdminServiceStub; - - /** - * Initialize the stub. - * @param serviceUrl URL of the back end service. - * @param sessionCookie sessionCookie of a logged in User - * @throws AxisFault throws when initialization fails - */ - public ResourceAdminServiceClient(String serviceUrl, String sessionCookie) throws AxisFault { - String endPoint = serviceUrl + serviceName; - resourceAdminServiceStub = new ResourceAdminServiceStub(endPoint); - long soTimeout = 5 * 60 * 1000; // Three minutes - ServiceClient client = resourceAdminServiceStub._getServiceClient(); - Options option = client.getOptions(); - option.setManageSession(true); - option.setTimeOutInMilliSeconds(soTimeout); - option.setProperty(org.apache.axis2.transport.http.HTTPConstants.COOKIE_STRING, sessionCookie); - } - - /** - * This is used to create a resource in registry. - * @param parentPath path that the collection needs to be created. - * @param collectionName name of the collection. - * @param mediaType media type of the resource. - * @param description description of the resource - * @return resource path. - * @throws ResourceAdminServiceExceptionException exception that thrown when there is a error occurs whilst adding the resource. - * @throws RemoteException thrown when remote invocation fails. - */ - public String addCollection(String parentPath, String collectionName, - String mediaType, String description) - throws ResourceAdminServiceExceptionException, RemoteException { - return resourceAdminServiceStub.addCollection(parentPath, collectionName, mediaType, description); - } - -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/MultiThreadedMQTTTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/MultiThreadedMQTTTestCase.java deleted file mode 100644 index e6b271c4..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/MultiThreadedMQTTTestCase.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.load; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Send and receive via multiple publisher and multiple subscribers. - */ -public class MultiThreadedMQTTTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send a large amount of messages and receive via multiple MQTT clients. - * - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Send a large amount of messages and receive via multiple MQTT " + - "clients") - public void performMultiThreadedMQTTTestCase() throws MqttException, XPathExpressionException { - String topicName = "MultiThreadedTopic"; - int sendCount = 100000; - int noOfPublishers = 10; - int noOfSubscribers = 10; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topicName, QualityOfService.MOST_ONCE, noOfSubscribers, false, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(topicName, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, sendCount / noOfPublishers, ClientMode.BLOCKING, - automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(mqttClientEngine.getSentMessageCount(), sendCount, "Published message count is incorrect."); - - - for (AndesMQTTClient subscriberClient : mqttClientEngine.getSubscriberList()) { - Assert.assertEquals(subscriberClient.getReceivedMessageCount(), sendCount, - "The received message count is incorrect for client " + subscriberClient.getMqttClientID()); - } - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/OneMBMessageTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/OneMBMessageTestCase.java deleted file mode 100644 index c17bf18a..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/OneMBMessageTestCase.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.mqtt.load; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.mb.integration.tests.mqtt.DataProvider.QualityOfServiceDataProvider; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; - -/** - * Test case that sends 10 1MB messages in MQTT protocol. - */ -public class OneMBMessageTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send and receive 1MB of message via QOS {@link QualityOfService#MOST_ONCE}, - * {@link QualityOfService#LEAST_ONCE} and {@link QualityOfService#EXACTLY_ONCE}. - * - * @param qualityOfService The Quality of service to test - * @throws MqttException - * @throws IOException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Send and receive large Message of 1 MB", - dataProvider = "QualityOfServiceDataProvider", dataProviderClass = QualityOfServiceDataProvider.class) - public void performOneMBLoadTestCase(QualityOfService qualityOfService) - throws MqttException, IOException, XPathExpressionException { - int sendCount = 10; - int noOfSubscribers = 1; - int noOfPublishers = 1; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topicName = "OneMBLoadTestTopic"; - - // Creating a file of 10MB - AndesClientUtils.createMockFile(AndesClientConstants.FILE_PATH_FOR_ONE_KB_SAMPLE_FILE, - AndesClientConstants.FILE_PATH_FOR_CREATING_A_NEW_FILE, 1024); - - byte[] oneMBBytes = Files.readAllBytes(Paths.get(AndesClientConstants.FILE_PATH_FOR_CREATING_A_NEW_FILE)); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topicName, qualityOfService, noOfSubscribers, false, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(topicName, qualityOfService, oneMBBytes, noOfPublishers, sendCount, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - for (MqttMessage mqttMessage : mqttClientEngine.getSubscriberList().get(0).getReceivedMessages()) { - Assert.assertEquals(mqttMessage.getPayload(), oneMBBytes, - "The received message is incorrect"); - } - } -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/QOSLoadTestCase.java b/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/QOSLoadTestCase.java deleted file mode 100644 index e9638b1a..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/java/org/wso2/mb/integration/tests/mqtt/load/QOSLoadTestCase.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.mqtt.load; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; -import org.wso2.mb.integration.tests.mqtt.DataProvider.QualityOfServiceDataProvider; - -import javax.xml.xpath.XPathExpressionException; - -/** - * Send a large number of message via multiple MQTT clients for each QOS level. - */ -public class QOSLoadTestCase extends MBIntegrationBaseTest { - - /** - * Initialize super class. - * - * @throws Exception - */ - @BeforeClass - public void prepare() throws Exception { - super.init(TestUserMode.SUPER_TENANT_USER); - } - - /** - * Send and receive large number of message via QOS {@link QualityOfService#MOST_ONCE}, - * {@link QualityOfService#LEAST_ONCE} and {@link QualityOfService#EXACTLY_ONCE}. - * - * @param qualityOfService The Quality of service to test - * @throws MqttException - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Send and receive large number of message via QOS 0", - dataProvider = "QualityOfServiceDataProvider", dataProviderClass = QualityOfServiceDataProvider.class) - public void performQOS0LoadTestCase(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException { - int sendCount = 100000; - int noOfSubscribers = 10; - int noOfPublishers = 10; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topicName = "QOS0LoadTestTopic"; - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topicName, qualityOfService, noOfSubscribers, false, - ClientMode.BLOCKING, automationContext); - - mqttClientEngine.createPublisherConnection(topicName, qualityOfService, MQTTConstants.TEMPLATE_PAYLOAD, - noOfPublishers, sendCount / noOfPublishers, ClientMode.BLOCKING, automationContext); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - for (AndesMQTTClient subscriberClient : mqttClientEngine.getSubscriberList()) { - Assert.assertEquals(subscriberClient.getReceivedMessageCount(), sendCount, - "The received message count is incorrect for client " + subscriberClient.getMqttClientID()); - } - } - -} diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/automation.xml b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/automation.xml deleted file mode 100644 index 87949d68..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/automation.xml +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - - - - 60000 - - standalone - - false - - true - - false - - - - - - - http://10.100.2.51:4444/wd/hub/ - - - - firefox - - /home/test/name/webDriver - - - - - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - - - - - keystores/products/wso2carbon.jks - - JKS - - wso2carbon - - wso2carbon - - wso2carbon - - - - - client-truststore.jks - - JKS - - wso2carbon - - - - - - https://wso2.org/repo - file:///home/krishantha/test - - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - admin - admin - - - - - tenant1user1 - tenant1user1 - - - - - - - admin - admin - - - - - tenant2user1 - tenant2user1 - - - - - - - - - - - - - localhost - - - 11063 - 10743 - 3183 - 10183 - - - - - - - - - - - - - - - org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension - - - - - org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/automationXMLSchema.xsd b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/automationXMLSchema.xsd deleted file mode 100644 index e25a25fc..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/automationXMLSchema.xsd +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - ================================================= - Parameters ================================================= - Browser type with used by framework to execute UI test, supported types - - chrome|firefox|opera|ie|htmlUnit - - - - - - - Change this to edit wait time for test - artifact deployment - - - - - - Change this to product|platform/cloud to - execute test on specific environment - - - - - - - Change this to true if you want to generate - coverage statistics - - - - - - Change this to true if you want to enable - framework dashboard - - - - - - - - - - - - - - - Change to enable remote webDriver - URL of remote webDriver server - - - - - - - - - - - - - Type of the browser selenium tests - are running" - - - - - - - - path to webDriver - executable - required only for - chrome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KeyStore which will be used for - encrypting/decrypting passwords - and other sensitive information. - - - - - - - Keystore file location - - - - - - Keystore type (JKS/PKCS12 etc.) - - - - - - Keystore password - - - - - - Private Key alias - - - - - - Private Key password - - - - - - - - - - System wide trust-store which is used to - maintain the certificates of all - the trusted parties. - - - - - - - trust-store file location - - - - - - trust-store type (JKS/PKCS12 - etc.) - - - - - - trust-store password - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/axis2config/axis2_client.xml b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/axis2config/axis2_client.xml deleted file mode 100644 index a8b584d0..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/axis2config/axis2_client.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - - true - false - false - - - 500 - - 15000 - - - false - - - - true - - - - - - false - - - admin - axis2 - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6071 - - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 - chunked - 60000 - 60000 - - - HTTP/1.1 - chunked - 60000 - 60000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar deleted file mode 100644 index d28b3a08..00000000 Binary files a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar deleted file mode 100644 index 5903cc4b..00000000 Binary files a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/filters.txt b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/filters.txt deleted file mode 100644 index 04aa6cb7..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/filters.txt +++ /dev/null @@ -1,17 +0,0 @@ --*.stub* --*.stub_ --*.stub_4.0.0 --*.stub- --org.eclipse.* --*.equinox.* --org.wso2.carbon.user.core.* --samples.* --*.log4j* --*.axis2* --*.ui* --*.tenant* --*.stratos* --*.eventing* --*tests-transports* --org.wso2.carbon.mediation.statistics* --*startup* \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/instrumentation.txt b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/instrumentation.txt deleted file mode 100644 index 12af5f28..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/instrumentation.txt +++ /dev/null @@ -1,2 +0,0 @@ -org.wso2.carbon.andes* -org.dna* diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/keystores/products/client-truststore.jks b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/keystores/products/client-truststore.jks deleted file mode 100644 index cd16dd7e..00000000 Binary files a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/keystores/products/client-truststore.jks and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/keystores/products/wso2carbon.jks b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/keystores/products/wso2carbon.jks deleted file mode 100644 index 7942c53c..00000000 Binary files a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/keystores/products/wso2carbon.jks and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/log4j.properties b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/log4j.properties deleted file mode 100644 index ab16cc56..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/log4j.properties +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# -# WSO2 Inc. licenses this file to you 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. -# - -# -# This is the log4j configuration file used by WSO2 Carbon -# -# IMPORTANT : Please do not remove or change the names of any -# of the Appenders defined here. The layout pattern & log file -# can be changed using the WSO2 Carbon Management Console, and those -# settings will override the settings in this file. -# - -log4j.rootLogger=INFO, console, Default - -log4j.logger.org.wso2=INFO -log4j.logger.org.apache.axis2.deployment.ModuleDeployer=WARN -#Automation file apender -log4j.appender.Default=org.apache.log4j.RollingFileAppender -log4j.appender.Default.File=logs/automation.log -log4j.appender.Default.Append=true -log4j.appender.Default.MaxFileSize=10MB -log4j.appender.Default.MaxBackupIndex=10 -log4j.appender.Default.layout=org.apache.log4j.PatternLayout -log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n - - -#Automation console apender -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/receivedMessages.txt b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/receivedMessages.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/sample/sample_1KB_msg.xml b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/sample/sample_1KB_msg.xml deleted file mode 100644 index bf5ff502..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/sample/sample_1KB_msg.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - BOOK_QTY - - 1.000 - - - - - - - - BOOK_QTY - - 1.000 - - - - - DZ - - DZN - - X - - - - - - NO - - NO - - X - - X - - - - - - BOOK_QTY - - 1.000 - - - - - DZ - - DZ22222221231231231231 - - X - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/testng-server-mgt.xml b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/testng-server-mgt.xml deleted file mode 100644 index 039c358e..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/testng-server-mgt.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/testng.xml b/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/testng.xml deleted file mode 100644 index 5e22d3c1..00000000 --- a/modules/broker/integration/tests-integration/tests-mqtt/src/test/resources/testng.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-server/pom.xml b/modules/broker/integration/tests-integration/tests-server/pom.xml deleted file mode 100644 index 82ee4c8f..00000000 --- a/modules/broker/integration/tests-integration/tests-server/pom.xml +++ /dev/null @@ -1,291 +0,0 @@ - - - - org.wso2.iot - org.wso2.iot.broker.integration.tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - MB Server Test Module - server-tests - jar - - - - - maven-surefire-plugin - false - 2.12.4 - - - -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m - false - - src/test/resources/testng-server-mgt.xml - src/test/resources/testng.xml - - - - - maven.test.haltafterfailure - false - - - carbon.zip - - ${basedir}/../../../distribution/target/wso2iot-broker-${product.wso2iot.broker.version}.zip - - - - framework.resource.location - - ${basedir}/src/test/resources/ - - - - usedefaultlisteners - false - - ${basedir}/target/security-verifier/ - ${basedir}/src/test/resources/instrumentation.txt - ${basedir}/src/test/resources/filters.txt - - ${basedir}/target - - - - maven-dependency-plugin - - - - copy-jacoco-dependencies - compile - - copy-dependencies - - - ${project.build.directory}/jacoco - jar - org.jacoco.agent - - - - - copy-secVerifier - compile - - copy-dependencies - - - ${basedir}/target/security-verifier - aar - SecVerifier - true - - - - - unpack-mar-jks - compile - - unpack - - - - - org.wso2.iot - wso2iot-broker - ${product.wso2iot.broker.version} - zip - true - ${basedir}/target/tobeCopied/ - **/*.jks,**/*.mar,**/axis2_client.xml - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.7.1 - - ${basedir}/target/report - server-test - - - - integration-test - - report-only - - - - - - - maven-resources-plugin - 2.6 - - - copy-resources-jks - compile - - copy-resources - - - ${basedir}/src/test/resources/keystores/products - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/resources/security/ - - - **/*.jks - - - - - - - copy-axis2files - compile - - copy-resources - - - ${basedir}/src/test/resources/axis2config - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/conf/axis2/ - - - **/*.xml - - - - - - - copy-resources-mar - compile - - copy-resources - - - ${basedir}/src/test/resources/client/modules - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/deployment/client/modules - - - **/*.mar - - - - - - - - - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - - - org.wso2.carbon.automation - org.wso2.carbon.automation.extensions - - - org.slf4j - slf4j-api - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.test.utils - - - org.slf4j - slf4j-api - - - - - org.wso2.iot - org.wso2.iot.broker.integration.common.utils - - - org.wso2.iot - org.wso2.iot.broker.integration.common.clients - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.extensions - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.tests - - - slf4j.wso2 - slf4j - - - org.testng - testng - - - org.apache.commons - commons-lang3 - - - org.jacoco - org.jacoco.agent - - - org.wso2.carbon.metrics - org.wso2.carbon.metrics.view.ui - - - org.wso2.carbon.metrics - org.wso2.carbon.metrics.data.service.stub - - - org.wso2.carbon.metrics - org.wso2.carbon.metrics.manager - - - org.wso2.carbon.metrics - org.wso2.carbon.metrics.impl - - - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/CarbonTestServerManager.java b/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/CarbonTestServerManager.java deleted file mode 100644 index e84fbf62..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/CarbonTestServerManager.java +++ /dev/null @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.server.mgt; - -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; -import org.wso2.carbon.automation.extensions.servers.carbonserver.TestServerManager; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.util.Map; - -/** - * This class contains the carbon server managing function for the automation framework. Can be used to startup or - * shutdown the server - */ -public class CarbonTestServerManager extends TestServerManager { - private String carbonHome; - - /** - * Initiates a carbon server using an {@link AutomationContext}. This does not starts up the server. - * - * @param context The automation context - * @throws XPathExpressionException - */ - public CarbonTestServerManager(AutomationContext context) throws XPathExpressionException { - super(context); - } - - /** - * Initiates a carbon server given the {@link AutomationContext}, product zip path and arguments. This does not - * starts up the server. - * - * @param context The automation context - * @param carbonZip The path to the product zip file. - * @param startupParameterMap Arguments for startup. - * @throws XPathExpressionException - */ - public CarbonTestServerManager(AutomationContext context, String carbonZip, Map startupParameterMap) - throws XPathExpressionException { - super(context, carbonZip, startupParameterMap); - } - - /** - * Initiates a carbon server using an {@link AutomationContext} and an offset value. - * - * @param context The automation context. - * @param portOffset The offset value for the carbon server of product ports. - * @throws XPathExpressionException - */ - public CarbonTestServerManager(AutomationContext context, int portOffset) throws XPathExpressionException { - super(context, portOffset); - } - - /** - * Starts up the carbon server. - * - * @return The absolute path of which the server pack is located. - * @throws IOException - * @throws AutomationFrameworkException - */ - public String startServer() throws IOException, AutomationFrameworkException, XPathExpressionException { - carbonHome = super.startServer(); - return carbonHome; - } - - /** - * Stops the carbon server. - * - * @throws AutomationFrameworkException - */ - public void stopServer() throws AutomationFrameworkException { - super.stopServer(); - } - - /** - * Gets the absolute path of which the carbon server pack is located. - * - * @return The path. - */ - public String getCarbonHome() { - return carbonHome; - } -} diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/LoginLogoutClient.java b/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/LoginLogoutClient.java deleted file mode 100644 index ed1b32b3..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/LoginLogoutClient.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.server.mgt; - - -import org.apache.axis2.AxisFault; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.integration.common.admin.client.AuthenticatorClient; -import java.rmi.RemoteException; - -/** - * A utility for logging into & logging out of Carbon servers - */ -public class LoginLogoutClient { - private static final Log log = LogFactory.getLog(LoginLogoutClient.class); - private String userName; - private String password; - - private AuthenticatorClient loginClient; - - public LoginLogoutClient(String backendURL,String userName,String password) throws AxisFault { - - this.userName=userName; - this.password = password; - this.loginClient = new AuthenticatorClient(backendURL); - } - - /** - * Log in to a Carbon server - * - * @return The session cookie on successful login - */ - public String login() throws RemoteException, LoginAuthenticationExceptionException { - return loginClient.login(userName, password, "localhost"); - - } - - /** - * Log out from carbon server - */ - public void logout() throws LogoutAuthenticationExceptionException, RemoteException { - loginClient.logOut(); - } -} - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/MBServerStartupTestCase.java b/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/MBServerStartupTestCase.java deleted file mode 100644 index 3e9da4f6..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/MBServerStartupTestCase.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.server.mgt; - -import org.wso2.carbon.integration.common.tests.ServerStartupBaseTest; - -public class MBServerStartupTestCase extends ServerStartupBaseTest{ -} diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/MetricsTestCase.java b/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/MetricsTestCase.java deleted file mode 100644 index e679a54c..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/MetricsTestCase.java +++ /dev/null @@ -1,468 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.server.mgt; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.metrics.MetricsConstants; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.metrics.common.MetricsConfigException; -import org.wso2.carbon.metrics.data.common.Metric; -import org.wso2.carbon.metrics.data.common.MetricAttribute; -import org.wso2.carbon.metrics.data.common.MetricList; -import org.wso2.carbon.metrics.data.common.MetricType; -import org.wso2.carbon.metrics.impl.MetricsLevelConfigException; -import org.wso2.carbon.metrics.manager.jmx.MetricManagerMXBean; -import org.wso2.carbon.metrics.view.ui.MetricDataWrapper; -import org.wso2.carbon.metrics.view.ui.MetricsViewClient; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationBaseTest; - -import javax.jms.JMSException; -import javax.management.*; -import javax.management.remote.JMXConnector; -import javax.management.remote.JMXConnectorFactory; -import javax.management.remote.JMXServiceURL; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.math.BigDecimal; -import java.net.MalformedURLException; -import java.rmi.RemoteException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -/** - * These test will validate metrics functionality in message broker. - * This class has 4 test cases. - * 1. Metrics reporting functionality test case - * 2. Validate queue subscribers count metric - * 3. Validate topic subscribers count metric - */ -public class MetricsTestCase extends MBIntegrationBaseTest { - - /** - * Session cookie is used maintain communication session with metrics view client - */ - private String sessionCookie; - - /** - * Initializing test case - * - * @throws XPathExpressionException - */ - @BeforeClass(alwaysRun = true) public void init() - throws XPathExpressionException, MalformedURLException, AutomationUtilException, - MetricsConfigException, MetricsLevelConfigException, RemoteException, - LoginAuthenticationExceptionException { - super.init(TestUserMode.SUPER_TENANT_USER); - - LoginLogoutClient loginLogoutClientForAdmin = - new LoginLogoutClient(super.automationContext); - sessionCookie = loginLogoutClientForAdmin.login(); - } - - - /** - * This test case will validate queue subscriber count metric. - * Steps - - * 1. Create 5 subscribers and start sending messages. - * 2. Report metric. - * 3. Validate metric. - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Queue subscribers count metric test case") - public void performQueueSubscriberCountTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, InterruptedException, AutomationUtilException, - XPathExpressionException, MalformedObjectNameException { - - long msgCount = 1000L; - int subscriberCount = 5; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueue"); - consumerConfig.setMaximumMessagesToReceived(msgCount * 2); - consumerConfig.setPrintsPerMessageCount(msgCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueue"); - publisherConfig.setNumberOfMessagesToSend(msgCount); - publisherConfig.setPrintsPerMessageCount(msgCount / 10L); - - // Creating subscribers - AndesClient consumerClient = null; - for (int i = 0; i < subscriberCount; i++) { - consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - } - - // Creating publishers - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Waiting for clients to start - Thread.sleep(5000); - long fromTime = System.currentTimeMillis(); - // Submit metrics data - invokeJMXReportOperation(); - - // Get metrics data from database - - MetricsViewClient metricsViewClient; - MetricList metricList = new MetricList(); - MetricDataWrapper metricData; - - metricsViewClient = new MetricsViewClient(sessionCookie, backendURL, null); - String source = metricsViewClient.getAllSources()[0]; - ArrayList metrics = new ArrayList<>(); - metrics.add(new Metric(MetricType.GAUGE, "org.wso2.mb.queue.subscribers.count", - "Total Queue Subscribers", MetricAttribute.VALUE, null)); - metricList.setMetric(metrics.toArray(new Metric[metrics.size()])); - metricData = - metricsViewClient.findLastMetrics(metricList, source, String.valueOf(fromTime)); - - // Stopping subscribers and publishers - consumerClient.stopClient(); - publisherClient.stopClient(); - - // Evaluating metrics data - Assert.assertEquals(metricData.getData()[0][1].intValue(), subscriberCount, - metricData.getData()[0][1].intValue() + " subscribers found."); - - } - - /** - * This test case will validate topic subscriber count metric. - * Steps - - * 1. Create 5 subscribers and start sending messages. - * 2. Report metric. - * 3. Validate metric. - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - * @throws InterruptedException - * @throws AutomationUtilException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", description = "Topic subscribers count metric test case") - public void performTopicSubscriberCountTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, InterruptedException, AutomationUtilException, - XPathExpressionException, MalformedObjectNameException { - - long msgCount = 1000L; - int subscriberCount = 5; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "singleTopic"); - consumerConfig.setMaximumMessagesToReceived(msgCount * 2); - consumerConfig.setPrintsPerMessageCount(msgCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "singleTopic"); - publisherConfig.setNumberOfMessagesToSend(msgCount); - publisherConfig.setPrintsPerMessageCount(msgCount / 10L); - - // Creating subscribers - AndesClient consumerClient = null; - for (int i = 0; i < subscriberCount; i++) { - consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - } - - // Creating publishers - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Waiting for clients to start - Thread.sleep(5000); - long fromTime = System.currentTimeMillis(); - // Submit metrics data - invokeJMXReportOperation(); - - // Get metrics data from database - - MetricsViewClient metricsViewClient; - MetricList metricList = new MetricList(); - MetricDataWrapper metricData; - - metricsViewClient = new MetricsViewClient(sessionCookie, backendURL, null); - String source = metricsViewClient.getAllSources()[0]; - ArrayList metrics = new ArrayList<>(); - metrics.add(new Metric(MetricType.GAUGE, "org.wso2.mb.topic.subscribers.count", - "Total Topic Subscribers", MetricAttribute.VALUE, null)); - metricList.setMetric(metrics.toArray(new Metric[metrics.size()])); - metricData = - metricsViewClient.findLastMetrics(metricList, source, String.valueOf(fromTime)); - - // Stopping subscribers and publishers - - consumerClient.stopClient(); - publisherClient.stopClient(); - - // Evaluating metrics data - - Assert.assertEquals(metricData.getData()[0][1].intValue(), subscriberCount, - metricData.getData()[0][1].intValue() + " subscribers found."); - - - } - - /** - * This test case will run through basic message life cycle and will check if the relevant - * metrics are reported. - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Metrics report test case") - public void performMetricsReportTestCase() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException, InterruptedException, MalformedObjectNameException, - XPathExpressionException { - long msgCount = 1000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueue"); - consumerConfig.setMaximumMessagesToReceived(msgCount * 2); - consumerConfig.setPrintsPerMessageCount(msgCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, "singleQueue"); - publisherConfig.setNumberOfMessagesToSend(msgCount); - publisherConfig.setPrintsPerMessageCount(msgCount / 10L); - - // Creating subscriber - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - // Creating publisher - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Waiting for clients to start - Thread.sleep(5000); - long fromTime = System.currentTimeMillis(); - // Submit metrics data - invokeJMXReportOperation(); - - // Get metrics data from database - - MetricsViewClient metricsViewClient; - MetricList metricList = new MetricList(); - MetricDataWrapper metricData; - - metricsViewClient = new MetricsViewClient(sessionCookie, backendURL, null); - String source = metricsViewClient.getAllSources()[0]; - ArrayList metrics = new ArrayList<>(); - - // Adding metrics to be retrieved from database - - // Disruptor metrics - - metrics.add(new Metric(MetricType.GAUGE, MetricsConstants.DISRUPTOR_INBOUND_RING, - "Total Messages in Inbound Disruptor", MetricAttribute.VALUE, - null)); - metrics.add(new Metric(MetricType.GAUGE, MetricsConstants.DISRUPTOR_MESSAGE_ACK, - "Total Acks in Inbound Disruptor", MetricAttribute.VALUE, null)); - metrics.add(new Metric(MetricType.GAUGE, MetricsConstants.DISRUPTOR_OUTBOUND_RING, - "Total Messages in Outbound Disruptor", MetricAttribute.VALUE, - null)); - - // Publisher and subscriber metrics - - metrics.add(new Metric(MetricType.GAUGE, MetricsConstants.QUEUE_SUBSCRIBERS, - "Total Queue Subscribers", MetricAttribute.VALUE, null)); - metrics.add(new Metric(MetricType.GAUGE, MetricsConstants.ACTIVE_CHANNELS, - "Total Channels", MetricAttribute.VALUE, null)); - - // Message and ack rate metrics - - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_RECEIVE_RATE, - "Received Messages Mean Rate", MetricAttribute.MEAN_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_RECEIVE_RATE, - "Received Messages Last Minute Rate", MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_RECEIVE_RATE, - "Received Messages Last 5 Minutes Rate", MetricAttribute.M5_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_RECEIVE_RATE, - "Received Messages Last 15 Minutes Rate", MetricAttribute.M15_RATE, null)); - - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_RECEIVE_RATE, - "Received Acknowledgements Mean Rate", MetricAttribute.MEAN_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_RECEIVE_RATE, - "Received Acknowledgements Last Minute Rate", MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_RECEIVE_RATE, - "Received Acknowledgements Last 5 Minutes Rate", MetricAttribute.M5_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_RECEIVE_RATE, - "Received Acknowledgements Last 15 Minutes Rate", MetricAttribute.M15_RATE, null)); - - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_SENT_RATE, "Sent Messages Mean Rate", - MetricAttribute.MEAN_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_SENT_RATE, - "Sent Messages Last Minute Rate", MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_SENT_RATE, - "Sent Messages Last 5 Minutes Rate", MetricAttribute.M5_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.MSG_SENT_RATE, - "Sent Messages Last 15 Minutes Rate", MetricAttribute.M15_RATE, null)); - - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_SENT_RATE, "Sent Acknowledgements Mean Rate", - MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_SENT_RATE, - "Sent Acknowledgements Last Minute Rate", MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_SENT_RATE, - "Sent Acknowledgements Last 5 Minutes Rate", MetricAttribute.M5_RATE, null)); - metrics.add(new Metric(MetricType.METER, MetricsConstants.ACK_SENT_RATE, - "Sent Acknowledgements Last 15 Minutes Rate", MetricAttribute.M15_RATE, null)); - - // Database metrics - - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Minimum", - MetricAttribute.MIN, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Mean", - MetricAttribute.MEAN, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Maximum", - MetricAttribute.MAX, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Standard Deviation", - MetricAttribute.STDDEV, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, " 50th Percentile", - MetricAttribute.P50, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, " 75th Percentile", - MetricAttribute.P75, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "95th Percentile", - MetricAttribute.P95, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "98th Percentile", - MetricAttribute.P98, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "99th Percentile", - MetricAttribute.P99, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "999th Percentile", - MetricAttribute.P999, null)); - - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Mean Rate", - MetricAttribute.MEAN_RATE, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Last Minute Rate", - MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Last 5 Minutes Rate", - MetricAttribute.M5_RATE, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_READ, "Last 15 Minutes Rate", - MetricAttribute.M15_RATE, null)); - - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Minimum", - MetricAttribute.MIN, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Mean", - MetricAttribute.MEAN, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Maximum", - MetricAttribute.MAX, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Standard Deviation", - MetricAttribute.STDDEV, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "50th Percentile", - MetricAttribute.P50, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "75th Percentile", - MetricAttribute.P75, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "95th Percentile", - MetricAttribute.P95, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "98th Percentile", - MetricAttribute.P98, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "99th Percentile", - MetricAttribute.P99, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "999th Percentile", - MetricAttribute.P999, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Mean Rate", - MetricAttribute.MEAN_RATE, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Last Minute Rate", - MetricAttribute.M1_RATE, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Last 5 Minutes Rate", - MetricAttribute.M5_RATE, null)); - metrics.add(new Metric(MetricType.TIMER, MetricsConstants.DB_WRITE, "Last 15 Minutes Rate", - MetricAttribute.M15_RATE, null)); - - metricList.setMetric(metrics.toArray(new Metric[metrics.size()])); - metricData = - metricsViewClient.findLastMetrics(metricList, source, String.valueOf(fromTime)); - - // Stopping subscribers and publishers - - consumerClient.stopClient(); - publisherClient.stopClient(); - - // Evaluating metrics data - BigDecimal value; - for (int i = 0; i < metricData.getMetadata().getNames().length; i++) { - value = metricData.getData()[0][i]; - Assert.assertTrue(null != value, - "Metric [" + metricData.getMetadata().getNames()[i] + - "] value was not reported."); - } - - - - } - - /** - * This method will force metric manager to collect metrics by invoking report() method - * using remote jmx - * @throws IOException - * @throws MalformedObjectNameException - */ - private void invokeJMXReportOperation() - throws IOException, MalformedObjectNameException, XPathExpressionException { - - int JMXServicePort = getJMXServerPort(); - int RMIRegistryPort = getRMIRegistryPort(); - - JMXServiceURL url = - new JMXServiceURL("service:jmx:rmi://localhost:" + JMXServicePort + - "/jndi/rmi://localhost:" + RMIRegistryPort + "/jmxrmi"); - Map env = new HashMap<>(); - String[] credentials = {"admin", "admin"}; - env.put(JMXConnector.CREDENTIALS, credentials); - JMXConnector jmxConnector = JMXConnectorFactory.connect(url, env); - MBeanServerConnection mbeanServerConnection = jmxConnector.getMBeanServerConnection(); - ObjectName mbeanName = new ObjectName("org.wso2.carbon:type=MetricManager"); - MetricManagerMXBean mbeanProxy = - MBeanServerInvocationHandler.newProxyInstance( - mbeanServerConnection, mbeanName, MetricManagerMXBean.class, true); - mbeanProxy.report(); - jmxConnector.close(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/NewInstanceTestCase.java b/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/NewInstanceTestCase.java deleted file mode 100644 index 1ffe579c..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/NewInstanceTestCase.java +++ /dev/null @@ -1,140 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.mb.integration.tests.server.mgt; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment; -import org.wso2.carbon.automation.engine.annotations.SetEnvironment; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; -import org.wso2.carbon.automation.extensions.servers.carbonserver.MultipleServersManager; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.InetAddress; -import java.net.Socket; -import java.util.HashMap; -import java.util.Map; - -/** - * The following test cases checks the primary functionality of the carbon server. - */ -public class NewInstanceTestCase { - private static final Log log = LogFactory.getLog(NewInstanceTestCase.class); - private MultipleServersManager manager = new MultipleServersManager(); - private Map startupParameterMap1 = new HashMap<>(); - private long TIMEOUT = 180000; - - /** - * Starts up the product with offset. - * - * @throws XPathExpressionException - * @throws AutomationFrameworkException - */ - @SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE}) - @BeforeClass(groups = {"mb.server.startup"}) - public void testStartServers() throws XPathExpressionException, AutomationFrameworkException { - AutomationContext context = new AutomationContext(); - startupParameterMap1.put("-DportOffset", "2"); - CarbonTestServerManager server1 = new CarbonTestServerManager(context, System.getProperty("carbon.zip"), - startupParameterMap1); - manager.startServers(server1); - } - - /** - * Starts up the product and checks whether the ports are open and can be connected. - */ - @SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE}) - @Test(groups = {"mb.server.startup"}) - public void waitForPortTestCase() { - boolean isPortOpen = false; - long startTime = System.currentTimeMillis(); - String hostName = "localhost"; - - while (!isPortOpen && (System.currentTimeMillis() - startTime) < TIMEOUT) { - Socket socket = null; - try { - InetAddress address = InetAddress.getByName(hostName); - socket = new Socket(address, 9445); - isPortOpen = socket.isConnected(); - } catch (IOException e) { - try { - Thread.sleep(1000); - } catch (InterruptedException ignored) { - } - } finally { - try { - if ((socket != null) && (socket.isConnected())) { - socket.close(); - } - } catch (IOException e) { - log.error("Cannot close the socket which is used to check the server status ", e); - } - } - } - Assert.assertTrue(isPortOpen); - } - - /** - * Starts up the product and checks whether it can be logged in by admin successfully. - */ - @SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE}) - @Test(groups = {"mb.server.startup"}) - public void waitForLoginTestCase() { - long startTime = System.currentTimeMillis(); - boolean loginFailed = true; - while (((System.currentTimeMillis() - startTime) < TIMEOUT) && loginFailed) { - log.info("Waiting to login user..."); - try { - LoginLogoutClient loginClient = new LoginLogoutClient("https://localhost:9445/services/", "admin", - "admin"); - loginClient.login(); - loginFailed = false; - } catch (Exception e) { - if (log.isDebugEnabled()) { - log.info("Login failed after server startup", e); - } - try { - Thread.sleep(2000); - } catch (InterruptedException ignored) { - // Nothing to do - } - } - } - - Assert.assertFalse(loginFailed); - - } - - /** - * Stops all servers. - * - * @throws AutomationFrameworkException - */ - @SetEnvironment(executionEnvironments = {ExecutionEnvironment.STANDALONE}) - @AfterClass - public void clean() throws AutomationFrameworkException { - manager.stopAllServers(); - } -} diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/OSGIServerBundleStatusTestCase.java b/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/OSGIServerBundleStatusTestCase.java deleted file mode 100644 index f1f9917a..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/java/org/wso2/mb/integration/tests/server/mgt/OSGIServerBundleStatusTestCase.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.integration.tests.server.mgt; - -import org.wso2.carbon.integration.common.tests.OSGIServerBundleStatusTest; - -public class OSGIServerBundleStatusTestCase extends OSGIServerBundleStatusTest { -} diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/artifacts/mb/config/advanced/andes-config.xml b/modules/broker/integration/tests-integration/tests-server/src/test/resources/artifacts/mb/config/advanced/andes-config.xml deleted file mode 100644 index 9b579ee1..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/artifacts/mb/config/advanced/andes-config.xml +++ /dev/null @@ -1,232 +0,0 @@ - - - - - ${ANDES_HOME} - ${QPID_WORK} - ${prefix} - - ${ANDES_HOME}/lib/plugins - ${QPID_WORK}/cache - - - - - true - false - repository/resources/security/wso2carbon.jks - wso2carbon - repository/resources/security/client-truststore.jks - wso2carbon - - false - - false - 262144 - 262144 - - nio - 5672 - 8672 - 32768 - 32768 - - - true - 8999 - - false - - ${conf}/qpid.keystore - password - - - - - false - false - 65535 - false - false - en_US - - - - - - - org.wso2.carbon.andes.authentication.andes.CarbonBasedPrincipalDatabase - - - - - false - - - ${conf}/andes-virtualhosts.xml - - - - DynamicLoadBalancingPolicy - 4000 - 4000 - true - 10 - 10 - - - - 0 - 2.0 - - - true - - false - - - ON - - - true - - true - - false - 10 - - - 127.0.0.1:2181 - - 2012-02-29 08:08:08 - - - - - 1000 - - - 1000 - - - 20 - - - - - 50 - - 300 - - 20 - - - - 700 - - - 200 - - - 200 - - - 200 - - - - - 10 - - - 5 - - - 50 - - - 50 - - - - 60000 - - - 120 - - - 500 - - - 5000 - - - 4000 - - - 600000 - - - 1000 - - - 3600 - - - 10 - - - 20000 - 0.4 - 0.5 - - - 1000 - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/artifacts/mb/config/advanced/andes-virtualhosts.xml b/modules/broker/integration/tests-integration/tests-server/src/test/resources/artifacts/mb/config/advanced/andes-virtualhosts.xml deleted file mode 100644 index 16cb1059..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/artifacts/mb/config/advanced/andes-virtualhosts.xml +++ /dev/null @@ -1,79 +0,0 @@ - - - - - carbon - - carbon - - - org.wso2.andes.server.store.CassandraMessageStore - admin - admin - ClusterOne - org.wso2.andes.server.cluster.coordination.TimeStampBasedMessageIdGenerator - localhost:9043 - - - - - 1 - - QUORUM - - QUORUM - - org.apache.cassandra.locator.SimpleStrategy - - - - - 2 - 20000 - - - - - - - - - - - 0 - - 0 - - 0 - - 0 - - - - - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/automation.xml b/modules/broker/integration/tests-integration/tests-server/src/test/resources/automation.xml deleted file mode 100644 index 69a2f618..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/automation.xml +++ /dev/null @@ -1,230 +0,0 @@ - - - - - - - - - - 60000 - - standalone - - true - - false - - - - - - - http://10.100.2.51:4444/wd/hub/ - - - - firefox - - /home/test/name/webDriver - - - - - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - - - - - keystores/products/wso2carbon.jks - - JKS - - wso2carbon - - wso2carbon - - wso2carbon - - - - - client-truststore.jks - - JKS - - wso2carbon - - - - - - https://wso2.org/repo - file:///home/krishantha/test - - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - - - - - - - localhost - - - 11063 - 10743 - 6972 - 12411 - 11299 - - - - - - - - - - - - - - - org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension - - - - - org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/automationXMLSchema.xsd b/modules/broker/integration/tests-integration/tests-server/src/test/resources/automationXMLSchema.xsd deleted file mode 100644 index c23f84ed..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/automationXMLSchema.xsd +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - ================================================= - Parameters ================================================= - Browser type with used by framework to execute UI test, supported types - - chrome|firefox|opera|ie|htmlUnit - - - - - - - Change this to edit wait time for test - artifact deployment - - - - - - Change this to product|platform/cloud to - execute test on specific environment - - - - - - - Change this to true if you want to generate - coverage statistics - - - - - - Change this to true if you want to enable - framework dashboard - - - - - - - - - - - - - - - Change to enable remote webDriver - URL of remote webDriver server - - - - - - - - - - - - - Type of the browser selenium tests - are running" - - - - - - - - path to webDriver - executable - required only for - chrome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KeyStore which will be used for - encrypting/decrypting passwords - and other sensitive information. - - - - - - - Keystore file location - - - - - - Keystore type (JKS/PKCS12 etc.) - - - - - - Keystore password - - - - - - Private Key alias - - - - - - Private Key password - - - - - - - - - - System wide trust-store which is used to - maintain the certificates of all - the trusted parties. - - - - - - - trust-store file location - - - - - - trust-store type (JKS/PKCS12 - etc.) - - - - - - trust-store password - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/axis2config/axis2_client.xml b/modules/broker/integration/tests-integration/tests-server/src/test/resources/axis2config/axis2_client.xml deleted file mode 100644 index a8b584d0..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/axis2config/axis2_client.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - - true - false - false - - - 500 - - 15000 - - - false - - - - true - - - - - - false - - - admin - axis2 - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6071 - - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 - chunked - 60000 - 60000 - - - HTTP/1.1 - chunked - 60000 - 60000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar b/modules/broker/integration/tests-integration/tests-server/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar deleted file mode 100644 index d28b3a08..00000000 Binary files a/modules/broker/integration/tests-integration/tests-server/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar b/modules/broker/integration/tests-integration/tests-server/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar deleted file mode 100644 index 5903cc4b..00000000 Binary files a/modules/broker/integration/tests-integration/tests-server/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/filters.txt b/modules/broker/integration/tests-integration/tests-server/src/test/resources/filters.txt deleted file mode 100644 index 04aa6cb7..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/filters.txt +++ /dev/null @@ -1,17 +0,0 @@ --*.stub* --*.stub_ --*.stub_4.0.0 --*.stub- --org.eclipse.* --*.equinox.* --org.wso2.carbon.user.core.* --samples.* --*.log4j* --*.axis2* --*.ui* --*.tenant* --*.stratos* --*.eventing* --*tests-transports* --org.wso2.carbon.mediation.statistics* --*startup* \ No newline at end of file diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/instrumentation.txt b/modules/broker/integration/tests-integration/tests-server/src/test/resources/instrumentation.txt deleted file mode 100644 index 12af5f28..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/instrumentation.txt +++ /dev/null @@ -1,2 +0,0 @@ -org.wso2.carbon.andes* -org.dna* diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/keystores/products/client-truststore.jks b/modules/broker/integration/tests-integration/tests-server/src/test/resources/keystores/products/client-truststore.jks deleted file mode 100644 index cd16dd7e..00000000 Binary files a/modules/broker/integration/tests-integration/tests-server/src/test/resources/keystores/products/client-truststore.jks and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/keystores/products/wso2carbon.jks b/modules/broker/integration/tests-integration/tests-server/src/test/resources/keystores/products/wso2carbon.jks deleted file mode 100644 index 7942c53c..00000000 Binary files a/modules/broker/integration/tests-integration/tests-server/src/test/resources/keystores/products/wso2carbon.jks and /dev/null differ diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/log4j.properties b/modules/broker/integration/tests-integration/tests-server/src/test/resources/log4j.properties deleted file mode 100644 index 535afa56..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/log4j.properties +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# -# WSO2 Inc. licenses this file to you 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. -# - -# -# This is the log4j configuration file used by WSO2 Carbon -# -# IMPORTANT : Please do not remove or change the names of any -# of the Appenders defined here. The layout pattern & log file -# can be changed using the WSO2 Carbon Management Console, and those -# settings will override the settings in this file. -# - -log4j.rootLogger=INFO, console, Default - -log4j.logger.org.wso2=INFO -log4j.logger.org.apache.axis2.deployment.ModuleDeployer=WARN -#Automation file apender -log4j.appender.Default=org.apache.log4j.RollingFileAppender -log4j.appender.Default.File=logs/automation.log -log4j.appender.Default.Append=true -log4j.appender.Default.MaxFileSize=10MB -log4j.appender.Default.MaxBackupIndex=10 -log4j.appender.Default.layout=org.apache.log4j.PatternLayout -log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n - - -#Automation console apender -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/testng-server-mgt.xml b/modules/broker/integration/tests-integration/tests-server/src/test/resources/testng-server-mgt.xml deleted file mode 100644 index 45bd2a48..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/testng-server-mgt.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-integration/tests-server/src/test/resources/testng.xml b/modules/broker/integration/tests-integration/tests-server/src/test/resources/testng.xml deleted file mode 100644 index 6b4dbc62..00000000 --- a/modules/broker/integration/tests-integration/tests-server/src/test/resources/testng.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-platform/pom.xml b/modules/broker/integration/tests-platform/pom.xml deleted file mode 100644 index fa5c86df..00000000 --- a/modules/broker/integration/tests-platform/pom.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - org.wso2.mb - wso2iot-broker-integration-tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - platform Test Module - org.wso2.iot.broker.platform.tests - pom - - - tests-clustering - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/pom.xml b/modules/broker/integration/tests-platform/tests-clustering/pom.xml deleted file mode 100644 index 096817f2..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/pom.xml +++ /dev/null @@ -1,274 +0,0 @@ - - - - - org.wso2.mb - org.wso2.mb.platform.tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - platform cluster Test Module - org.wso2.mb.platform.tests.clustering - jar - - - - - maven-surefire-plugin - false - 2.12.4 - - - -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m - false - ${skipPlatformTests} - - src/test/resources/testng-server-mgt.xml - src/test/resources/testng.xml - - - - - maven.test.haltafterfailure - false - - - carbon.zip - - ${basedir}/../../../distribution/target/wso2iot-broker-${product.wso2iot.broker.version}.zip - - - - framework.resource.location - - ${basedir}/src/test/resources/ - - - - usedefaultlisteners - false - - - project.build.directory - ${project.build.directory} - - ${basedir}/target/security-verifier/ - ${basedir}/src/test/resources/instrumentation.txt - ${basedir}/src/test/resources/filters.txt - - ${basedir}/target - - - - maven-dependency-plugin - - - - copy-jacoco-dependencies - compile - - copy-dependencies - - - ${project.build.directory}/jacoco - jar - org.jacoco.agent - - - - - copy-secVerifier - compile - - copy-dependencies - - - ${basedir}/target/security-verifier - aar - SecVerifier - true - - - - - unpack-mar-jks - compile - - unpack - - - - - org.wso2.mb - wso2iot-broker - ${product.wso2iot.broker.version} - zip - true - ${basedir}/target/tobeCopied/ - **/*.jks,**/*.mar,**/axis2_client.xml - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.7.1 - - ${basedir}/target/report - server-test - - - - integration-test - - report-only - - - - - - - maven-resources-plugin - 2.6 - - - copy-resources-jks - compile - - copy-resources - - - ${basedir}/src/test/resources/keystores/products - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/resources/security/ - - - **/*.jks - - - - - - - copy-axis2files - compile - - copy-resources - - - ${basedir}/src/test/resources/axis2config - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/conf/axis2/ - - - **/*.xml - - - - - - - copy-resources-mar - compile - - copy-resources - - - ${basedir}/src/test/resources/client/modules - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/deployment/client/modules - - - **/*.mar - - - - - - - - - - - - - org.wso2.mb - org.wso2.mb.platform.common.utils - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - - - org.wso2.carbon.automation - org.wso2.carbon.automation.test.utils - - - org.wso2.mb - org.wso2.mb.integration.common.utils - - - org.wso2.mb - org.wso2.mb.integration.common.clients - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.extensions - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.tests - - - slf4j.wso2 - slf4j - - - org.testng - testng - - - org.jacoco - org.jacoco.agent - - - mysql - mysql-connector-java - - - - - true - - - diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentAckModeQueueTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentAckModeQueueTestCase.java deleted file mode 100644 index abf06b22..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentAckModeQueueTestCase.java +++ /dev/null @@ -1,359 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes test cases to test different ack modes for queues - */ -public class DifferentAckModeQueueTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Publish messages to a single node and receive from the same node with SESSION_TRANSACTED - * ack mode - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "SESSION_TRANSACTED ack mode test case for queue") - @Parameters({"messageCount"}) - public void testSessionTransactedAckModeForQueueTestCase(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException, InterruptedException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - String queueName = "sessionTransactedAckQueue"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.SESSION_TRANSACTED); - consumerConfig.setCommitAfterEachMessageCount(1L); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Publish messages to a single node and receive from the same node with AUTO_ACKNOWLEDGE - * ack mode - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "AUTO_ACKNOWLEDGE ack mode test case for queue") - @Parameters({"messageCount"}) - public void testAutoAcknowledgeModeForQueue(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException, InterruptedException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - String queueName = "autoAcknowledgeQueue"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Publish messages to a single node and receive from the same node with CLIENT_ACKNOWLEDGE - * ack mode - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "CLIENT_ACKNOWLEDGE ack mode test case for queue") - @Parameters({"messageCount"}) - public void testClientAcknowledgeModeForQueue(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException, InterruptedException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - String queueName = "clientAcknowledgeQueue"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setAcknowledgeAfterEachMessageCount(1L); - consumerConfig.setRunningDelay(10L); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Publish messages to a single node and receive from the same node with DUPS_OK_ACKNOWLEDGE - * ack mode - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "DUPS_OK_ACKNOWLEDGE ack mode test case for queue") - @Parameters({"messageCount"}) - public void testDupOkAcknowledgeModeForQueue(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, JMSException, NamingException, - IOException, AndesClientException, DataAccessUtilException, InterruptedException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - String queueName = "dupsOkAcknowledgeQueue"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.DUPS_OK_ACKNOWLEDGE); - consumerConfig.setRunningDelay(10L); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("sessionTransactedAckQueue") != null) { - tempAndesAdminClient.deleteQueue("sessionTransactedAckQueue"); - } - - if (tempAndesAdminClient.getQueueByName("autoAcknowledgeQueue") != null) { - tempAndesAdminClient.deleteQueue("autoAcknowledgeQueue"); - } - - if (tempAndesAdminClient.getQueueByName("clientAcknowledgeQueue") != null) { - tempAndesAdminClient.deleteQueue("clientAcknowledgeQueue"); - } - - if (tempAndesAdminClient.getQueueByName("dupsOkAcknowledgeQueue") != null) { - tempAndesAdminClient.deleteQueue("dupsOkAcknowledgeQueue"); - } - } - -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentMessageTypesQueueTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentMessageTypesQueueTestCase.java deleted file mode 100644 index 8b9fd5da..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentMessageTypesQueueTestCase.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSMessageType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - - -/** - * This class includes test cases to test different types of messages (e.g. byte, map, object, - * stream) which can be sent to a topic. - */ -public class DifferentMessageTypesQueueTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Publish byte messages to a queue in a single node and receive from the same node with one - * subscriber - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "single publisher single subscriber byte messages", - enabled = true) - @Parameters({"messageCount"}) - public void testByteMessageSingleSubSinglePub(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - - this.runMessageTypeTestCase(JMSMessageType.BYTE, 1, "byteMessageQueue1", messageCount); - } - - /** - * Publish byte messages to a queue in a single node and receive from the same node with - * multiple publishers and subscribe to that queue using multiple subscribers - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "multiple publisher multiple subscriber byte " + - "messages", enabled = true) - @Parameters({"messageCount"}) - public void testByteMessageMultipleSubMultiplePub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - - this.runMessageTypeTestCase(JMSMessageType.BYTE, 10, "byteMessageQueue2", messageCount); - } - - /** - * Publish map messages to a queue in a single node and receive from the same node with one - * subscriber - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "single publisher single subscriber map messages", - enabled = true) - @Parameters({"messageCount"}) - public void testMapMessageSingleSubSinglePub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - this.runMessageTypeTestCase(JMSMessageType.MAP, 1, "mapMessageQueue1", messageCount); - } - - /** - * Publish map messages to a queue in a single node and receive from the same node with - * multiple publishers and subscribe to that queue using multiple subscribers - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "multiple publisher multiple subscriber map " + - "messages", enabled = true) - @Parameters({"messageCount"}) - public void testMapMessageMultiplePubMultipleSub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - this.runMessageTypeTestCase(JMSMessageType.MAP, 10, "mapMessageQueue2", messageCount); - } - - /** - * Publish Object messages to a queue in a single node and receive from the same node with one - * subscriber - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "single publisher single subscriber object messages", - enabled = true) - @Parameters({"messageCount"}) - public void testObjectMessageSingleSubSinglePub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - this.runMessageTypeTestCase(JMSMessageType.OBJECT, 1, "objectMessageQueue1", messageCount); - } - - /** - * Publish object messages to a queue in a single node and receive from the same node with - * multiple publishers and subscribe to that queue using multiple subscribers - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "multiple publisher multiple subscriber object " + - "messages", enabled = true) - @Parameters({"messageCount"}) - public void testObjectMessageMultiplePubMultipleSub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - this.runMessageTypeTestCase(JMSMessageType.OBJECT, 10, "objectMessageQueue2", messageCount); - } - - /** - * Publish stream messages to a queue in a single node and receive from the same node with one - * subscriber - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "single publisher single subscriber stream messages", - enabled = true) - @Parameters({"messageCount"}) - public void testStreamMessageSingleSubSinglePub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - this.runMessageTypeTestCase(JMSMessageType.STREAM, 1, "streamMessageQueue1", messageCount); - } - - /** - * Publish stream messages to a queue in a single node and receive from the same node with - * multiple publishers and subscribe to that queue using multiple subscribers - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "multiple publisher multiple subscriber stream " + - "messages", enabled = true) - @Parameters({"messageCount"}) - public void testStreamMessageMultiplePubMultipleSub(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, AndesClientException, DataAccessUtilException { - this.runMessageTypeTestCase(JMSMessageType.STREAM, 10, "streamMessageQueue2", messageCount); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("byteMessageQueue1") != null) { - tempAndesAdminClient.deleteQueue("byteMessageQueue1"); - } - if (tempAndesAdminClient.getQueueByName("byteMessageQueue2") != null) { - tempAndesAdminClient.deleteQueue("byteMessageQueue2"); - } - if (tempAndesAdminClient.getQueueByName("mapMessageQueue1") != null) { - tempAndesAdminClient.deleteQueue("mapMessageQueue1"); - } - if (tempAndesAdminClient.getQueueByName("mapMessageQueue2") != null) { - tempAndesAdminClient.deleteQueue("mapMessageQueue2"); - } - if (tempAndesAdminClient.getQueueByName("objectMessageQueue1") != null) { - tempAndesAdminClient.deleteQueue("objectMessageQueue1"); - } - if (tempAndesAdminClient.getQueueByName("objectMessageQueue2") != null) { - tempAndesAdminClient.deleteQueue("objectMessageQueue2"); - } - if (tempAndesAdminClient.getQueueByName("streamMessageQueue1") != null) { - tempAndesAdminClient.deleteQueue("streamMessageQueue1"); - } - if (tempAndesAdminClient.getQueueByName("streamMessageQueue2") != null) { - tempAndesAdminClient.deleteQueue("streamMessageQueue2"); - } - } - - /** - * Runs a topic send and receive test case - * - * @param messageType The message type to be used when publishing - * @param numberOfPublishers The number of publishers - * @param destinationName The destination name for sender and receiver - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - private void runMessageTypeTestCase(JMSMessageType messageType, int numberOfPublishers, - String destinationName, long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - - - - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, destinationName); - consumerConfig.setMaximumMessagesToReceived(sendCount * numberOfPublishers); - consumerConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - publisherConfig.setJMSMessageType(messageType); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, numberOfPublishers, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount * numberOfPublishers, - "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), sendCount * numberOfPublishers, - "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentRateSubscriberTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentRateSubscriberTestCase.java deleted file mode 100644 index 83c161b6..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/DifferentRateSubscriberTestCase.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes tests subscribers/publishers with different rates - */ -public class DifferentRateSubscriberTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Publish message to a single node and receive from the same node at a slow rate. - * - * @param messageCount number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", description = "Same node slow subscriber test case") - @Parameters({"messageCount"}) - public void testSameNodeSlowSubscriber(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, NamingException, - XPathExpressionException, AndesClientException, DataAccessUtilException, InterruptedException { - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - this.runDifferentRateSubscriberTestCase("singleQueue1", 10L, 0L, messageCount, true, brokerAddress, brokerAddress); - } - - /** - * Publish message at a slow rate to a single node and receive from the same node. - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - */ - @Test(groups = "wso2.mb", description = "Same node slow publisher test case") - @Parameters({"messageCount"}) - public void testSameNodeSlowPublisher(long messageCount) - throws XPathExpressionException, IOException, JMSException, AndesClientConfigurationException, - NamingException, AndesClientException, DataAccessUtilException, InterruptedException { - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - this.runDifferentRateSubscriberTestCase("singleQueue2", 0L, 10L, messageCount, true, brokerAddress, brokerAddress); - } - - - /** - * Publish message to a single node and receive from a different node at a slow rate. - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - */ - @Test(groups = "wso2.mb", description = "Different node slow subscriber test case") - @Parameters({"messageCount"}) - public void testDifferentNodeSlowSubscriber(long messageCount) - throws XPathExpressionException, IOException, JMSException, AndesClientConfigurationException, - NamingException, AndesClientException, DataAccessUtilException, InterruptedException { - - this.runDifferentRateSubscriberTestCase("singleQueue3", 10L, 0L, messageCount, false, - getRandomAMQPBrokerAddress(), getRandomAMQPBrokerAddress()); - } - - /** - * Publish message at a slow rate to a single node and receive from a different node. - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - */ - @Test(groups = "wso2.mb", description = "Different node slow publisher test case") - @Parameters({"messageCount"}) - public void testDifferentNodeSlowPublisher(long messageCount) - throws XPathExpressionException, IOException, JMSException, AndesClientConfigurationException, - NamingException, AndesClientException, DataAccessUtilException, InterruptedException { - this.runDifferentRateSubscriberTestCase("singleQueue4", 0L, 10L, messageCount, false, - getRandomAMQPBrokerAddress(), getRandomAMQPBrokerAddress()); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("singleQueue1") != null) { - tempAndesAdminClient.deleteQueue("singleQueue1"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue2") != null) { - tempAndesAdminClient.deleteQueue("singleQueue2"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue3") != null) { - tempAndesAdminClient.deleteQueue("singleQueue3"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue4") != null) { - tempAndesAdminClient.deleteQueue("singleQueue4"); - } - } - - /** - * Runs a receiver and a consumer that publishes messages with a delay. - * - * @param destinationName The destination name - * @param consumerDelay The delay in which the consumer sends messages - * @param publisherDelay The delay in which the publisher received messages - * @param messageCount Number of message to send and receive - * @param isSameNode true if the test has subscribers and publishers on the same node - * @param consumerBrokerAddress The amqp connection string for consumer - * @param publisherBrokerAddress The amqp connection string for publisher @throws org.wso2.mb.integration - * .common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - private void runDifferentRateSubscriberTestCase(String destinationName, long consumerDelay, - long publisherDelay, - long messageCount, - boolean isSameNode, HostAndPort consumerBrokerAddress, - HostAndPort publisherBrokerAddress) - throws AndesClientConfigurationException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException, InterruptedException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(consumerBrokerAddress.getHostText(), - consumerBrokerAddress.getPort(), ExchangeType.QUEUE, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - consumerConfig.setRunningDelay(consumerDelay); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(publisherBrokerAddress.getHostText(), - publisherBrokerAddress.getPort(), ExchangeType.QUEUE, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - publisherConfig.setRunningDelay(publisherDelay); - - // Creating client - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - if (!isSameNode) { - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - } - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MessageExpirationTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MessageExpirationTestCase.java deleted file mode 100644 index 9f63bdb7..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MessageExpirationTestCase.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Perform tests for message expiry and expired message deletion - */ -public class MessageExpirationTestCase extends MBPlatformBaseTest{ - - /** - * To check the database content - */ - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException{ - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - - /** - * Publish 4000 messages when there is no subscription. Default safe slot buffer count is 3 and slot window size - * is 1000. So 3000 (3*1000) messages should not be interpreted by the periodic deletion task as those can be - * allocated to slots in the near future. Periodic deletion task should delete the remaining 1000 (4000-3000) - * expired messages. Then create a subscription. The messages allocated into slots and put into delivery path and - * eventually get caught at the flusher as expired messages. Messages caught by the flusher is accumulated for a - * batch delete. Then they should be deleted by the pre-delivery expiry message deletion task. - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws AndesClientException - * @throws IOException - * @throws InterruptedException - * @throws DataAccessUtilException - */ - @Test(groups = "wso2.mb", description = "Message expiration and Expired message deletion") - public void testMessageExpiry() - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - AndesClientException, IOException, InterruptedException, DataAccessUtilException, - CloneNotSupportedException { - - long sendCount = 1000L; - String queueName = "clusterExpiryCheckQueue1"; - - String randomInstanceKey = getRandomMBInstance(); - - AutomationContext tempContext = getAutomationContextWithKey(randomInstanceKey); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - - //To create the queue, start the subscription and disconnect it. - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setJMSMessageExpiryTime(1000); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - //2 seconds wait for all messages got expired - Thread.sleep(2000); - - //Creating a consumer - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig.clone(); - HostAndPort randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig2.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig2.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - //since all the messages get expired in 1 sec and caught at Message flusher. So there should not be any messages - // to deliver - Assert.assertEquals(consumerClient.getReceivedMessageCount(), 0,"Message receiving failed."); - //30 seconds sleep for pre delivery expiry message deletion task to delete the messages captured at flusher - Thread.sleep(30000); - - //Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Expired message deletion failed."); - - } - -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MixedQueueTopicTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MixedQueueTopicTestCase.java deleted file mode 100644 index 15812b75..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MixedQueueTopicTestCase.java +++ /dev/null @@ -1,624 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.AndesJMSConsumer; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * Perform tests with all possible AMQP types and large number of messages. - */ -public class MixedQueueTopicTestCase extends MBPlatformBaseTest { - - final long printPerMessageCount = 1000; - - String queueName1 = "mixedQueue1"; - String queueName2 = "mixedQueue2"; - - String topicName1 = "mixedTopic1"; - String topicName2 = "mixedTopic2"; - - HostAndPort broker1; - HostAndPort broker2; - - Map> publishers = new HashMap<>(); - Map> subscribers = new HashMap<>(); - - Map sendCounts = new HashMap<>(); - - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - broker1 = getRandomAMQPBrokerAddress(); - broker2 = getRandomAMQPBrokerAddress(); - } - - /** - * Send a large number of messages and receive via - * 1. Queues - * 2. Non-Durable Topics - * 3. Durable Topics - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws NamingException - * @throws AndesClientException - * @throws JMSException - */ - @Test(groups = "wso2.mb", description = "Test combination of queues/topics/durable topics with a large number" - + "of messages") - public void performMixedQueueTopicTest() throws XPathExpressionException, AndesClientConfigurationException, - IOException, NamingException, AndesClientException, JMSException { - - // Create all the subscribers - - createQueue1Subscribers(); - createQueue2Subscribers(); - createTopic1Subscribers(); - createTopic2Subscribers(); - createTopic1DurableSubscribers(); - createTopic2DurableSubscribers(); - - // Start all the subscribers - - for (Map.Entry> entry : subscribers.entrySet()) { - for (AndesClient client : entry.getValue()) { - client.startClient(); - } - } - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - // Create all the publishers - - createQueue1Publishers(); - createQueue2Publishers(); - createTopic1Publishers(); - createTopic2Publishers(); - - // Start publishing - - for (Map.Entry> entry : publishers.entrySet()) { - for (AndesClient client : entry.getValue()) { - client.startClient(); - } - } - - // Verify message counts - - verifyMessageCounts(); - - - } - - /** - * Create subscribers for the first queue. - * - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createQueue1Subscribers() throws AndesClientException, JMSException, IOException, NamingException, - AndesClientConfigurationException { - AndesJMSConsumerClientConfiguration queue1ConsumerBroker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.QUEUE, queueName1); - queue1ConsumerBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration queue1ConsumerBroker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.QUEUE, queueName1); - queue1ConsumerBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set queue1Subscribers = new HashSet<>(); - - AndesClient queue1ConsumerBroker1 = new AndesClient(queue1ConsumerBroker1Config, true); - queue1Subscribers.add(queue1ConsumerBroker1); - - AndesClient queue1ConsumerBroker2 = new AndesClient(queue1ConsumerBroker2Config, true); - queue1Subscribers.add(queue1ConsumerBroker2); - - subscribers.put(queueName1, queue1Subscribers); - } - - /** - * Create subscribers for the second queue. - * - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createQueue2Subscribers() throws AndesClientException, JMSException, IOException, NamingException, - AndesClientConfigurationException { - AndesJMSConsumerClientConfiguration queue2ConsumerBroker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.QUEUE, queueName2); - queue2ConsumerBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration queue2ConsumerBroker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.QUEUE, queueName2); - queue2ConsumerBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set queue2Subscribers = new HashSet<>(); - AndesClient queue2ConsumerBroker1 = new AndesClient(queue2ConsumerBroker1Config, true); - queue2Subscribers.add(queue2ConsumerBroker1); - - AndesClient queue2ConsumerBroker2 = new AndesClient(queue2ConsumerBroker2Config, true); - queue2Subscribers.add(queue2ConsumerBroker2); - - subscribers.put(queueName2, queue2Subscribers); - } - - /** - * Create non-durable subscribers for the first topic. - * - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createTopic1Subscribers() throws AndesClientException, JMSException, IOException, NamingException, - AndesClientConfigurationException { - AndesJMSConsumerClientConfiguration topic1ConsumerBroker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName1); - topic1ConsumerBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration topic1ConsumerBroker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName1); - topic1ConsumerBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set topic1Subscribers = new HashSet<>(); - - // Create 3 subscribers to broker1 and 2 subscribers to broker2 - AndesClient topic1Consumer1Broker1 = new AndesClient(topic1ConsumerBroker1Config, 3, true); - topic1Subscribers.add(topic1Consumer1Broker1); - - AndesClient topic1Consumer1Broker2 = new AndesClient(topic1ConsumerBroker2Config, 2, true); - topic1Subscribers.add(topic1Consumer1Broker2); - - subscribers.put(topicName1, topic1Subscribers); - } - - /** - * Create non-durable subscribers for the second topic. - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createTopic2Subscribers() throws IOException, JMSException, AndesClientException, NamingException, - AndesClientConfigurationException { - AndesJMSConsumerClientConfiguration topic2ConsumerBroker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName2); - topic2ConsumerBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration topic2ConsumerBroker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName2); - topic2ConsumerBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set topic2Subscribers = new HashSet<>(); - - // Create 2 subscribers to broker1 and 3 subscribers to broker2 - AndesClient topic2Consumer1Broker1 = new AndesClient(topic2ConsumerBroker1Config, 2, true); - topic2Subscribers.add(topic2Consumer1Broker1); - - - AndesClient topic2Consumer2Broker2 = new AndesClient(topic2ConsumerBroker2Config, 3, true); - topic2Subscribers.add(topic2Consumer2Broker2); - - subscribers.put(topicName2, topic2Subscribers); - - } - - /** - * Create durable subscribers for the first topic. - * - * @throws AndesClientConfigurationException - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - */ - private void createTopic1DurableSubscribers() throws AndesClientConfigurationException, IOException, - JMSException, AndesClientException, NamingException { - AndesJMSConsumerClientConfiguration durable1Consumer1Broker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName1); - durable1Consumer1Broker1Config.setDurable(true, "ultimateDurable1Sub1Broker1"); - durable1Consumer1Broker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable1Consumer2Broker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName1); - durable1Consumer2Broker1Config.setDurable(true, "ultimateDurable1Sub2Broker1"); - durable1Consumer2Broker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable1Consumer3Broker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName1); - durable1Consumer3Broker1Config.setDurable(true, "ultimateDurable1Sub3Broker1"); - durable1Consumer3Broker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable1Consumer1Broker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName1); - durable1Consumer1Broker2Config.setDurable(true, "ultimateDurable1Sub1Broker2"); - durable1Consumer1Broker2Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable1Consumer2Broker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName1); - durable1Consumer2Broker2Config.setDurable(true, "ultimateDurable1Sub2Broker2"); - durable1Consumer2Broker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set durableTopic1Subscribers = new HashSet<>(); - - AndesClient durable1Consumer1Broker1 = new AndesClient(durable1Consumer1Broker1Config, true); - durableTopic1Subscribers.add(durable1Consumer1Broker1); - - AndesClient durable1Consumer2Broker1 = new AndesClient(durable1Consumer2Broker1Config, true); - durableTopic1Subscribers.add(durable1Consumer2Broker1); - - AndesClient durable1Consumer3Broker1 = new AndesClient(durable1Consumer3Broker1Config, true); - durableTopic1Subscribers.add(durable1Consumer3Broker1); - - AndesClient durable1Consumer1Broker2 = new AndesClient(durable1Consumer1Broker2Config, true); - durableTopic1Subscribers.add(durable1Consumer1Broker2); - - AndesClient durable1Consumer2Broker2 = new AndesClient(durable1Consumer2Broker2Config, true); - durableTopic1Subscribers.add(durable1Consumer2Broker2); - - subscribers.put(topicName1, durableTopic1Subscribers); - } - - /** - * Create durable subscribers for the second topic. - * - * @throws AndesClientConfigurationException - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - */ - private void createTopic2DurableSubscribers() throws AndesClientConfigurationException, AndesClientException, - JMSException, IOException, NamingException { - AndesJMSConsumerClientConfiguration durable2Consumer1Broker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName2); - durable2Consumer1Broker1Config.setDurable(true, "ultimateDurable2Sub1Broker1"); - durable2Consumer1Broker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable2Consumer2Broker1Config = - new AndesJMSConsumerClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName2); - durable2Consumer2Broker1Config.setDurable(true, "ultimateDurable2Sub2Broker1"); - durable2Consumer2Broker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable2Consumer1Broker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName2); - durable2Consumer1Broker2Config.setDurable(true, "ultimateDurable1Sub3Broker2"); - durable2Consumer1Broker2Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable2Consumer2Broker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName2); - durable2Consumer2Broker2Config.setDurable(true, "ultimateDurable2Sub1Broker2"); - durable2Consumer2Broker2Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSConsumerClientConfiguration durable2Consumer3Broker2Config = - new AndesJMSConsumerClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName2); - durable2Consumer3Broker2Config.setDurable(true, "ultimateDurable2Sub2Broker2"); - durable2Consumer3Broker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set durableTopic2Subscribers = new HashSet<>(); - - AndesClient durable2Consumer1Broker1 = new AndesClient(durable2Consumer1Broker1Config, true); - durableTopic2Subscribers.add(durable2Consumer1Broker1); - - AndesClient durable2Consumer2Broker1 = new AndesClient(durable2Consumer2Broker1Config, true); - durableTopic2Subscribers.add(durable2Consumer2Broker1); - - AndesClient durable2Consumer1Broker2 = new AndesClient(durable2Consumer1Broker2Config, true); - durableTopic2Subscribers.add(durable2Consumer1Broker2); - - AndesClient durable2Consumer2Broker2 = new AndesClient(durable2Consumer2Broker2Config, true); - durableTopic2Subscribers.add(durable2Consumer2Broker2); - - AndesClient durable2Consumer3Broker2 = new AndesClient(durable2Consumer3Broker2Config, true); - durableTopic2Subscribers.add(durable2Consumer3Broker2); - - subscribers.put(topicName2, durableTopic2Subscribers); - - - } - - /** - * Create publishers for the first queue. - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createQueue1Publishers() throws IOException, JMSException, AndesClientException, NamingException, - AndesClientConfigurationException { - long queueSendCountPerPublisher = 50000; - - AndesJMSPublisherClientConfiguration queue1PublisherBroker1Config = - new AndesJMSPublisherClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.QUEUE, queueName1); - queue1PublisherBroker1Config.setNumberOfMessagesToSend(queueSendCountPerPublisher); - queue1PublisherBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSPublisherClientConfiguration queue1PublisherBroker2Config = - new AndesJMSPublisherClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.QUEUE, queueName1); - queue1PublisherBroker2Config.setNumberOfMessagesToSend(queueSendCountPerPublisher); - queue1PublisherBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set queue1Publishers= new HashSet<>(); - - AndesClient queue1PublisherBroker1 = new AndesClient(queue1PublisherBroker1Config, true); - queue1Publishers.add(queue1PublisherBroker1); - - AndesClient queue1PublisherBroker2 = new AndesClient(queue1PublisherBroker2Config, true); - queue1Publishers.add(queue1PublisherBroker2); - - publishers.put(queueName1, queue1Publishers); - - sendCounts.put(queueName1, queueSendCountPerPublisher * 2); - } - - /** - * Create publishers for the second queue. - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createQueue2Publishers() throws IOException, JMSException, AndesClientException, NamingException, - AndesClientConfigurationException { - long queueSendCountPerPublisher = 50000; - - AndesJMSPublisherClientConfiguration queue2PublisherBroker1Config = - new AndesJMSPublisherClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.QUEUE, queueName2); - queue2PublisherBroker1Config.setNumberOfMessagesToSend(queueSendCountPerPublisher); - queue2PublisherBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - - AndesJMSPublisherClientConfiguration queue2PublisherBroker2Config = - new AndesJMSPublisherClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.QUEUE, queueName2); - queue2PublisherBroker2Config.setNumberOfMessagesToSend(queueSendCountPerPublisher); - queue2PublisherBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - - Set queue2Publishers= new HashSet<>(); - - AndesClient queue2PublisherBroker1 = new AndesClient(queue2PublisherBroker1Config, true); - queue2Publishers.add(queue2PublisherBroker1); - - AndesClient queue2PublisherBroker2 = new AndesClient(queue2PublisherBroker2Config, true); - queue2Publishers.add(queue2PublisherBroker2); - - publishers.put(queueName2, queue2Publishers); - - sendCounts.put(queueName2, queueSendCountPerPublisher * 2); - } - - /** - * Create publishers for the first topic. - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createTopic1Publishers() throws IOException, JMSException, AndesClientException, NamingException, - AndesClientConfigurationException { - long topicSendCountPerPublisher = 25000; - - AndesJMSPublisherClientConfiguration topic1PublisherBroker1Config = - new AndesJMSPublisherClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName1); - topic1PublisherBroker1Config.setNumberOfMessagesToSend(topicSendCountPerPublisher); - topic1PublisherBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - topic1PublisherBroker1Config.setRunningDelay(1L); - - AndesJMSPublisherClientConfiguration topic1PublisherBroker2Config = - new AndesJMSPublisherClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName1); - topic1PublisherBroker2Config.setNumberOfMessagesToSend(topicSendCountPerPublisher); - topic1PublisherBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - topic1PublisherBroker2Config.setRunningDelay(1L); - - Set topic1Publishers= new HashSet<>(); - - AndesClient topic1PublisherBroker1 = new AndesClient(topic1PublisherBroker1Config, true); - topic1Publishers.add(topic1PublisherBroker1); - - AndesClient topic1PublisherBroker2 = new AndesClient(topic1PublisherBroker2Config, true); - topic1Publishers.add(topic1PublisherBroker2); - - publishers.put(topicName1, topic1Publishers); - - sendCounts.put(topicName1, topicSendCountPerPublisher * 2); - - } - - /** - * Create publishers for the second topic. - * - * @throws IOException - * @throws JMSException - * @throws AndesClientException - * @throws NamingException - * @throws AndesClientConfigurationException - */ - private void createTopic2Publishers() throws IOException, JMSException, AndesClientException, NamingException, - AndesClientConfigurationException { - long topicSendCountPerPublisher = 25000; - - AndesJMSPublisherClientConfiguration topic2PublisherBroker1Config = - new AndesJMSPublisherClientConfiguration(broker1.getHostText(), - broker1.getPort(), ExchangeType.TOPIC, topicName2); - topic2PublisherBroker1Config.setNumberOfMessagesToSend(topicSendCountPerPublisher); - topic2PublisherBroker1Config.setPrintsPerMessageCount(printPerMessageCount); - topic2PublisherBroker1Config.setRunningDelay(1L); - - AndesJMSPublisherClientConfiguration topic2PublisherBroker2Config = - new AndesJMSPublisherClientConfiguration(broker2.getHostText(), - broker2.getPort(), ExchangeType.TOPIC, topicName2); - topic2PublisherBroker2Config.setNumberOfMessagesToSend(topicSendCountPerPublisher); - topic2PublisherBroker2Config.setPrintsPerMessageCount(printPerMessageCount); - topic2PublisherBroker2Config.setRunningDelay(1L); - - Set topic2Publishers= new HashSet<>(); - - AndesClient topic2PublisherBroker1 = new AndesClient(topic2PublisherBroker1Config, true); - topic2Publishers.add(topic2PublisherBroker1); - - AndesClient topic2PublisherBroker2 = new AndesClient(topic2PublisherBroker2Config, true); - topic2Publishers.add(topic2PublisherBroker2); - - publishers.put(topicName2, topic2Publishers); - - sendCounts.put(topicName2, topicSendCountPerPublisher * 2); - } - - /** - * Run asserts and verify all the published messages are received accordingly. - * - * @throws JMSException - */ - private void verifyMessageCounts() throws JMSException { - // Verify all messages are received for queue1 - long queue1Count = 0; - - for (AndesClient subscriber : subscribers.get(queueName1)) { - // we are waiting for 60s here since flow control can delay messages for a long time due to heavy load - AndesClientUtils.waitForMessagesAndShutdown(subscriber, AndesClientConstants.DEFAULT_RUN_TIME * 6); - queue1Count = queue1Count + subscriber.getReceivedMessageCount(); - } - - Assert.assertEquals(queue1Count, sendCounts.get(queueName1).longValue(), "Did not receive expected count for " - + queueName1); - - // Verify all messages are received for queue2 - long queue2Count = 0; - - for (AndesClient subscriber : subscribers.get(queueName2)) { - AndesClientUtils.waitForMessagesAndShutdown(subscriber, AndesClientConstants.DEFAULT_RUN_TIME); - queue2Count = queue2Count + subscriber.getReceivedMessageCount(); - } - - Assert.assertEquals(queue2Count, sendCounts.get(queueName2).longValue(), "Did not receive expected count for " - + queueName2 - - ); - - // Verify all messages are received for topic1 subscribers - long topic1SendCount = sendCounts.get(topicName1); - - for (AndesClient subscriber : subscribers.get(topicName1)) { - AndesClientUtils.waitForMessagesAndShutdown(subscriber, AndesClientConstants.DEFAULT_RUN_TIME); - - for (AndesJMSConsumer consumer : subscriber.getConsumers()) { - Assert.assertEquals(consumer.getReceivedMessageCount().get(), topic1SendCount, "Did not receive expected " - + "count for topic " + topicName1 + " for subscriber " - + consumer.getConfig().getSubscriptionID()); - } - } - - // Verify all messages are received for topic2 subscribers - long topic2SendCount = sendCounts.get(topicName2); - - for (AndesClient subscriber : subscribers.get(topicName2)) { - AndesClientUtils.waitForMessagesAndShutdown(subscriber, AndesClientConstants.DEFAULT_RUN_TIME); - - for (AndesJMSConsumer consumer : subscriber.getConsumers()) { - Assert.assertEquals(consumer.getReceivedMessageCount().get(), topic2SendCount, "Did not receive expected " - + "count for topic " + topicName2 + " for subscriber " - + consumer.getConfig().getSubscriptionID()); - } - } - - - - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MultipleSubscriberMultiplePublisherTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MultipleSubscriberMultiplePublisherTestCase.java deleted file mode 100644 index 0c677cbe..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/MultipleSubscriberMultiplePublisherTestCase.java +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class tests broker with multiple publisher and subscribers - */ -public class MultipleSubscriberMultiplePublisherTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Multiple subscribers and publishers in same node for a single queue - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Same node single queue multiple subscriber " + - "publisher test case") - @Parameters({"messageCount"}) - public void testSameNodeSingleQueueMultipleSubscriberPublisher(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException, InterruptedException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - String queueName = "singleQueue1"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(brokerAddress - .getHostText(), brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(brokerAddress - .getHostText(), brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - AndesClient consumerClient2 = new AndesClient(consumerConfig, true); - consumerClient2.startClient(); - AndesClient consumerClient3 = new AndesClient(consumerConfig, true); - consumerClient3.startClient(); - AndesClient consumerClient4 = new AndesClient(consumerConfig, true); - consumerClient4.startClient(); - - AndesClient publisherClient1 = new AndesClient(publisherConfig, true); - publisherClient1.startClient(); - AndesClient publisherClient2 = new AndesClient(publisherConfig, true); - publisherClient2.startClient(); - AndesClient publisherClient3 = new AndesClient(publisherConfig, true); - publisherClient3.startClient(); - AndesClient publisherClient4 = new AndesClient(publisherConfig, true); - publisherClient4.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - AndesClientUtils.shutdownClient(consumerClient3); - AndesClientUtils.shutdownClient(consumerClient4); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient1.getSentMessageCount(), sendCount, "Message sending failed by publisherClient1."); - Assert.assertEquals(publisherClient2.getSentMessageCount(), sendCount, "Message sending failed by publisherClient2."); - Assert.assertEquals(publisherClient3.getSentMessageCount(), sendCount, "Message sending failed by publisherClient3."); - Assert.assertEquals(publisherClient4.getSentMessageCount(), sendCount, "Message sending failed by publisherClient4."); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient1."); - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient2."); - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient3."); - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient4."); - - long totalMessagesSent = publisherClient1.getSentMessageCount() + publisherClient2.getSentMessageCount() - + publisherClient3.getSentMessageCount() + publisherClient4.getSentMessageCount(); - long totalMessagesReceived = consumerClient1.getReceivedMessageCount() + consumerClient2.getReceivedMessageCount() - + consumerClient3.getReceivedMessageCount() + consumerClient4.getReceivedMessageCount(); - Assert.assertEquals(totalMessagesSent, totalMessagesReceived, "Message receiving failed by all consumers"); - Assert.assertEquals(totalMessagesSent, sendCount * 4, "Message receiving by all consumers does not match the message count that was sent"); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Multiple subscribers and publishers in Multiple node for a single queue - * - * @param messageCount Number of message to send and receive - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Multiple node single queue multiple subscriber " + - "publisher test case") - @Parameters({"messageCount"}) - public void testMultiNodeSingleQueueMultipleSubscriberPublisher(long messageCount) - throws AndesClientConfigurationException, XPathExpressionException, NamingException, JMSException, - IOException, AndesClientException, CloneNotSupportedException, DataAccessUtilException, - InterruptedException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - String queueName = "singleQueue2"; - HostAndPort consumerBrokerAddress = getRandomAMQPBrokerAddress(); - - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(consumerBrokerAddress.getHostText(), - consumerBrokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig1.setMaximumMessagesToReceived(expectedCount); - consumerConfig1.setPrintsPerMessageCount(expectedCount / 10L); - - HostAndPort publisherBrokerAddress = getRandomAMQPBrokerAddress(); - AndesJMSPublisherClientConfiguration publisherConfig1 = - new AndesJMSPublisherClientConfiguration(publisherBrokerAddress.getHostText(), - publisherBrokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig1.setNumberOfMessagesToSend(sendCount); - publisherConfig1.setPrintsPerMessageCount(sendCount / 10L); - - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - HostAndPort randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig2.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig2.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig3.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig3.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - AndesJMSConsumerClientConfiguration consumerConfig4 = consumerConfig1.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig4.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig4.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient4 = new AndesClient(consumerConfig4, true); - consumerClient4.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - AndesClient publisherClient1 = new AndesClient(publisherConfig1, true); - publisherClient1.startClient(); - - AndesJMSPublisherClientConfiguration publisherConfig2 = publisherConfig1.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - publisherConfig2.setHostName(randomAMQPBrokerAddress.getHostText()); - publisherConfig2.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - publisherClient2.startClient(); - - AndesJMSPublisherClientConfiguration publisherConfig3 = publisherConfig1.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - publisherConfig3.setHostName(randomAMQPBrokerAddress.getHostText()); - publisherConfig3.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient publisherClient3 = new AndesClient(publisherConfig3, true); - publisherClient3.startClient(); - - - AndesJMSPublisherClientConfiguration publisherConfig4 = publisherConfig1.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - publisherConfig4.setHostName(randomAMQPBrokerAddress.getHostText()); - publisherConfig4.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient publisherClient4 = new AndesClient(publisherConfig4, true); - publisherClient4.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - AndesClientUtils.shutdownClient(consumerClient3); - AndesClientUtils.shutdownClient(consumerClient4); - - Assert.assertEquals(publisherClient1.getSentMessageCount(), sendCount, "Message sending failed by publisherClient1."); - Assert.assertEquals(publisherClient2.getSentMessageCount(), sendCount, "Message sending failed by publisherClient2."); - Assert.assertEquals(publisherClient3.getSentMessageCount(), sendCount, "Message sending failed by publisherClient3."); - Assert.assertEquals(publisherClient4.getSentMessageCount(), sendCount, "Message sending failed by publisherClient4."); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient1."); - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient2."); - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient3."); - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient4."); - - long totalMessagesSent = publisherClient1.getSentMessageCount() + publisherClient2 - .getSentMessageCount() + publisherClient3.getSentMessageCount() + - publisherClient4.getSentMessageCount(); - - long totalMessagesReceived = consumerClient1.getReceivedMessageCount() + consumerClient2 - .getReceivedMessageCount() + consumerClient3.getReceivedMessageCount() + - consumerClient4.getReceivedMessageCount(); - - Assert.assertEquals(totalMessagesSent, totalMessagesReceived, "Message receiving failed " + - "by all consumers"); - Assert.assertEquals(totalMessagesSent, sendCount * 4, "Message receiving by all consumers" + - " does not match the message count " + - "that was sent"); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Multiple subscribers and publishers in Multiple node for Multiple queues - * - * @param messageCount Number of message to send and receive - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws XPathExpressionException - * @throws IOException - * @throws CloneNotSupportedException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Multiple node Multiple queue multiple subscriber " + - "publisher test case") - @Parameters({"messageCount"}) - public void testMultiNodeMultipleQueueMultipleSubscriberPublisher(long messageCount) - throws AndesClientConfigurationException, NamingException, JMSException, XPathExpressionException, - IOException, CloneNotSupportedException, AndesClientException, DataAccessUtilException, - InterruptedException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - String queue3 = "singleQueue3"; - String queue4 = "singleQueue4"; - String queue5 = "singleQueue5"; - String queue6 = "singleQueue6"; - - HostAndPort consumerBrokerAddress = getRandomAMQPBrokerAddress(); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(consumerBrokerAddress.getHostText(), - consumerBrokerAddress.getPort(), ExchangeType.QUEUE, queue3); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - HostAndPort publisherBrokerAddress = getRandomAMQPBrokerAddress(); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(publisherBrokerAddress.getHostText(), - publisherBrokerAddress.getPort(), ExchangeType.QUEUE, queue3); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig.clone(); - consumerConfig2.setDestinationName(queue4); - HostAndPort randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig2.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig2.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig.clone(); - consumerConfig3.setDestinationName(queue5); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig3.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig3.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - AndesJMSConsumerClientConfiguration consumerConfig4 = consumerConfig.clone(); - consumerConfig4.setDestinationName(queue6); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig4.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig4.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient4 = new AndesClient(consumerConfig4, true); - consumerClient4.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - AndesClient publisherClient1 = new AndesClient(publisherConfig, true); - publisherClient1.startClient(); - - AndesJMSPublisherClientConfiguration publisherConfig2 = publisherConfig.clone(); - publisherConfig2.setDestinationName(queue4); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - publisherConfig2.setHostName(randomAMQPBrokerAddress.getHostText()); - publisherConfig2.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient publisherClient2 = new AndesClient(publisherConfig2, true); - publisherClient2.startClient(); - - AndesJMSPublisherClientConfiguration publisherConfig3 = publisherConfig.clone(); - publisherConfig3.setDestinationName(queue5); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - publisherConfig3.setHostName(randomAMQPBrokerAddress.getHostText()); - publisherConfig3.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient publisherClient3 = new AndesClient(publisherConfig3, true); - publisherClient3.startClient(); - - AndesJMSPublisherClientConfiguration publisherConfig4 = publisherConfig.clone(); - publisherConfig4.setDestinationName(queue6); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - publisherConfig4.setHostName(randomAMQPBrokerAddress.getHostText()); - publisherConfig4.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient publisherClient4 = new AndesClient(publisherConfig4, true); - publisherClient4.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClient2); - AndesClientUtils.shutdownClient(consumerClient3); - AndesClientUtils.shutdownClient(consumerClient4); - - Assert.assertEquals(publisherClient1.getSentMessageCount(), sendCount, "Message sending failed by publisherClient1."); - Assert.assertEquals(publisherClient2.getSentMessageCount(), sendCount, "Message sending failed by publisherClient2."); - Assert.assertEquals(publisherClient3.getSentMessageCount(), sendCount, "Message sending failed by publisherClient3."); - Assert.assertEquals(publisherClient4.getSentMessageCount(), sendCount, "Message sending failed by publisherClient4."); - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient1."); - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient2."); - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient3."); - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedCount, "Message receiving failed by consumerClient4."); - - long totalMessagesSent = publisherClient1.getSentMessageCount() + publisherClient2 - .getSentMessageCount() + publisherClient3.getSentMessageCount() + - publisherClient4.getSentMessageCount(); - - long totalMessagesReceived = consumerClient1.getReceivedMessageCount() + consumerClient2 - .getReceivedMessageCount() + consumerClient3.getReceivedMessageCount() + - consumerClient4.getReceivedMessageCount(); - - Assert.assertEquals(totalMessagesSent, totalMessagesReceived, "Message receiving failed " + - "by all consumers"); - Assert.assertEquals(totalMessagesSent, sendCount * 4, "Message receiving by all consumers" + - " does not match the message count " + - "that was sent"); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queue3), 0, "Messages left in database"); - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queue4), 0, "Messages left in database"); - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queue5), 0, "Messages left in database"); - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queue6), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queue3), 0, "Slots left in database"); - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queue4), 0, "Slots left in database"); - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queue5), 0, "Slots left in database"); - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queue6), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("singleQueue1") != null) { - tempAndesAdminClient.deleteQueue("singleQueue1"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue2") != null) { - tempAndesAdminClient.deleteQueue("singleQueue2"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue3") != null) { - tempAndesAdminClient.deleteQueue("singleQueue3"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue4") != null) { - tempAndesAdminClient.deleteQueue("singleQueue4"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue5") != null) { - tempAndesAdminClient.deleteQueue("singleQueue5"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue6") != null) { - tempAndesAdminClient.deleteQueue("singleQueue6"); - } - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/OrderGuaranteeTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/OrderGuaranteeTestCase.java deleted file mode 100644 index 744bdfb9..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/OrderGuaranteeTestCase.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.andes.kernel.AndesException; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes all order guaranteeing tests - */ -public class OrderGuaranteeTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Publish message to a single node and receive from the same node and check for any out of - * order delivery and message duplication. - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Same node ordered delivery test case") - @Parameters({"messageCount"}) - public void testSameNodeOrderedDelivery(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, AndesException, DataAccessUtilException, InterruptedException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - String queueName = "singleQueueOrder1"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluating - Assert.assertTrue(consumerClient.checkIfMessagesAreInOrder(), "Messages did not receive in order."); - Assert.assertEquals(consumerClient.checkIfMessagesAreDuplicated().size(), 0, "Messages are not duplicated."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - - } - - /** - * Publish message to a single node and receive from another node and check for any out of order - * delivery and message duplication. - * - * @param messageCount Number of message to send and receive - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Different node ordered delivery test case") - @Parameters({"messageCount"}) - public void testDifferentNodeOrderedDelivery(long messageCount) - throws AndesClientConfigurationException, XPathExpressionException, JMSException, NamingException, - IOException, AndesClientException, DataAccessUtilException, InterruptedException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - String queueName = "singleQueueOrder2"; - - HostAndPort consumerBrokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(consumerBrokerAddress.getHostText(), - consumerBrokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - consumerConfig.setFilePathToWriteReceivedMessages(AndesClientConstants.FILE_PATH_TO_WRITE_RECEIVED_MESSAGES); - - HostAndPort publisherBrokerAddress = getRandomAMQPBrokerAddress(); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(publisherBrokerAddress.getHostText(), - publisherBrokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluating - Assert.assertTrue(consumerClient.checkIfMessagesAreInOrder(), "Messages did not receive in order."); - Assert.assertEquals(consumerClient.checkIfMessagesAreDuplicated().size(), 0, "Messages are not duplicated."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("singleQueue1") != null) { - tempAndesAdminClient.deleteQueue("singleQueue1"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueue2") != null) { - tempAndesAdminClient.deleteQueue("singleQueue2"); - } - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAckMixTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAckMixTestCase.java deleted file mode 100644 index 473820e0..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAckMixTestCase.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Load test in MB clustering for queues with different acknowledge modes with the dropping of a - * receiver. - */ -public class QueueAckMixTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - private static final long SEND_COUNT = 100000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NO_OF_SUBSCRIBERS = 50; - private static final int NO_OF_PUBLISHERS = 50; - - private static final long NO_OF_RETURN_MESSAGES = SEND_COUNT / 10; - private static final int NO_OF_CLIENT_ACK_SUBSCRIBERS = NO_OF_SUBSCRIBERS / 10; - private static final int NO_OF_AUTO_ACK_SUBSCRIBERS = NO_OF_SUBSCRIBERS - NO_OF_CLIENT_ACK_SUBSCRIBERS; - - /** - * Initialize the test as super tenant user. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Send million messages via 50 publishers and Receive them via 50 AUTO_ACKNOWLEDGE subscribers and 10 - * CLIENT_ACKNOWLEDGE subscribers who receive 10% of the messages and check if AUTO_ACKNOWLEDGE subscribers - * receive all the messages. - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "50 publishers and Receive them via 50 AUTO_ACKNOWLEDGE subscribers and 10 " + - "CLIENT_ACKNOWLEDGE subscribers who receive 10% of the messages", enabled = true) - public void performMillionMessageTenPercentReturnTestCase() - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - - - String queueName = "TenPercentReturnQueue"; - - String randomInstanceKeyForReceiver = getRandomMBInstance(); - - AutomationContext tempContextForReceiver = getAutomationContextWithKey(randomInstanceKeyForReceiver); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(tempContextForReceiver.getInstance().getHosts().get("default"), - Integer.parseInt(tempContextForReceiver.getInstance().getPorts().get("amqp")), - ExchangeType - .QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(NO_OF_RETURN_MESSAGES); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - - AndesJMSConsumerClientConfiguration consumerReturnConfig = new AndesJMSConsumerClientConfiguration(tempContextForReceiver.getInstance().getHosts().get("default"), - Integer.parseInt(tempContextForReceiver.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - consumerReturnConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerReturnConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - consumerReturnConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - - String randomInstanceKeyForSender = getRandomMBInstance(); - - AutomationContext tempContextForSender = getAutomationContextWithKey(randomInstanceKeyForSender); - - - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(tempContextForSender.getInstance().getHosts().get("default"), - Integer.parseInt(tempContextForSender.getInstance().getPorts().get("amqp")), - ExchangeType - .QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - AndesClient consumerClient = new AndesClient(consumerConfig, NO_OF_AUTO_ACK_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient consumerReturnClient = new AndesClient(consumerReturnConfig, NO_OF_CLIENT_ACK_SUBSCRIBERS, true); - consumerReturnClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NO_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerReturnClient); - - log.info("Total Received Messages [" + consumerClient.getReceivedMessageCount() + "]"); - - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAutoAckSubscriberCloseTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAutoAckSubscriberCloseTestCase.java deleted file mode 100644 index 93ba9f7d..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAutoAckSubscriberCloseTestCase.java +++ /dev/null @@ -1,166 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Load test in MB clustering for queues using auto acknowledge. - */ -public class QueueAutoAckSubscriberCloseTestCase extends MBPlatformBaseTest { - - private static final long SEND_COUNT = 100000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NO_OF_SUBSCRIBERS = 50; - private static final int NO_OF_PUBLISHERS = 50; - private static final long NO_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS = 10; - private static final int NO_OF_SUBSCRIBERS_TO_CLOSE = NO_OF_SUBSCRIBERS / 10; - private static final long NO_OF_MESSAGES_TO_EXPECT = - EXPECTED_COUNT - NO_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS; - private static final int NO_OF_NON_CLOSING_SUBSCRIBERS = - NO_OF_SUBSCRIBERS - NO_OF_SUBSCRIBERS_TO_CLOSE; - - /** - * Initialize the test as super tenant user. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Create 50 subscriptions for a queue and publish one million messages. Then close 10% of the subscribers while - * messages are retrieving and check if all the messages are received by other subscribers. - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "50 subscriptions for a queue and 50 publishers. Then close " + - "10% of the subscribers ", enabled = true) - public void performMillionMessageTenPercentSubscriberCloseTestCase() - throws XPathExpressionException, AndesClientConfigurationException, NamingException, - JMSException, - IOException, AndesClientException { - - String randomInstanceKeyForReceiver = getRandomMBInstance(); - - AutomationContext tempContextForReceiver = - getAutomationContextWithKey(randomInstanceKeyForReceiver); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(tempContextForReceiver.getInstance() - .getHosts().get("default"), - Integer.parseInt(tempContextForReceiver - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.QUEUE, "TenPercentSubscriberCloseQueue"); - consumerConfig.setMaximumMessagesToReceived(NO_OF_MESSAGES_TO_EXPECT); - consumerConfig.setPrintsPerMessageCount(NO_OF_MESSAGES_TO_EXPECT / 10L); - - AndesJMSConsumerClientConfiguration consumerClosingConfig = - new AndesJMSConsumerClientConfiguration(tempContextForReceiver.getInstance() - .getHosts().get("default"), - Integer.parseInt(tempContextForReceiver - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.QUEUE, "TenPercentSubscriberCloseQueue"); - consumerClosingConfig - .setMaximumMessagesToReceived(NO_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS); - consumerClosingConfig - .setPrintsPerMessageCount(NO_OF_MESSAGES_TO_RECEIVE_BY_CLOSING_SUBSCRIBERS / 10L); - - String randomInstanceKeyForSender = getRandomMBInstance(); - AutomationContext tempContextForSender = - getAutomationContextWithKey(randomInstanceKeyForSender); - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(tempContextForSender.getInstance() - .getHosts().get("default"), - Integer.parseInt(tempContextForSender - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.QUEUE, "TenPercentSubscriberCloseQueue"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - AndesClient consumerClient = - new AndesClient(consumerConfig, NO_OF_NON_CLOSING_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient consumerClosingClient = - new AndesClient(consumerClosingConfig, NO_OF_SUBSCRIBERS_TO_CLOSE, true); - consumerClosingClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NO_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(consumerClosingClient); - - log.info("Total Received Messages [" + consumerClient.getReceivedMessageCount() + "]"); - - long totalReceivedMessages = - consumerClient.getReceivedMessageCount() + consumerClosingClient - .getReceivedMessageCount(); - - Assert.assertEquals(publisherClient - .getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(totalReceivedMessages, EXPECTED_COUNT, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAutoAckTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAutoAckTestCase.java deleted file mode 100644 index 350c785c..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueAutoAckTestCase.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Load test in MB clustering for queues with auto acknowledge. - */ -public class QueueAutoAckTestCase extends MBPlatformBaseTest { - - private static final long SEND_COUNT = 100000L; - private static final long EXPECTED_COUNT = SEND_COUNT; - private static final int NO_OF_SUBSCRIBERS = 50; - private static final int NO_OF_PUBLISHERS = 50; - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Test Sending million messages through 50 publishers and receive them through 50 subscribers. - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "50 publishers and 50 subscribers test case", enabled = true) - public void performMillionMessageTestCase() - throws XPathExpressionException, AndesClientConfigurationException, NamingException, - JMSException, - IOException, AndesClientException { - String randomInstanceKeyForReceiver = getRandomMBInstance(); - - AutomationContext tempContextForReceiver = getAutomationContextWithKey(randomInstanceKeyForReceiver); - - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(tempContextForReceiver.getInstance().getHosts().get("default"), - Integer.parseInt(tempContextForReceiver.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, "platformQueueAutoAck"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT); - consumerConfig.setPrintsPerMessageCount(EXPECTED_COUNT / 10L); - - - String randomInstanceKeyForSender = getRandomMBInstance(); - AutomationContext tempContextForSender = getAutomationContextWithKey(randomInstanceKeyForSender); - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(tempContextForSender.getInstance().getHosts().get("default"), - Integer.parseInt(tempContextForSender.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, "platformQueueAutoAck"); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - publisherConfig.setPrintsPerMessageCount(SEND_COUNT / 10L); - - AndesClient consumerClient = new AndesClient(consumerConfig, NO_OF_SUBSCRIBERS, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, NO_OF_PUBLISHERS, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - log.info("Total Received Messages [" + consumerClient.getReceivedMessageCount() + "]"); - - Assert.assertEquals(publisherClient.getSentMessageCount(), SEND_COUNT, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), EXPECTED_COUNT, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueClusterTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueClusterTestCase.java deleted file mode 100644 index 4516abee..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/QueueClusterTestCase.java +++ /dev/null @@ -1,282 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.andes.stub.admin.types.Queue; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; -import java.util.concurrent.TimeUnit; - -import static org.testng.Assert.assertTrue; - -/** - * Test class to test queues in clusters - */ -public class QueueClusterTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Send and receive messages in a single node for a queue - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws IOException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - */ - @Test(groups = "wso2.mb", description = "Single queue Single node send-receive test case") - @Parameters({"messageCount"}) - public void testSingleQueueSingleNodeSendReceive(long messageCount) - throws XPathExpressionException, AndesAdminServiceBrokerManagerAdminException, IOException, - AndesClientConfigurationException, NamingException, JMSException, AndesClientException, - DataAccessUtilException, InterruptedException { - - long sendCount = messageCount; - long expectedCount = messageCount; - long printRate = 10L; - String queueName = "clusterSingleQueue1"; - - String randomInstanceKey = getRandomMBInstance(); - - AutomationContext tempContext = getAutomationContextWithKey(randomInstanceKey); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setPrintsPerMessageCount(expectedCount / printRate); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - randomInstanceKey = getRandomMBInstance(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_RUN_TIME); - Queue queue = getAndesAdminClientWithKey(randomInstanceKey).getQueueByName(queueName); - assertTrue(queue.getQueueName().equalsIgnoreCase(queueName), "Queue created in MB node 1 not exist"); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printRate); - - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Creating the same queue in 2 different nodes. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @Test(groups = "wso2.mb", description = "Single queue replication") - public void testSingleQueueReplication() - throws AndesAdminServiceBrokerManagerAdminException, RemoteException, DataAccessUtilException, - InterruptedException { - - String queueName = "clusterSingleQueue2"; - String randomInstanceKey = getRandomMBInstance(); - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName(queueName) != null) { - tempAndesAdminClient.deleteQueue(queueName); - } - - tempAndesAdminClient.createQueue(queueName); - - randomInstanceKey = getRandomMBInstance(); - tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_RUN_TIME); - Queue queue = tempAndesAdminClient.getQueueByName(queueName); - - assertTrue(queue != null && queue.getQueueName().equalsIgnoreCase(queueName), - "Queue created in MB node instance not replicated in other MB node instance"); - - tempAndesAdminClient.deleteQueue(queueName); - - // Wait for queue delete notification to reach other node in the cluster - TimeUnit.SECONDS.sleep(1); - - randomInstanceKey = getRandomMBInstance(); - tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - queue = tempAndesAdminClient.getQueueByName(queueName); - - assertTrue(queue == null, "Queue deleted in MB node instance not replicated in other MB node instance"); - - } - - /** - * Send messages from one node and received messages from another node. - * - * @param messageCount number of message to send and receive - * @throws XPathExpressionException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws IOException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - */ - @Test(groups = "wso2.mb", description = "Single queue Multi node send-receive test case") - @Parameters({"messageCount"}) - public void testSingleQueueMultiNodeSendReceive(long messageCount) - throws XPathExpressionException, AndesAdminServiceBrokerManagerAdminException, IOException, - AndesClientConfigurationException, NamingException, JMSException, AndesClientException, - DataAccessUtilException, InterruptedException { - long sendCount = messageCount; - long expectedCount = messageCount; - long printRate = 10L; - String queueName = "clusterSingleQueue3"; - - String randomInstanceKey = getRandomMBInstance(); - - AutomationContext tempContext = getAutomationContextWithKey(randomInstanceKey); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setPrintsPerMessageCount(expectedCount / printRate); - - - randomInstanceKey = getRandomMBInstance(); - tempContext = getAutomationContextWithKey(randomInstanceKey); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), - ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printRate); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_RUN_TIME); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate message left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("clusterSingleQueue1") != null) { - tempAndesAdminClient.deleteQueue("clusterSingleQueue1"); - } - - if (tempAndesAdminClient.getQueueByName("clusterSingleQueue2") != null) { - tempAndesAdminClient.deleteQueue("clusterSingleQueue2"); - } - - if (tempAndesAdminClient.getQueueByName("clusterSingleQueue3") != null) { - tempAndesAdminClient.deleteQueue("clusterSingleQueue3"); - } - } - -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/SubscriptionDisconnectingTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/SubscriptionDisconnectingTestCase.java deleted file mode 100644 index c5bbf3b8..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/SubscriptionDisconnectingTestCase.java +++ /dev/null @@ -1,277 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering; - -import com.google.common.net.HostAndPort; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes subscription disconnecting and reconnecting tests - */ -public class SubscriptionDisconnectingTestCase extends MBPlatformBaseTest { - - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - super.initAndesAdminClients(); - } - - /** - * Publish messages to a single node and receive from the same node while reconnecting 4 times. - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Same node subscription reconnecting test") - @Parameters({"messageCount"}) - public void testSameNodeSubscriptionReconnecting(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - - long sendCount = messageCount; - long expectedCount = sendCount / 4; - long printDivider = 10L; - String queueName = "singleQueueSubscription1"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, "Message receiving failed for consumerClient1"); - - AndesClient consumerClient2 = new AndesClient(consumerConfig, true); - consumerClient2.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedCount, "Message receiving failed for consumerClient2"); - - AndesClient consumerClient3 = new AndesClient(consumerConfig, true); - consumerClient3.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient3, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedCount, "Message receiving failed for consumerClient3"); - - AndesClient consumerClient4 = new AndesClient(consumerConfig, true); - consumerClient4.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient4, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedCount, "Message receiving failed for consumerClient4"); - - long totalMessagesReceived = consumerClient1.getReceivedMessageCount() + consumerClient2.getReceivedMessageCount() + - consumerClient3.getReceivedMessageCount() + consumerClient4 - .getReceivedMessageCount(); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(totalMessagesReceived, expectedCount * 4, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Publish messages to a single node and receive from random nodes while reconnecting 4 times. - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws CloneNotSupportedException - */ - @Test(groups = "wso2.mb", description = "Random node subscription reconnecting test") - @Parameters({"messageCount"}) - public void testDifferentNodeSubscriptionReconnecting(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, CloneNotSupportedException, AndesClientException, DataAccessUtilException { - long sendCount = messageCount; - long expectedCount = sendCount / 4; - long printDivider = 10L; - String queueName = "singleQueueSubscription2"; - - HostAndPort brokerAddress = getRandomAMQPBrokerAddress(); - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(brokerAddress.getHostText(), - brokerAddress.getPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - AndesClient consumerClient1 = new AndesClient(consumerConfig, true); - consumerClient1.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient1, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient1.getReceivedMessageCount(), expectedCount, - "Message " + "receiving failed for consumerClient1"); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig.clone(); - HostAndPort randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig2.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig2.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient2, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient2.getReceivedMessageCount(), expectedCount, "Message " + - "receiving " + - "failed for" + - " consumerClient2"); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig3.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig3.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient3, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient3.getReceivedMessageCount(), expectedCount, - "Message " + "receiving failed for consumerClient3"); - - AndesJMSConsumerClientConfiguration consumerConfig4 = consumerConfig.clone(); - randomAMQPBrokerAddress = getRandomAMQPBrokerAddress(); - consumerConfig4.setHostName(randomAMQPBrokerAddress.getHostText()); - consumerConfig4.setPort(randomAMQPBrokerAddress.getPort()); - AndesClient consumerClient4 = new AndesClient(consumerConfig4, true); - consumerClient4.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient4, AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(consumerClient4.getReceivedMessageCount(), expectedCount, - "Message receiving failed for consumerClient4"); - - long totalMessagesReceived = consumerClient1.getReceivedMessageCount() + consumerClient2.getReceivedMessageCount() + - consumerClient3.getReceivedMessageCount() + consumerClient4 - .getReceivedMessageCount(); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(totalMessagesReceived, expectedCount * 4, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(queueName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(queueName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() throws AndesAdminServiceBrokerManagerAdminException, RemoteException { - - String randomInstanceKey = getRandomMBInstance(); - - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - - if (tempAndesAdminClient.getQueueByName("singleQueueSubscription1") != null) { - tempAndesAdminClient.deleteQueue("singleQueueSubscription1"); - } - - if (tempAndesAdminClient.getQueueByName("singleQueueSubscription2") != null) { - tempAndesAdminClient.deleteQueue("singleQueueSubscription2"); - } - } -} \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicMessageDeliveringTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicMessageDeliveringTestCase.java deleted file mode 100644 index 361cea3d..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicMessageDeliveringTestCase.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.durable.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class performs tests related to message delivery of durable topics - */ -public class DurableTopicMessageDeliveringTestCase extends MBPlatformBaseTest { - - private AutomationContext automationContext; - private TopicAdminClient topicAdminClient; - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContext = getAutomationContextWithKey("mb002"); - topicAdminClient = new TopicAdminClient(automationContext.getContextUrls().getBackEndUrl(), - super.login(automationContext)); - - } - - /** - * Subscribe to a durable topic and publish messages to that topic - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws XPathExpressionException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - @Parameters({"messageCount"}) - public void pubSubDurableTopicTestCase(long messageCount) - throws AndesClientConfigurationException, NamingException, JMSException, XPathExpressionException, - IOException, AndesClientException, DataAccessUtilException { - - long sendCount = messageCount; - long expectedCount = messageCount; - String destinationName = "durableTopicMessageDelivering"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - consumerConfig.setDurable(true, "durableTopicSub5"); // durable topic - consumerConfig - .setUnSubscribeAfterEachMessageCount(expectedCount); // Un-Subscribes messages at this message count - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating andes client - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate message left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - topicAdminClient.removeTopic("durableTopicMessageDelivering"); - - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicSubscriptionOnlyTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicSubscriptionOnlyTestCase.java deleted file mode 100644 index c640a838..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicSubscriptionOnlyTestCase.java +++ /dev/null @@ -1,393 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.durable.topic; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * This class holds set of test cases to verify if durable topic - * subscriptions cluster wise happen according to specification. - */ -public class DurableTopicSubscriptionOnlyTestCase extends MBPlatformBaseTest { - private String hostNode1; - private String hostNode2; - private int portInNode1; - private int portInNode2; - private TopicAdminClient topicAdminClient; - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XMLStreamException - * @throws URISyntaxException - * @throws SAXException - * @throws AutomationUtilException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, LoginAuthenticationExceptionException, IOException, - XMLStreamException, URISyntaxException, SAXException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - AutomationContext automationContext1 = getAutomationContextWithKey("mb002"); - AutomationContext automationContext2 = getAutomationContextWithKey("mb003"); - hostNode1 = automationContext1.getInstance().getHosts().get("default"); - hostNode2 = automationContext2.getInstance().getHosts().get("default"); - portInNode1 = Integer.parseInt(automationContext1.getInstance().getPorts().get("amqp")); - portInNode2 = Integer.parseInt(automationContext2.getInstance().getPorts().get("amqp")); - topicAdminClient = new TopicAdminClient(automationContext1.getContextUrls().getBackEndUrl(), - super.login(automationContext1)); - - super.initAndesAdminClients(); - } - - /** - * Create with sub id= x topic=y. Disconnect and try to connect again from a different node. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Reconnect to topic with same sub ID after " + - "disconnecting", enabled = true) - public void subscribeDisconnectAndSubscribeAgainTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "durableTopic1"); - consumerConfig.setDurable(true, "durableTopic1"); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "durableTopic1"); - secondConsumerConfig.setDurable(true, "durableTopic1"); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - initialConsumerClient.getConsumers().get(0).unSubscribe(false); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(secondConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - secondaryConsumerClient.getConsumers().get(0).unSubscribe(false); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - } - - /** - * Create with sub id= x topic=y. try another subscription from a different node with same - * params.Should rejects the subscription - * - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Try to connect to a topic with same subscription ID " + - "which is already a subscription", enabled = true, - expectedExceptions = JMSException.class, expectedExceptionsMessageRegExp = ".*it already has an existing exclusive consumer.*") - public void multipleSubsWithSameIdTest() - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesClientException { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "durableTopic2"); - consumerConfig.setDurable(true, "durableTopic2Sub"); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "durableTopic2"); - secondConsumerConfig.setDurable(true, "durableTopic2Sub"); - - AndesClient secondaryConsumerClient = new AndesClient(secondConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * Create with sub id= x topic=y. try another subscription from a different node with a - * different subscription ID.Should allow the subscription - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Try to connect to same topic with different " + - "subscription IDs", enabled = true) - public void multipleSubToSameTopicTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "durableTopic3"); - consumerConfig.setDurable(true, "durableTopic3Sub1"); - - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "durableTopic3"); - secondaryConsumerConfig.setDurable(true, "durableTopic3Sub2"); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * Create with sub id= x topic=y. Unsubscribe and try to connect another subscription for the - * same topic from a different node. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Reconnect to topic with different sub ID after " + - "unsubscribing", enabled = true) - public void subscribeUnsubscribeWithDifferentIDsTest() - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "durableTopic5"); - consumerConfig.setDurable(true, "durableTopic5Sub1"); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "durableTopic5"); - secondConsumerConfig.setDurable(true, "durableTopic5Sub2"); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - initialConsumerClient.stopClient(); - - - AndesClient secondaryConsumerClient = new AndesClient(secondConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * Create with sub id= x topic=y. Unsubscribe. Then try to connect with the same subscription - * to a different topic from another node - * - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesClientConfigurationException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Connect to a different topic with same sub ID after " + - "unsubscribing", enabled = true) - public void sameIdDifferentTopicsTest() - throws JMSException, NamingException, IOException, AndesClientConfigurationException, - AndesClientException { - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "durableTopic6"); - consumerConfig.setDurable(true, "durableTopic6Sub1"); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "durableTopic6"); - secondConsumerConfig.setDurable(true, "durableTopic7"); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(consumerConfig, true); - initialConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondaryConsumerClient = new AndesClient(secondConsumerConfig, true); - secondaryConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - initialConsumerClient.stopClient(); - secondaryConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * Create with sub id= x topic=y - * Create with sub id= z topic=y - * Create a normal topic subscriber topic=y - * Create a normal queue subscriber queue=y - * - * @throws JMSException - * @throws NamingException - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Create all kinds of subscriptions for same " + - "topic/queue name", enabled = true) - public void allKindOfSubscriptionsTest() - throws JMSException, NamingException, XPathExpressionException, - AndesClientConfigurationException, IOException, AndesClientException { - - // Creating configurations - AndesJMSConsumerClientConfiguration firstConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "wso2"); - firstConsumerConfig.setDurable(true, "wso2Sub1"); - - AndesJMSConsumerClientConfiguration secondConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "wso2"); - secondConsumerConfig.setDurable(true, "wso2Sub2"); - - AndesJMSConsumerClientConfiguration thirdConsumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "wso2"); - - String randomInstanceKey = getRandomMBInstance(); - AutomationContext tempContext = getAutomationContextWithKey(randomInstanceKey); - - AndesJMSConsumerClientConfiguration forthConsumerConfig = - new AndesJMSConsumerClientConfiguration(tempContext.getInstance().getHosts().get("default"), - Integer.parseInt(tempContext.getInstance().getPorts().get("amqp")), ExchangeType.QUEUE, "wso2"); - - // Creating clients - AndesClient firstConsumerClient = new AndesClient(firstConsumerConfig, true); - firstConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient secondConsumerClient = new AndesClient(secondConsumerConfig, true); - secondConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient thirdConsumerClient = new AndesClient(thirdConsumerConfig, true); - thirdConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - AndesClient forthConsumerClient = new AndesClient(forthConsumerConfig, true); - forthConsumerClient.startClient(); - - AndesClientUtils.sleepForInterval(2000L); - - // Stopping the clients - firstConsumerClient.stopClient(); - secondConsumerClient.stopClient(); - thirdConsumerClient.stopClient(); - forthConsumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(2000L); - } - - /** - * Cleanup after running tests. - * - * @throws Exception - */ - @AfterClass(alwaysRun = true) - public void destroy() throws Exception { - - //deleting the topics created - topicAdminClient.removeTopic("durableTopic1"); - topicAdminClient.removeTopic("durableTopic2"); - topicAdminClient.removeTopic("durableTopic3"); - topicAdminClient.removeTopic("durableTopic4"); - topicAdminClient.removeTopic("durableTopic5"); - topicAdminClient.removeTopic("durableTopic6"); - topicAdminClient.removeTopic("durableTopic7"); - topicAdminClient.removeTopic("wso2"); - - //deleting the queue created - String randomInstanceKey = getRandomMBInstance(); - AndesAdminClient tempAndesAdminClient = getAndesAdminClientWithKey(randomInstanceKey); - if (null != tempAndesAdminClient.getQueueByName("wso2")) { - tempAndesAdminClient.deleteQueue("wso2"); - } - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicSubscriptionTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicSubscriptionTestCase.java deleted file mode 100644 index f4fa20af..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/durable/topic/DurableTopicSubscriptionTestCase.java +++ /dev/null @@ -1,142 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.mb.platform.tests.clustering.durable.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; - -/** - * Durable test cases with subscribers and publishers - */ -public class DurableTopicSubscriptionTestCase extends MBPlatformBaseTest { - private String hostNode1; - private String hostNode2; - private int portInNode1; - private int portInNode2; - private TopicAdminClient topicAdminClient; - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XMLStreamException - * @throws URISyntaxException - * @throws SAXException - * @throws AutomationUtilException - */ - @BeforeClass(alwaysRun = true) - public void init() throws XPathExpressionException, LoginAuthenticationExceptionException, IOException, - XMLStreamException, URISyntaxException, SAXException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - AutomationContext automationContext1 = getAutomationContextWithKey("mb002"); - AutomationContext automationContext2 = getAutomationContextWithKey("mb003"); - hostNode1 = automationContext1.getInstance().getHosts().get("default"); - hostNode2 = automationContext2.getInstance().getHosts().get("default"); - portInNode1 = Integer.parseInt(automationContext1.getInstance().getPorts().get("amqp")); - portInNode2 = Integer.parseInt(automationContext2.getInstance().getPorts().get("amqp")); - topicAdminClient = new TopicAdminClient(automationContext1.getContextUrls().getBackEndUrl(), - super.login(automationContext1)); - - super.initAndesAdminClients(); - } - - /** - * Create with sub id= x topic=y to node 'mb002'. Publish from 'mb003'. - * - * @throws JMSException - * @throws NamingException - * @throws AndesClientConfigurationException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Reconnect to topic with same sub ID after " + - "disconnecting", enabled = true) - @Parameters({"messageCount"}) - public void subscribeDisconnectAndSubscribeAgainTest(long messageCount) - throws JMSException, NamingException, AndesClientConfigurationException, IOException, - AndesClientException { - - long sendCount = messageCount; - long expectedCount = messageCount; - - // Creating configurations - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(hostNode1, portInNode1, ExchangeType.TOPIC, "durableTopicPublishing1"); - consumerConfig.setDurable(true, "durableTopicPublisherID1"); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(hostNode2, portInNode2, ExchangeType.TOPIC, "durableTopicPublishing1"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - } - - /** - * Cleanup after running tests. - * - * @throws Exception - */ - @AfterClass(alwaysRun = true) - public void destroy() throws Exception { - //deleting the topics created - topicAdminClient.removeTopic("durableTopicPublishing1"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/ClusteredCleanSessionTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/ClusteredCleanSessionTestCase.java deleted file mode 100644 index 258c1e67..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/ClusteredCleanSessionTestCase.java +++ /dev/null @@ -1,374 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.mqtt; - -import java.util.concurrent.TimeUnit; - -import javax.xml.xpath.XPathExpressionException; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.mb.integration.common.clients.AndesMQTTClient; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.platform.tests.clustering.mqtt.DataProvider.QualityOfServiceDataProvider; - -/** - * Verify MQTT clean session option by sending messages with clean session = - * false - * and disconnecting the subscriber. - */ -public class ClusteredCleanSessionTestCase extends MQTTPlatformBaseTest { - - /** - * Holds information about cluster marked with 'mb002' in automation.xml. - */ - private AutomationContext automationContextForMB2; - - /** - * Holds information about cluster marked with 'mb003' in automation.xml. - */ - private AutomationContext automationContextForMB3; - - @BeforeClass(alwaysRun = true) - public void prepare() throws Exception { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - automationContextForMB2 = getAutomationContextWithKey("mb002"); - automationContextForMB3 = getAutomationContextWithKey("mb003"); - - } - - /** - * 1. Subscribe to a topic with given Quality of Service setting clean - * session to false. - * 2. Close the subscriber without unsubscribing. - * 3. Publish 3 messages to the same topic one from each QOS level. - * 3. Resubscribe with the same settings. - * 4. Verify that two messages have been received which were published when - * client was disconnected which belongs - * to qos 1 and 2. - * - * @param qualityOfService - * The Quality of Service of the subscriber - * @throws XPathExpressionException - * @throws InterruptedException - */ - @Test(groups = { "wso2.mb", "mqtt" }, dataProvider = "QualityOfServiceDataProvider", enabled = false, - dataProviderClass = QualityOfServiceDataProvider.class) - public void performCleanSessionSingleNodeTestCase(QualityOfService qualityOfService) throws MqttException, - XPathExpressionException, - InterruptedException { - int noOfMessagesPerQos = 1; - int noOfPublishersPerQos = 1; - int expectedCount = noOfMessagesPerQos * 1; // Only qos 1 and 2 messages - // are expected - - // QOS 0 subscribers shouldn't receive messages after re-connect. - if (qualityOfService == QualityOfService.MOST_ONCE) { - expectedCount = 0; - } - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topic = "CleanSessionSingleNodeTestTopic"; - - MQTTClientConnectionConfiguration configuration = buildConfiguration(automationContextForMB2); - configuration.setCleanSession(false); - - // create the subscribers - mqttClientEngine.createSubscriberConnection(configuration, topic, qualityOfService, false, ClientMode.BLOCKING); - - // mqttClientEngine.shutdown(); - - // Directly get the 0'th value from the list since we only subscribed - // one subscriber - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - // Disconnect the subscriber - subscriber.disconnect(); - - TimeUnit.MINUTES.sleep(5); - - // Publish qos 0 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configuration); - - // Publish qos 1 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configuration); - - // Publish qos 2 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configuration); - - // Re connect the subscriber and subscribe to the same topic - // subscriber.connect(); - // subscriber.subscribe(); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), expectedCount, - "Incorrect number of messages were " + - "received after reconnecting the subscriber"); - } - - /** - * 1. Subscribe to a topic with given Quality of Service setting clean - * session to false. - * 2. Close the subscriber without unsubscribing. - * 3. Publish 3 messages to the same topic one from each QOS level. - * 3. Resubscribe with the same settings. - * 4. Verify that two messages have been received which were published when - * client was disconnected which belongs - * to qos 1 and 2. - * - * @param qualityOfService - * The Quality of Service of the subscriber - * @throws XPathExpressionException - */ - @Test(groups = { "wso2.mb", "mqtt" }, dataProvider = "QualityOfServiceDataProvider", enabled = false, - dataProviderClass = QualityOfServiceDataProvider.class) - public void performCleanSessionTwoNodeTestCase(QualityOfService qualityOfService) throws MqttException, - XPathExpressionException, - Exception { - - int noOfMessagesPerQos = 1; - int noOfPublishersPerQos = 1; - int expectedCount = noOfMessagesPerQos * 2; // Only qos 1 and 2 messages - // are expected - - // QOS 0 subscribers shouldn't receive messages after re-connect. - if (qualityOfService == QualityOfService.MOST_ONCE) { - expectedCount = 0; - } - - MQTTClientEngine mqttClientEngineForNode2 = new MQTTClientEngine(); - String topic = "CleanSessssionTwoNodeTestTopic"; - MQTTClientConnectionConfiguration configurationForNode2 = buildConfiguration(automationContextForMB2); - configurationForNode2.setCleanSession(false); - - // create the subscribers - mqttClientEngineForNode2.createSubscriberConnection(configurationForNode2, topic, qualityOfService, true, - ClientMode.BLOCKING); - - mqttClientEngineForNode2.shutdown(); - - // Directly get the 0'th value from the list since we only subscribed - // one subscriber - AndesMQTTClient subscriber = mqttClientEngineForNode2.getSubscriberList().get(0); - - // Disconnect the subscriber - subscriber.disconnect(); - - TimeUnit.SECONDS.sleep(5); - - MQTTClientConnectionConfiguration configurationForNode3 = buildConfiguration(automationContextForMB3); - - MQTTClientEngine mqttClientEngineForNode3 = new MQTTClientEngine(); - // Publish qos 0 message - mqttClientEngineForNode3.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, - configurationForNode3); - - // Publish qos 1 message - mqttClientEngineForNode3.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, - configurationForNode3); - - // Publish qos 2 message - mqttClientEngineForNode3.createPublisherConnection(topic, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, - configurationForNode3); - - subscriber.connect(); - subscriber.subscribe(); - - mqttClientEngineForNode2.waitUntilAllMessageReceivedAndShutdownClients(); - mqttClientEngineForNode3.shutdown(); - Assert.assertEquals(subscriber.getReceivedMessageCount(), expectedCount, - "Incorrect number of messages were " + - "received after reconnecting the subscriber"); - } - - /** - * 1. Subscribe to a topic with given Quality of Service setting clean - * session to false. - * 2. Close the subscriber - * 3. Un-subscribe from the relevant topic - * 3. Publish 3 messages to the same topic one from each QOS level. - * 3. Resubscribe with the same settings. - * 4. Verify that the messages which were sent had not being consumed - * - * @param qualityOfService - * The Quality of Service of the subscriber - * @throws XPathExpressionException - * @throws InterruptedException - */ - @Test(groups = { "wso2.mb", "mqtt" }, dataProvider = "QualityOfServiceDataProvider", enabled = false, - dataProviderClass = QualityOfServiceDataProvider.class) - public void performCleanSessionWithUnSubscriptionSingleNodeTestCase(QualityOfService qualityOfService) - throws MqttException, - XPathExpressionException, - InterruptedException - { - int noOfMessagesPerQos = 1; - int noOfPublishersPerQos = 1; - // Only qos 1 and 2 messages are expected, always we should not expect - // to receive - // messages after un-subscribing - int expectedCount = 0; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topic = "CleanSessionWithSubscribeSingleNodeTestTopic"; - - MQTTClientConnectionConfiguration configuration = buildConfiguration(automationContextForMB2); - configuration.setCleanSession(false); - - // create the subscribers - mqttClientEngine.createSubscriberConnection(configuration, topic, qualityOfService, false, ClientMode.BLOCKING); - - // Directly get the 0'th value from the list since we only subscribed - // one subscriber - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - // Will unsubscribe - subscriber.unsubscribe(); - // Disconnect the subscriber - subscriber.disconnect(); - - // Will shut-down any connected client - mqttClientEngine.shutdown(); - - TimeUnit.SECONDS.sleep(5); - - // Publish qos 0 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configuration); - - // Publish qos 1 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configuration); - - // Publish qos 2 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configuration); - - // Re connect the subscriber and subscribe to the same topic - subscriber.connect(); - subscriber.subscribe(); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), expectedCount, - "Incorrect number of messages were " + - "received after connecting to the subscriber"); - } - - /** - * 1. Subscribe to a topic with given Quality of Service setting clean - * session to false. - * 2. Close the subscriber - * 3. Un-subscribe from the relevant topic - * 3. Publish 3 messages to the same topic one from each QOS level. - * 3. Resubscribe with the same settings. - * 4. Verify that the messages which were sent had not being consumed - * - * @param qualityOfService - * The Quality of Service of the subscriber - * @throws XPathExpressionException - */ - @Test(groups = { "wso2.mb", "mqtt" }, dataProvider = "QualityOfServiceDataProvider", enabled = false, - dataProviderClass = QualityOfServiceDataProvider.class) - public void performCleanSessionWithUnSubscriptionTwoNodeTestCase(QualityOfService qualityOfService) - throws MqttException, - XPathExpressionException, - Exception { - int noOfMessagesPerQos = 1; - int noOfPublishersPerQos = 1; - // Only qos 1 and 2 messages are expected, always we should not expect - // to receive - // messages after un-subscribing - int expectedCount = 0; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - String topic = "CleanSessionWithSubscribeTwoNodeTestTopic"; - - MQTTClientConnectionConfiguration configuration = buildConfiguration(automationContextForMB2); - configuration.setCleanSession(false); - - // create the subscribers - mqttClientEngine.createSubscriberConnection(configuration, topic, qualityOfService, false, ClientMode.BLOCKING); - - // Directly get the 0'th value from the list since we only subscribed - // one subscriber - AndesMQTTClient subscriber = mqttClientEngine.getSubscriberList().get(0); - - // Will unsubscribe - subscriber.unsubscribe(); - // Disconnect the subscriber - subscriber.disconnect(); - - TimeUnit.SECONDS.sleep(5); - - // Will shut-down any connected client - mqttClientEngine.shutdown(); - - MQTTClientConnectionConfiguration configurationForNode3 = buildConfiguration(automationContextForMB3); - - // Publish qos 0 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.MOST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configurationForNode3); - - // Publish qos 1 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configurationForNode3); - - // Publish qos 2 message - mqttClientEngine.createPublisherConnection(topic, QualityOfService.EXACTLY_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishersPerQos, - noOfMessagesPerQos, ClientMode.BLOCKING, configurationForNode3); - - // Re connect the subscriber and subscribe to the same topic - subscriber.connect(); - subscriber.subscribe(); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(subscriber.getReceivedMessageCount(), expectedCount, - "Incorrect number of messages were " + - "received after connecting to the subscriber"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/ClusteredSecurityTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/ClusteredSecurityTestCase.java deleted file mode 100644 index fc056f30..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/ClusteredSecurityTestCase.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.mqtt; - -import java.util.List; - -import javax.xml.xpath.XPathExpressionException; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Factory; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.automation.engine.context.beans.Tenant; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.operations.mqtt.blocking.MQTTBlockingPublisherClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; - - -/** - * Includes test cases to verify MQTT security. Following test cases will run all modes in {@link TestUserMode} - */ -public class ClusteredSecurityTestCase extends MQTTPlatformBaseTest { - - private static final Log log = LogFactory.getLog(ClusteredSecurityTestCase.class); - - /** - * Holds information about cluster marked with 'mb002' in automation.xml. - */ - private AutomationContext automationContextForMB2; - - /** - * The current test user mode - */ - private TestUserMode userMode; - - - /** - * Instantiates the testcase class with specified user mode - * @param userMode supplied user mode ( by data provider) - */ - @Factory(dataProvider = "userModeProvider") - public ClusteredSecurityTestCase(TestUserMode userMode){ - - this.userMode = userMode; - - } - - /** - * Initialize super class. - * @throws XPathExpressionException - * - * @throws Exception - */ - @BeforeClass(alwaysRun = true) - public void prepare() throws XPathExpressionException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - automationContextForMB2 = getAutomationContextWithKey("mb002"); - } - - /** - * Try to connect to MB using a invalid user name and a password for in - * super user mode and another modes specified in - * {@link ClusteredSecurityTestCase#userModeProvider()}. - * - * @throws MqttException this is expected only if it's due to a bad user name or a password - * @throws XPathExpressionException if test frame work can't read the configurations. - */ - @Test(groups = { "wso2.mb", "mqtt" }, description = "Try to connect to MB using a invalid user name and a password", - expectedExceptions = MqttException.class, expectedExceptionsMessageRegExp = ".*Bad user name or password.*") - public void performInvalidUserCredentialsTestCase() throws MqttException, XPathExpressionException { - String topic = "topic"; - int inValidNumberOfMessages = 1; // we don't really expect to send - // messages. - - String invalidUserName = "invalidUserName"; - Tenant currentTenant = automationContextForMB2.getContextTenant(); - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = - mqttClientEngine.getConfigurations(automationContextForMB2); - - if ( automationContextForMB2.getSuperTenant().getDomain().equals(currentTenant.getDomain())){ - invalidUserName = invalidUserName + "@" + currentTenant.getDomain(); - } - - configuration.setBrokerUserName(invalidUserName); - configuration.setBrokerPassword("invalidPassword"); - - new MQTTBlockingPublisherClient(configuration, mqttClientEngine.generateClientID(), topic, - QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, inValidNumberOfMessages); - - } - - - /** - * Send a single mqtt message on qos {@link QualityOfService#LEAST_ONCE} and - * receive it. However testcase will be run for all user modes specified in - * {@link ClusteredSecurityTestCase#userModeProvider()} - * - * @throws MqttException if an error occurs - * @throws XPathExpressionException if test frame work can't read the configurations. - */ - @Test(groups = {"wso2.mb", "mqtt"}, description = "Single mqtt message send receive test case with non admin user, super tenant") - public void performBasicSendReceiveTestCaseWithNonAdminCredentials() throws MqttException, XPathExpressionException { - String topic = "topic"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration configuration = - mqttClientEngine.getConfigurations(automationContextForMB2); - - Tenant tenant = automationContextForMB2.getContextTenant(); - User user = tenant.getContextUser(); - configuration.setBrokerUserName(user.getUserName()); - configuration.setBrokerPassword(user.getPassword()); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(topic, QualityOfService.LEAST_ONCE, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, configuration); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - mqttClientEngine.createPublisherConnection(topic, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, configuration); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - @DataProvider - private static TestUserMode[][] userModeProvider() { - return new TestUserMode[][] { new TestUserMode[]{TestUserMode.SUPER_TENANT_ADMIN}, - new TestUserMode[]{TestUserMode.SUPER_TENANT_USER}, - new TestUserMode[]{TestUserMode.TENANT_ADMIN}, - new TestUserMode[]{TestUserMode.TENANT_USER},}; - } - - - - -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/DataProvider/QualityOfServiceDataProvider.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/DataProvider/QualityOfServiceDataProvider.java deleted file mode 100644 index c0f36197..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/DataProvider/QualityOfServiceDataProvider.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.mqtt.DataProvider; - -import org.testng.annotations.DataProvider; -import org.wso2.mb.integration.common.clients.QualityOfService; - -/** - * Data provider to feed Quality Of Service values to test cases. - */ -public class QualityOfServiceDataProvider { - - /** - * Get the Quality Of Service set to run tests. - * - * @return Quality Of Service set to test - */ - @DataProvider(name = "QualityOfServiceDataProvider") - public static Object[][] createData() { - return new Object[][]{ - {QualityOfService.MOST_ONCE}, - {QualityOfService.LEAST_ONCE}, - {QualityOfService.EXACTLY_ONCE} - }; - } - -} - - diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/MQTTClusterTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/MQTTClusterTestCase.java deleted file mode 100644 index a8637624..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/MQTTClusterTestCase.java +++ /dev/null @@ -1,249 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.mqtt; - -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; -import java.util.List; - -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.platform.tests.clustering.mqtt.DataProvider.QualityOfServiceDataProvider; -import org.xml.sax.SAXException; - -/** - * Test class to test topics in clusters - */ -public class MQTTClusterTestCase extends MQTTPlatformBaseTest { - - /** - * Holds information about cluster marked with 'mb002' in automation.xml. - */ - private AutomationContext automationContextForMB2; - /** - * Holds information about cluster marked with 'mb003' in automation.xml. - */ - private AutomationContext automationContextForMB3; - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContextForMB2 = getAutomationContextWithKey("mb002"); - automationContextForMB3 = getAutomationContextWithKey("mb003"); - - } - - /** - * Send message to a node and receive from a another node. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", - description = "Single topic two node send-receive test case", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicTwoNodeSendReceive(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException{ - String topic = "testSingleTopicTwoNodeSendReceive"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode2 = - buildConfiguration(automationContextForMB2); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode3 = - buildConfiguration(automationContextForMB3); - - // create the subscribers - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfigurationForNode3); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - /** - * Send and receive messages in a single node for a topic - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", - description = "Single topic single node send-receive test case", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicSingleNodeSendReceive(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException{ - String topic = "testSingleTopicSingleNodeSendReceive"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfiguration = buildConfiguration(automationContextForMB2); - - // create the subscribers - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfiguration); - - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfiguration); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - /** - * Send 100 mqtt message on all QOS levels and receive them from a single node. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = { "wso2.mb", "mqtt" }, description = "Multiple mqtt messages sent/received from single node", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicSingleNodeMultipleMessagesTestCase(QualityOfService qualityOfService) - throws MqttException, - XPathExpressionException { - String topic = "testSingleTopicSingleNodeMultipleMessagesTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 100; - boolean saveMessages = true; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfiguration = buildConfiguration(automationContextForMB2); - //create the subscribers - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfiguration); - - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfiguration); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - Assert.assertEquals(mqttClientEngine.getReceivedMessageCount(), noOfMessages, - "The received message count is incorrect."); - - } - - - /** - * Send 100 mqtt message on all QOS levels and receive them from different nodes. - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = { "wso2.mb", "mqtt" }, description = "Multiple mqtt messages sent/received from two nodes", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicTwoNodeMultipleMessagesTestCase(QualityOfService qualityOfService) - throws MqttException, - XPathExpressionException { - String topic = "testSingleTopicTwoNodeMultipleMessagesTestCase"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 100; - boolean saveMessages = true; - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode2 = - buildConfiguration(automationContextForMB2); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode3 = - buildConfiguration(automationContextForMB3); - - // create the subscribers - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - // create the publishers and start publish - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfigurationForNode3); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/MQTTPlatformBaseTest.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/MQTTPlatformBaseTest.java deleted file mode 100644 index 01cc79da..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/MQTTPlatformBaseTest.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.mqtt; - -import javax.xml.xpath.XPathExpressionException; - -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; - - -/** - * Holds functionality common to all MQTT cluster tests classes. - */ -public class MQTTPlatformBaseTest extends MBPlatformBaseTest{ - - /** - * Builds a {@link MQTTClientConnectionConfiguration} with information in a {@link AutomationContext} - * @param automationContext the automation context. - * @return a {@link MQTTClientConnectionConfiguration} - * @throws XPathExpressionException an error - */ - protected MQTTClientConnectionConfiguration buildConfiguration(AutomationContext automationContext) - throws XPathExpressionException { - - MQTTClientConnectionConfiguration clientConnectionConfiguration = new MQTTClientConnectionConfiguration(); - - String mbServer2Host = automationContext.getInstance().getHosts().get("default"); - String mbServer2Port = automationContext.getInstance().getPorts().get("mqtt"); - - clientConnectionConfiguration.setBrokerHost(mbServer2Host); - clientConnectionConfiguration.setBrokerPort(mbServer2Port); - clientConnectionConfiguration.setBrokerPassword(automationContext.getSuperTenant().getTenantAdmin() - .getPassword()); - clientConnectionConfiguration.setBrokerUserName(automationContext.getSuperTenant().getTenantAdmin() - .getUserName()); - clientConnectionConfiguration.setBrokerProtocol(MQTTConstants.BROKER_PROTOCOL); // default - // is - // tcp - clientConnectionConfiguration.setCleanSession(true); - - return clientConnectionConfiguration; - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/RetainClusterTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/RetainClusterTestCase.java deleted file mode 100644 index 1b616574..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/mqtt/RetainClusterTestCase.java +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.mqtt; - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.platform.tests.clustering.mqtt.DataProvider.QualityOfServiceDataProvider; -import org.xml.sax.SAXException; - -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.util.List; - - -/** - * Test class to test mqtt Retain feature in cluster environment - */ -public class RetainClusterTestCase extends MQTTPlatformBaseTest { - - - - /** - * Holds information about cluster marked with 'mb002' in automation.xml. - */ - private AutomationContext automationContextForMB2; - /** - * Holds information about cluster marked with 'mb003' in automation.xml. - */ - private AutomationContext automationContextForMB3; - - /** - * Prepare environment for tests. - * - * @throws javax.xml.xpath.XPathExpressionException - * @throws java.net.URISyntaxException - * @throws org.xml.sax.SAXException - * @throws javax.xml.stream.XMLStreamException - * @throws org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException - * @throws java.io.IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContextForMB2 = getAutomationContextWithKey("mb002"); - automationContextForMB3 = getAutomationContextWithKey("mb003"); - - } - - /** - * Send and receive retain messages in a single node for a topic - * - * @throws org.eclipse.paho.client.mqttv3.MqttException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", - description = "Single topic Single node send-receive retain test case", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicSingleNodeSendReceiveRetainMessages(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException{ - String topic = "testSingleTopicSingleNodeSendReceiveRetain"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode2 = buildConfiguration(automationContextForMB2); - - // set retain flag in published message - clientConnectionConfigurationForNode2.setRetain(true); - - // create the publisher and send retain message - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - // create the subscriber - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - - - /** - * Send and receive retain messages in multiple node for a topic - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", - description = "Single topic two node send-receive test case", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicMultipleNodeSendReceiveRetainMessages(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException{ - String topic = "testSingleTopicMultipleNodeSendReceiveRetain_" + qualityOfService; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - boolean saveMessages = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode2 = - buildConfiguration(automationContextForMB2); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode3 = - buildConfiguration(automationContextForMB3); - - // set retain flag in published message - clientConnectionConfigurationForNode3.setRetain(true); - - // create publisher in node3 - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfigurationForNode3); - // create the subscriber in node2 - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), noOfMessages, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - - } - - - /** - * Remove retain message in multiple node for a topic - * - * @throws MqttException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", - description = "Single topic two node remove retain message test case", - dataProvider = "QualityOfServiceDataProvider", - dataProviderClass = QualityOfServiceDataProvider.class) - public void testSingleTopicMultipleNodeRemoveRetainMessage(QualityOfService qualityOfService) - throws MqttException, XPathExpressionException{ - String topic = "testSingleTopicMultipleNodeRemoveRetain"; - int noOfSubscribers = 1; - int noOfPublishers = 1; - int noOfMessages = 1; - int expectedNumberOfMessages = 0; - boolean saveMessages = true; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode2 = - buildConfiguration(automationContextForMB2); - MQTTClientConnectionConfiguration clientConnectionConfigurationForNode3 = - buildConfiguration(automationContextForMB3); - - // set retain flag in published message - clientConnectionConfigurationForNode3.setRetain(true); - - // send retain message to node3 with non-empty payload - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.TEMPLATE_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - // send retain message to node3 with empty payload. This should remove retain entry from broker. - mqttClientEngine.createPublisherConnection(topic, qualityOfService, - MQTTConstants.EMPTY_PAYLOAD, noOfPublishers, - noOfMessages, ClientMode.BLOCKING, clientConnectionConfigurationForNode3); - - // create the subscriber in node2 - mqttClientEngine.createSubscriberConnection(topic, qualityOfService, noOfSubscribers, saveMessages, - ClientMode.BLOCKING, clientConnectionConfigurationForNode2); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), expectedNumberOfMessages, "The received message count is incorrect."); - - } - - - - - - -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/DifferentAckModeTopicTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/DifferentAckModeTopicTestCase.java deleted file mode 100644 index bdb3338c..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/DifferentAckModeTopicTestCase.java +++ /dev/null @@ -1,362 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes test cases to test different ack modes for topics - */ -public class DifferentAckModeTopicTestCase extends MBPlatformBaseTest { - private AutomationContext automationContext; - private TopicAdminClient topicAdminClient; - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContext = getAutomationContextWithKey("mb002"); - - topicAdminClient = new TopicAdminClient(automationContext.getContextUrls().getBackEndUrl(), - super.login(automationContext)); - } - - /** - * Publish messages to a topic in single node and receive from the same node with - * session_transacted acknowledge mode - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "SESSION_TRANSACTED ack mode test case for topic", enabled = true) - @Parameters({"messageCount"}) - public void testSessionTransactedAckModeForTopic(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - String destinationName = "sessionTransactedAckTopic"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.SESSION_TRANSACTED); - consumerConfig.setCommitAfterEachMessageCount(1); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } - - /** - * Publish messages to a topic in single node and receive from the same node with - * auto acknowledge mode - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "AUTO_ACKNOWLEDGE ack mode test case for topic", enabled = true) - @Parameters({"messageCount"}) - public void testAutoAcknowledgeModeForTopic(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - String destinationName = "autoAcknowledgeTopic"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.AUTO_ACKNOWLEDGE); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - - } - - /** - * Publish messages to a topic in single node and receive from the same node with client - * acknowledge mode - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "CLIENT_ACKNOWLEDGE ack mode test case for topic", enabled = true) - @Parameters({"messageCount"}) - public void testClientAcknowledgeModeForTopic(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - // Expected message count - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - String destinationName = "clientAcknowledgeTopic"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setAcknowledgeAfterEachMessageCount(1); - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } - - /** - * Publish messages to a topic in single node and receive from the same node with - * duplicate acknowledge mode - * - * @param messageCount Number of message to send and receive - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "DUPS_OK_ACKNOWLEDGE ack mode test case for topic", enabled = true) - @Parameters({"messageCount"}) - public void testDupOkAcknowledgeModeForTopic(long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, JMSException, - IOException, AndesClientException, DataAccessUtilException { - long expectedCount = messageCount; - long sendCount = messageCount; - String destinationName = "dupsOkAcknowledgeTopic"; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, "dupsOkAcknowledgeTopic"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.DUPS_OK_ACKNOWLEDGE); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, "dupsOkAcknowledgeTopic"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - topicAdminClient.removeTopic("sessionTransactedAckTopic"); - topicAdminClient.removeTopic("autoAcknowledgeTopic"); - topicAdminClient.removeTopic("clientAcknowledgeTopic"); - topicAdminClient.removeTopic("dupsOkAcknowledgeTopic"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/DifferentMessageTypesTopicTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/DifferentMessageTypesTopicTestCase.java deleted file mode 100644 index 4a9fb0ac..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/DifferentMessageTypesTopicTestCase.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.topic; - - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSMessageType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes test cases to test different types of messages (e.g. byte, map, object, - * stream) which can be sent to a topic. - */ -public class DifferentMessageTypesTopicTestCase extends MBPlatformBaseTest { - - private AutomationContext automationContext; - private TopicAdminClient topicAdminClient; - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContext = getAutomationContextWithKey("mb002"); - - topicAdminClient = new TopicAdminClient(automationContext.getContextUrls().getBackEndUrl(), - super.login(automationContext)); - - } - - /** - * Publish byte messages to a topic in a single node and receive from the same node with one - * subscriber - * - * @param messageCount Number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single publisher single subscriber byte messages", enabled = true) - @Parameters({"messageCount"}) - public void testByteMessageSingleSubSinglePubTopic(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, - XPathExpressionException, - NamingException, AndesClientException { - - this.runMessageTypeTestCase(JMSMessageType.BYTE, "byteTopic1", messageCount); - } - - /** - * Publish map messages to a topic in a single node and receive from the same node with one - * subscriber - * - * @param messageCount Number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single publisher single subscriber map messages", - enabled = true) - @Parameters({"messageCount"}) - public void testMapMessageSingleSubSinglePubTopic(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, - XPathExpressionException, - NamingException, AndesClientException { - this.runMessageTypeTestCase(JMSMessageType.MAP, "mapTopic1", messageCount); - } - - /** - * Publish object messages to a topic in a single node and receive from the same node with one - * subscriber - * - * @param messageCount Number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single publisher single subscriber object messages", - enabled = true) - @Parameters({"messageCount"}) - public void testObjectMessageSingleSubSinglePubTopic(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, - XPathExpressionException, - NamingException, AndesClientException { - this.runMessageTypeTestCase(JMSMessageType.OBJECT, "objectTopic1", messageCount); - } - - /** - * Publish stream messages to a topic in a single node and receive from the same node with one - * subscriber - * - * @param messageCount Number of message to send and receive - * @throws IOException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single publisher single subscriber stream messages", - enabled = true) - @Parameters({"messageCount"}) - public void testStreamMessageSingleSubSinglePubTopic(long messageCount) - throws IOException, JMSException, AndesClientConfigurationException, - XPathExpressionException, - NamingException, AndesClientException { - this.runMessageTypeTestCase(JMSMessageType.STREAM, "streamTopic1", messageCount); - } - - /** - * Publish stream messages to a topic in a single node and receive from the same node with one - * subscriber - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - - topicAdminClient.removeTopic("byteTopic1"); - topicAdminClient.removeTopic("mapTopic1"); - topicAdminClient.removeTopic("objectTopic1"); - topicAdminClient.removeTopic("streamTopic1"); - } - - /** - * Runs a topic send and receive test case - * - * @param messageType The message type to be used when publishing - * @param destinationName The destination name for sender and receiver - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - private void runMessageTypeTestCase(JMSMessageType messageType, String destinationName, long messageCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, - JMSException, - IOException, AndesClientException { - - // Number of expected messages - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts().get("default"), - Integer.parseInt(automationContext.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts().get("default"), - Integer.parseInt(automationContext.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - publisherConfig.setJMSMessageType(messageType); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/MultipleSubscriberMultiplePublisherTopicTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/MultipleSubscriberMultiplePublisherTopicTestCase.java deleted file mode 100644 index 1d8a0a10..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/MultipleSubscriberMultiplePublisherTopicTestCase.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.core.TopicNode; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -import static org.testng.Assert.assertTrue; - -/** - * This class includes tests with multiple subscribers for a topic - */ -public class MultipleSubscriberMultiplePublisherTopicTestCase extends MBPlatformBaseTest { - - private AutomationContext automationContextForMB2; - private AutomationContext automationContextForMB3; - private TopicAdminClient topicAdminClient; - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContextForMB2 = getAutomationContextWithKey("mb002"); - automationContextForMB3 = getAutomationContextWithKey("mb003"); - - topicAdminClient = new TopicAdminClient(automationContextForMB2.getContextUrls().getBackEndUrl(), - super.login(automationContextForMB2)); - - } - - /** - * Publish message to a single topic in a single node by one publisher and subscribe to - * that topic with two subscribers - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesEventAdminServiceEventAdminException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single node single publisher two subscribers test " + - "case", enabled = true) - public void testMultipleSubscribers() - throws AndesClientConfigurationException, XPathExpressionException, NamingException, - JMSException, - IOException, AndesEventAdminServiceEventAdminException, - AndesClientException { - long sendCount = 2000L; - long expectedCount = 2000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration initialConsumerConfig = new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic1"); - initialConsumerConfig.setMaximumMessagesToReceived(expectedCount); - initialConsumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - AndesJMSConsumerClientConfiguration secondaryConsumerConfig = new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic1"); - secondaryConsumerConfig.setMaximumMessagesToReceived(expectedCount); - secondaryConsumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic1"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient initialConsumerClient = new AndesClient(initialConsumerConfig, true); - initialConsumerClient.startClient(); - - AndesClient secondaryConsumerClient = new AndesClient(secondaryConsumerConfig, true); - secondaryConsumerClient.startClient(); - - // Check if topic is created - TopicNode topic = topicAdminClient.getTopicByName("mulSubTopic1"); - assertTrue(topic.getTopicName().equalsIgnoreCase("mulSubTopic1"), "Topic created in MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(initialConsumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(secondaryConsumerClient); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(initialConsumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed for client 1"); - Assert.assertEquals(secondaryConsumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed for client 2"); - } - - /** - * Publish message to a single topic in a single node by one publisher and subscribe to - * that topic with many subscribers - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws XPathExpressionException - * @throws AndesEventAdminServiceEventAdminException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single node single publisher multiple subscribers " + - "test case", enabled = true) - public void testBulkSubscribers() - throws AndesClientConfigurationException, NamingException, JMSException, - XPathExpressionException, - AndesEventAdminServiceEventAdminException, IOException, - AndesClientException { - long sendCount = 2000L; - long expectedCount = 100000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic2"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic2"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, 50, true); - consumerClient.startClient(); - - // Check if topic is created - TopicNode topic = topicAdminClient.getTopicByName("mulSubTopic2"); - assertTrue(topic.getTopicName() - .equalsIgnoreCase("mulSubTopic2"), "Topic created in MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed"); - } - - /** - * Publish message to a single topic in a single node by multiple publishers and subscribe to - * that topic with one subscribers - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws AndesEventAdminServiceEventAdminException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single node multiple publishers single subscriber " + - "test case", enabled = true) - public void testBulkPublishers() - throws XPathExpressionException, AndesClientConfigurationException, NamingException, - JMSException, - AndesEventAdminServiceEventAdminException, IOException, - AndesClientException { - long sendCount = 100000L; - long expectedCount = 100000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic3"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic3"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - // Check if topic is created - TopicNode topic = topicAdminClient.getTopicByName("mulSubTopic2"); - assertTrue(topic.getTopicName().equalsIgnoreCase("mulSubTopic2"), "Topic created in MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, 50, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - } - - /** - * Publish message to a single topic in a single node by multiple publishers and subscribe to - * that topic with multiple subscribers - * - * @throws XPathExpressionException - * @throws JMSException - * @throws AndesEventAdminServiceEventAdminException - * @throws IOException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single node multiple publishers multiple " + - "subscribers test case", enabled = true) - public void testBulkPublishersBulkSubscribers() throws XPathExpressionException, JMSException, - AndesEventAdminServiceEventAdminException, - IOException, - AndesClientConfigurationException, - NamingException, AndesClientException { - long sendCount = 2000L; - long expectedCount = 100000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic4"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic4"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, 50, true); - consumerClient.startClient(); - - // Check if topic is created - TopicNode topic = topicAdminClient.getTopicByName("mulSubTopic4"); - assertTrue(topic.getTopicName().equalsIgnoreCase("mulSubTopic4"), "Topic created in MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, 50, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - } - - /** - * Publish message to a single topic in a single node by multiple publishers and subscribe to - * that topic with multiple subscribers from another node - * - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws AndesEventAdminServiceEventAdminException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "multiple node multiple publishers multiple " + - "subscribers test case", enabled = true) - public void testBulkPublishersBulkSubscribersDifferentNodes() - throws XPathExpressionException, AndesClientConfigurationException, NamingException, - JMSException, - AndesEventAdminServiceEventAdminException, IOException, - AndesClientException { - long sendCount = 2000L; - long expectedCount = 100000L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic5"); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = new AndesJMSPublisherClientConfiguration(automationContextForMB3.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB3.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, "mulSubTopic5"); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, 50, true); - consumerClient.startClient(); - - // Check if topic is created - TopicNode topic = topicAdminClient.getTopicByName("mulSubTopic5"); - assertTrue(topic.getTopicName().equalsIgnoreCase("mulSubTopic5"), "Topic created in MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, 50, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - } - - /** - * Cleanup after running tests. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - topicAdminClient.removeTopic("mulSubTopic1"); - topicAdminClient.removeTopic("mulSubTopic2"); - topicAdminClient.removeTopic("mulSubTopic3"); - topicAdminClient.removeTopic("mulSubTopic4"); - topicAdminClient.removeTopic("mulSubTopic5"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/MultipleTopicTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/MultipleTopicTestCase.java deleted file mode 100644 index 02dc687e..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/MultipleTopicTestCase.java +++ /dev/null @@ -1,295 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -/** - * This class includes test cases with multiple topics. - */ -public class MultipleTopicTestCase extends MBPlatformBaseTest { - - private AutomationContext automationContext; - private TopicAdminClient topicAdminClient; - - /** - * Prepare environment for tests. - * - * @throws LoginAuthenticationExceptionException - * @throws IOException - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws LoginAuthenticationExceptionException, IOException, XPathExpressionException, - URISyntaxException, SAXException, XMLStreamException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContext = getAutomationContextWithKey("mb002"); - - topicAdminClient = new TopicAdminClient(automationContext.getContextUrls().getBackEndUrl(), - super.login(automationContext)); - - } - - /** - * Publish messages to a topic in a single node and receive from the same node - * - * @param messageCount Number of message to send and receive - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws IOException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Same node publisher subscriber test case") - @Parameters({"messageCount"}) - public void testMultipleTopicSingleNode(long messageCount) - throws JMSException, AndesClientConfigurationException, XPathExpressionException, - NamingException, - IOException, AndesClientException { - - // Number of expected messages - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - - // Creating receiver clients - AndesClient receivingClient1 = getAndesReceiverClient("topic1", expectedCount); - AndesClient receivingClient2 = getAndesReceiverClient("topic2", expectedCount); - AndesClient receivingClient3 = getAndesReceiverClient("topic3", expectedCount); - AndesClient receivingClient4 = getAndesReceiverClient("topic4", expectedCount); - AndesClient receivingClient5 = getAndesReceiverClient("topic5", expectedCount); - AndesClient receivingClient6 = getAndesReceiverClient("topic6", expectedCount); - AndesClient receivingClient7 = getAndesReceiverClient("topic7", expectedCount); - AndesClient receivingClient8 = getAndesReceiverClient("topic8", expectedCount); - AndesClient receivingClient9 = getAndesReceiverClient("topic9", expectedCount); - AndesClient receivingClient10 = getAndesReceiverClient("topic10", expectedCount); - - // Starting up receiver clients - receivingClient1.startClient(); - receivingClient2.startClient(); - receivingClient3.startClient(); - receivingClient4.startClient(); - receivingClient5.startClient(); - receivingClient6.startClient(); - receivingClient7.startClient(); - receivingClient8.startClient(); - receivingClient9.startClient(); - receivingClient10.startClient(); - - // Creating publisher clients - AndesClient sendingClient1 = getAndesSenderClient("topic1", sendCount); - AndesClient sendingClient2 = getAndesSenderClient("topic2", sendCount); - AndesClient sendingClient3 = getAndesSenderClient("topic3", sendCount); - AndesClient sendingClient4 = getAndesSenderClient("topic4", sendCount); - AndesClient sendingClient5 = getAndesSenderClient("topic5", sendCount); - AndesClient sendingClient6 = getAndesSenderClient("topic6", sendCount); - AndesClient sendingClient7 = getAndesSenderClient("topic7", sendCount); - AndesClient sendingClient8 = getAndesSenderClient("topic8", sendCount); - AndesClient sendingClient9 = getAndesSenderClient("topic9", sendCount); - AndesClient sendingClient10 = getAndesSenderClient("topic10", sendCount); - - // Starting up publisher clients - sendingClient1.startClient(); - sendingClient2.startClient(); - sendingClient3.startClient(); - sendingClient4.startClient(); - sendingClient5.startClient(); - sendingClient6.startClient(); - sendingClient7.startClient(); - sendingClient8.startClient(); - sendingClient9.startClient(); - sendingClient10.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(receivingClient1, AndesClientConstants.DEFAULT_RUN_TIME); - AndesClientUtils.shutdownClient(receivingClient2); - AndesClientUtils.shutdownClient(receivingClient3); - AndesClientUtils.shutdownClient(receivingClient4); - AndesClientUtils.shutdownClient(receivingClient5); - AndesClientUtils.shutdownClient(receivingClient6); - AndesClientUtils.shutdownClient(receivingClient7); - AndesClientUtils.shutdownClient(receivingClient8); - AndesClientUtils.shutdownClient(receivingClient9); - AndesClientUtils.shutdownClient(receivingClient10); - - // Evaluating - Assert.assertEquals(sendingClient1 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 1"); - Assert.assertEquals(sendingClient2 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 2"); - Assert.assertEquals(sendingClient3 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 3"); - Assert.assertEquals(sendingClient4 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 4"); - Assert.assertEquals(sendingClient5 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 5"); - Assert.assertEquals(sendingClient6 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 6"); - Assert.assertEquals(sendingClient7 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 7"); - Assert.assertEquals(sendingClient8 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 8"); - Assert.assertEquals(sendingClient9 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 9"); - Assert.assertEquals(sendingClient10 - .getSentMessageCount(), sendCount, "Messaging sending failed in sender 10"); - - Assert.assertEquals(receivingClient1 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 1"); - Assert.assertEquals(receivingClient2 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 2"); - Assert.assertEquals(receivingClient3 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 3"); - Assert.assertEquals(receivingClient4 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 4"); - Assert.assertEquals(receivingClient5 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 5"); - Assert.assertEquals(receivingClient6 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 6"); - Assert.assertEquals(receivingClient7 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 7"); - Assert.assertEquals(receivingClient8 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 8"); - Assert.assertEquals(receivingClient9 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 9"); - Assert.assertEquals(receivingClient10 - .getReceivedMessageCount(), expectedCount, "Did not receive all the messages in receiving client 10"); - - } - - /** - * Gets an AndesClient to subscriber for a given topic - * - * @param topicName Name of the topic which the subscriber subscribes - * @param expectedCount Expected message count to be received - * @return AndesClient object to receive messages - * @throws NamingException - * @throws JMSException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws IOException - * @throws AndesClientException - */ - private AndesClient getAndesReceiverClient(String topicName, long expectedCount) - throws NamingException, JMSException, AndesClientConfigurationException, - XPathExpressionException, IOException, AndesClientException { - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, topicName); - // Amount of message to receive - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / 10L); - - return new AndesClient(consumerConfig, true); - } - - /** - * Gets an AndesClient to send messages to a given topic - * - * @param topicName Name of the topic - * @param sendCount Message count to be sent - * @return An andes client - * @throws XPathExpressionException - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - private AndesClient getAndesSenderClient(String topicName, long sendCount) - throws XPathExpressionException, AndesClientConfigurationException, NamingException, - JMSException, IOException, AndesClientException { - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContext.getInstance().getHosts() - .get("default"), - Integer.parseInt(automationContext - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, topicName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / 10L); - - return new AndesClient(publisherConfig, true); - } - - /** - * Cleanup after running tests. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - - topicAdminClient.removeTopic("topic1"); - topicAdminClient.removeTopic("topic2"); - topicAdminClient.removeTopic("topic3"); - topicAdminClient.removeTopic("topic4"); - topicAdminClient.removeTopic("topic5"); - topicAdminClient.removeTopic("topic6"); - topicAdminClient.removeTopic("topic7"); - topicAdminClient.removeTopic("topic8"); - topicAdminClient.removeTopic("topic9"); - topicAdminClient.removeTopic("topic10"); - - } - -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/SingleSubscriberSinglePublisherTopicTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/SingleSubscriberSinglePublisherTopicTestCase.java deleted file mode 100644 index 39568372..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/SingleSubscriberSinglePublisherTopicTestCase.java +++ /dev/null @@ -1,370 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.core.TopicNode; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -import static org.testng.Assert.assertTrue; - -/** - * This class includes tests subscribers/publishers with different rates for topics - */ -public class SingleSubscriberSinglePublisherTopicTestCase extends MBPlatformBaseTest { - - private AutomationContext automationContextForMB2; - private AutomationContext automationContext2; - private TopicAdminClient topicAdminClient1; - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContextForMB2 = getAutomationContextWithKey("mb002"); - automationContext2 = getAutomationContextWithKey("mb003"); - - topicAdminClient1 = - new TopicAdminClient(automationContextForMB2.getContextUrls().getBackEndUrl(), - super.login(automationContextForMB2)); - - } - - /** - * Publish messages to a topic in a single node and receive from the same node. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Same node publisher subscriber test case", - enabled = true) - @Parameters({"messageCount"}) - public void testSameNodePubSub(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContextForMB2, 0L, 0L, "singleTopic1", messageCount, true); - } - - /** - * Publish messages to a topic in a node and receive from the same node at a slow rate. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Same node publisher, slow subscriber test case", - enabled = true) - @Parameters({"messageCount"}) - public void testSameNodeSlowSubscriber(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContextForMB2, 10L, 0L, "singleTopic2", messageCount, true); - } - - /** - * Publish messages at a slow rate to a topic in one node and and receive from the - * same node. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Same node slow publisher test case", - enabled = true) - @Parameters({"messageCount"}) - public void testSameNodeSlowPublisher(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContextForMB2, 0L, 10L, "singleTopic3", messageCount, true); - } - - /** - * Publish messages to a topic in a single node at a slower rate and receive from a different - * node at a slow rate. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Single node slow publisher slow subscriber test case", - enabled = true) - @Parameters({"messageCount"}) - public void testSingleNodeSlowPublisherSlowSubscriber(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContextForMB2, 10L, 10L, "singleTopic8", messageCount, true); - } - - /** - * Publish messages to a topic in a single node and receive from a different node - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Different node publisher subscriber test case", - enabled = true) - @Parameters({"messageCount"}) - public void testDifferentNodePubSub(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContext2, 0L, 0L, "singleTopic10", messageCount, false); - } - - /** - * Publish messages to a topic in a single node and receive from a different node at a slow - * rate. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Different node slow subscriber test case", - enabled = true) - @Parameters({"messageCount"}) - public void testDifferentNodeSlowSubscriber(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContext2, 10L, 0L, "singleTopic5", messageCount, false); - } - - /** - * Publish messages to a topic in a single node and receive from a different node at a slow - * rate. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Different node slow publisher test case", - enabled = true) - @Parameters({"messageCount"}) - public void testDifferentNodeSlowPublisher(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContext2, 0L, 10L, "singleTopic6", messageCount, false); - } - - /** - * Publish messages to a topic in a single node at a slower rate and receive from a different - * node at a slow rate. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException - * @throws XPathExpressionException - * @throws NamingException - * @throws JMSException - * @throws IOException - */ - @Test(groups = "wso2.mb", description = "Different node slow publisher slow subscriber test " + - "case", enabled = true) - @Parameters({"messageCount"}) - public void testDifferentNodeSlowPublisherSlowSubscriber(long messageCount) - throws AndesEventAdminServiceEventAdminException, AndesClientConfigurationException, - XPathExpressionException, NamingException, JMSException, IOException, AndesClientException, - DataAccessUtilException { - this.runSingleSubscriberSinglePublisherTopicTestCase( - automationContextForMB2, automationContext2, 10L, 10L, "singleTopic7", messageCount, false); - } - - /** - * Cleanup after running tests. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - - topicAdminClient1.removeTopic("singleTopic1"); - topicAdminClient1.removeTopic("singleTopic2"); - topicAdminClient1.removeTopic("singleTopic3"); - topicAdminClient1.removeTopic("singleTopic5"); - topicAdminClient1.removeTopic("singleTopic6"); - topicAdminClient1.removeTopic("singleTopic7"); - topicAdminClient1.removeTopic("singleTopic8"); - topicAdminClient1.removeTopic("singleTopic10"); - } - - /** - * Runs a consumer publisher test for 2 automation contexts and allowing to publish messages with - * a delay. - * - * @param contextForConsumer Automation context for consumer. - * @param contextForPublisher Automation context for publisher. - * @param consumerDelay Message reading delay for consumer. - * @param publisherDelay Message publishing delay for publisher. - * @param destinationName Destination for publisher and consumer. - * @param isSameNode - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws XPathExpressionException - * @throws AndesEventAdminServiceEventAdminException - * @throws AndesClientException - */ - private void runSingleSubscriberSinglePublisherTopicTestCase( - AutomationContext contextForConsumer, - AutomationContext contextForPublisher, long consumerDelay, - long publisherDelay, String destinationName, long messageCount, boolean isSameNode) - throws AndesClientConfigurationException, NamingException, JMSException, IOException, - XPathExpressionException, AndesEventAdminServiceEventAdminException, AndesClientException, - DataAccessUtilException { - // Number of messages expected - long expectedCount = messageCount; - // Number of messages send - long sendCount = messageCount; - long printDivider = 10L; - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(contextForConsumer.getInstance().getHosts() - .get("default"), - Integer.parseInt(contextForConsumer - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount * 2); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - consumerConfig.setRunningDelay(consumerDelay); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - if (!isSameNode) { - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - } - - // Check if topic is created - TopicNode topic = topicAdminClient1.getTopicByName(destinationName); - assertTrue(topic.getTopicName() - .equalsIgnoreCase(destinationName), "Topic created in MB node 1 not exist"); - - // Creating a publisher config - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(contextForPublisher.getInstance() - .getHosts().get("default"), - Integer.parseInt(contextForPublisher - .getInstance() - .getPorts() - .get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - publisherConfig.setRunningDelay(publisherDelay); - - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils - .waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - - // Evaluating - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate messages left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/TopicClusterTestCase.java b/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/TopicClusterTestCase.java deleted file mode 100644 index bd385e9c..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/java/org/wso2/mb/platform/tests/clustering/topic/TopicClusterTestCase.java +++ /dev/null @@ -1,260 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.mb.platform.tests.clustering.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Parameters; -import org.testng.annotations.Test; -import org.wso2.carbon.andes.event.stub.core.TopicNode; -import org.wso2.carbon.andes.event.stub.service.AndesEventAdminServiceEventAdminException; -import org.wso2.carbon.authenticator.stub.LoginAuthenticationExceptionException; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.TestUserMode; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.TopicAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.platform.common.utils.DataAccessUtil; -import org.wso2.mb.platform.common.utils.MBPlatformBaseTest; -import org.wso2.mb.platform.common.utils.exceptions.DataAccessUtilException; -import org.xml.sax.SAXException; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.stream.XMLStreamException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.URISyntaxException; -import java.rmi.RemoteException; - -import static org.testng.Assert.assertTrue; - -/** - * Test class to test topics in clusters - */ -public class TopicClusterTestCase extends MBPlatformBaseTest { - - private AutomationContext automationContextForMB2; - private AutomationContext automationContextForMB3; - private TopicAdminClient topicAdminClientForMB2; - private TopicAdminClient topicAdminClientForMB3; - private DataAccessUtil dataAccessUtil = new DataAccessUtil(); - - /** - * Prepare environment for tests. - * - * @throws XPathExpressionException - * @throws URISyntaxException - * @throws SAXException - * @throws XMLStreamException - * @throws LoginAuthenticationExceptionException - * @throws IOException - */ - @BeforeClass(alwaysRun = true) - public void init() - throws XPathExpressionException, URISyntaxException, SAXException, XMLStreamException, - LoginAuthenticationExceptionException, IOException, AutomationUtilException { - - super.initCluster(TestUserMode.SUPER_TENANT_ADMIN); - - automationContextForMB2 = getAutomationContextWithKey("mb002"); - automationContextForMB3 = getAutomationContextWithKey("mb003"); - - topicAdminClientForMB2 = new TopicAdminClient(automationContextForMB2.getContextUrls().getBackEndUrl(), - super.login(automationContextForMB2)); - - topicAdminClientForMB3 = new TopicAdminClient(automationContextForMB3.getContextUrls().getBackEndUrl(), - super.login(automationContextForMB3)); - } - - /** - * Send and receive messages in a single node for a topic - * - * @param messageCount Number of message to send and receive - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesEventAdminServiceEventAdminException - * @throws XPathExpressionException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single topic Single node send-receive test case") - @Parameters({"messageCount"}) - public void testSingleTopicSingleNodeSendReceive(long messageCount) - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesEventAdminServiceEventAdminException, XPathExpressionException, AndesClientException, - InterruptedException, DataAccessUtilException { - long sendCount = messageCount; - long expectedCount = messageCount; - long printDivider = 10L; - String destinationName = "clusterSingleTopic1"; - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - TopicNode topic = topicAdminClientForMB2.getTopicByName(destinationName); - assertTrue(topic.getTopicName().equalsIgnoreCase(destinationName), "Topic created in" + - " MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate message left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - - - } - - /** - * Checking for topic deletion and adding cluster wide. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @Test(groups = "wso2.mb", description = "Single topic replication") - public void testSingleTopicReplication() - throws AndesEventAdminServiceEventAdminException, RemoteException { - - String topic = "singleTopic2"; - - topicAdminClientForMB2.addTopic(topic); - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - TopicNode topicNode = topicAdminClientForMB3.getTopicByName(topic); - - assertTrue(topicNode != null && topicNode.getTopicName().equalsIgnoreCase(topic), - "Topic created in MB node 1 not replicated in MB node 2"); - - topicAdminClientForMB3.removeTopic(topic); - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - topicNode = topicAdminClientForMB3.getTopicByName(topic); - - assertTrue(topicNode == null, - "Topic deleted in MB node 2 not deleted in MB node 1"); - - } - - /** - * Send messages from one node and received messages from another node. - * - * @param messageCount Number of message to send and receive - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws IOException - * @throws AndesEventAdminServiceEventAdminException - * @throws XPathExpressionException - * @throws AndesClientException - */ - @Test(groups = "wso2.mb", description = "Single topic Multi node send-receive test case") - @Parameters({"messageCount"}) - public void testSingleTopicMultiNodeSendReceive(long messageCount) - throws AndesClientConfigurationException, JMSException, NamingException, IOException, - AndesEventAdminServiceEventAdminException, XPathExpressionException, AndesClientException, - InterruptedException, DataAccessUtilException { - long sendCount = messageCount; - long expectedCount = messageCount; - long printDivider = 10L; - String destinationName = "clusterSingleTopic3"; - - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(automationContextForMB2.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB2.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, destinationName); - consumerConfig.setMaximumMessagesToReceived(expectedCount); - consumerConfig.setPrintsPerMessageCount(expectedCount / printDivider); - - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(automationContextForMB3.getInstance().getHosts().get("default"), - Integer.parseInt(automationContextForMB3.getInstance().getPorts().get("amqp")), - ExchangeType.TOPIC, destinationName); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setPrintsPerMessageCount(sendCount / printDivider); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClientUtils.sleepForInterval(AndesClientConstants.DEFAULT_CLUSTER_SYNC_TIME); - - TopicNode topic = topicAdminClientForMB2.getTopicByName(destinationName); - assertTrue(topic.getTopicName().equalsIgnoreCase(destinationName), "Topic created in MB node 1 not exist"); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - AndesClientUtils.waitForMessagesAndShutdown(consumerClient, AndesClientConstants.DEFAULT_RUN_TIME); - // Wait until consumers are closed - Thread.sleep(AndesClientConstants.DEFAULT_RUN_TIME); - - Assert.assertEquals(publisherClient.getSentMessageCount(), sendCount, "Message sending failed."); - Assert.assertEquals(consumerClient.getReceivedMessageCount(), expectedCount, "Message receiving failed."); - - // Evaluate message left in database - Assert.assertEquals(dataAccessUtil.getMessageCountForQueue(destinationName), 0, "Messages left in database"); - // Evaluate slots left in database - Assert.assertEquals(dataAccessUtil.getAssignedSlotCountForQueue(destinationName), 0, "Slots left in database"); - } - - /** - * Cleanup after running tests. - * - * @throws AndesEventAdminServiceEventAdminException - * @throws RemoteException - */ - @AfterClass(alwaysRun = true) - public void destroy() - throws AndesEventAdminServiceEventAdminException, RemoteException { - - topicAdminClientForMB2.removeTopic("clusterSingleTopic1"); - topicAdminClientForMB2.removeTopic("clusterSingleTopic2"); - topicAdminClientForMB2.removeTopic("clusterSingleTopic3"); - } -} diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/automation.xml b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/automation.xml deleted file mode 100644 index 90a0ba9d..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/automation.xml +++ /dev/null @@ -1,276 +0,0 @@ - - - - - - - - - - - 60000 - - platform - - - false - - - - - - - http://10.100.2.51:4444/wd/hub/ - - - - firefox - - /home/test/name/webDriver - - - - - - - jdbc:mysql://localhost/WSO2_MB - root - root - com.mysql.jdbc.Driver - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - - - - - keystores/products/wso2carbon.jks - - JKS - - wso2carbon - - wso2carbon - - wso2carbon - - - - - client-truststore.jks - - JKS - - wso2carbon - - - - - - https://wso2.org/repo - file:///home/krishantha/test - - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - admin - admin - - - - - tenant1user1 - tenant1user1 - - - - - - - admin - admin - - - - - tenant2user1 - tenant2user1 - - - - - - - - - - - - 127.0.0.1 - - - 9763 - 9443 - 5672 - 1883 - - - - - - - - 127.0.0.1 - - - 9764 - 9444 - 5673 - 1884 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/automationXMLSchema.xsd b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/automationXMLSchema.xsd deleted file mode 100644 index c23f84ed..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/automationXMLSchema.xsd +++ /dev/null @@ -1,591 +0,0 @@ - - - - - - - - - ================================================= - Parameters ================================================= - Browser type with used by framework to execute UI test, supported types - - chrome|firefox|opera|ie|htmlUnit - - - - - - - Change this to edit wait time for test - artifact deployment - - - - - - Change this to product|platform/cloud to - execute test on specific environment - - - - - - - Change this to true if you want to generate - coverage statistics - - - - - - Change this to true if you want to enable - framework dashboard - - - - - - - - - - - - - - - Change to enable remote webDriver - URL of remote webDriver server - - - - - - - - - - - - - Type of the browser selenium tests - are running" - - - - - - - - path to webDriver - executable - required only for - chrome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KeyStore which will be used for - encrypting/decrypting passwords - and other sensitive information. - - - - - - - Keystore file location - - - - - - Keystore type (JKS/PKCS12 etc.) - - - - - - Keystore password - - - - - - Private Key alias - - - - - - Private Key password - - - - - - - - - - System wide trust-store which is used to - maintain the certificates of all - the trusted parties. - - - - - - - trust-store file location - - - - - - trust-store type (JKS/PKCS12 - etc.) - - - - - - trust-store password - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/axis2config/axis2_client.xml b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/axis2config/axis2_client.xml deleted file mode 100644 index a8b584d0..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/axis2config/axis2_client.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - - true - false - false - - - 500 - - 15000 - - - false - - - - true - - - - - - false - - - admin - axis2 - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6071 - - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 - chunked - 60000 - 60000 - - - HTTP/1.1 - chunked - 60000 - 60000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar deleted file mode 100644 index d28b3a08..00000000 Binary files a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar and /dev/null differ diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar deleted file mode 100644 index 5903cc4b..00000000 Binary files a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar and /dev/null differ diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/filters.txt b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/filters.txt deleted file mode 100644 index 04aa6cb7..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/filters.txt +++ /dev/null @@ -1,17 +0,0 @@ --*.stub* --*.stub_ --*.stub_4.0.0 --*.stub- --org.eclipse.* --*.equinox.* --org.wso2.carbon.user.core.* --samples.* --*.log4j* --*.axis2* --*.ui* --*.tenant* --*.stratos* --*.eventing* --*tests-transports* --org.wso2.carbon.mediation.statistics* --*startup* \ No newline at end of file diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/instrumentation.txt b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/instrumentation.txt deleted file mode 100644 index 12af5f28..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/instrumentation.txt +++ /dev/null @@ -1,2 +0,0 @@ -org.wso2.carbon.andes* -org.dna* diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/keystores/products/client-truststore.jks b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/keystores/products/client-truststore.jks deleted file mode 100644 index cd16dd7e..00000000 Binary files a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/keystores/products/client-truststore.jks and /dev/null differ diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/keystores/products/wso2carbon.jks b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/keystores/products/wso2carbon.jks deleted file mode 100644 index 7942c53c..00000000 Binary files a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/keystores/products/wso2carbon.jks and /dev/null differ diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/log4j.properties b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/log4j.properties deleted file mode 100644 index 535afa56..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/log4j.properties +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# -# WSO2 Inc. licenses this file to you 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. -# - -# -# This is the log4j configuration file used by WSO2 Carbon -# -# IMPORTANT : Please do not remove or change the names of any -# of the Appenders defined here. The layout pattern & log file -# can be changed using the WSO2 Carbon Management Console, and those -# settings will override the settings in this file. -# - -log4j.rootLogger=INFO, console, Default - -log4j.logger.org.wso2=INFO -log4j.logger.org.apache.axis2.deployment.ModuleDeployer=WARN -#Automation file apender -log4j.appender.Default=org.apache.log4j.RollingFileAppender -log4j.appender.Default.File=logs/automation.log -log4j.appender.Default.Append=true -log4j.appender.Default.MaxFileSize=10MB -log4j.appender.Default.MaxBackupIndex=10 -log4j.appender.Default.layout=org.apache.log4j.PatternLayout -log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n - - -#Automation console apender -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/testng-server-mgt.xml b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/testng-server-mgt.xml deleted file mode 100644 index 33aa07ba..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/testng-server-mgt.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/testng.xml b/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/testng.xml deleted file mode 100644 index 0a1adfeb..00000000 --- a/modules/broker/integration/tests-platform/tests-clustering/src/test/resources/testng.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-ui-integration/pom.xml b/modules/broker/integration/tests-ui-integration/pom.xml deleted file mode 100644 index dc4a8831..00000000 --- a/modules/broker/integration/tests-ui-integration/pom.xml +++ /dev/null @@ -1,254 +0,0 @@ - - - - - org.wso2.iot - wso2iot-broker-integration-tests - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - UI Integration Test Module - org.wso2.iot.broker.integration.tests.ui - jar - - - - - maven-surefire-plugin - false - 2.12.4 - - -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m - false - ${skipUiTests} - - src/test/resources/testng-server-mgt.xml - src/test/resources/testng.xml - - - - - maven.test.haltafterfailure - false - - - carbon.zip - - ${basedir}/../../distribution/target/wso2iot-broker-${product.wso2iot.broker.version}.zip - - - - framework.resource.location - - ${basedir}/src/test/resources/ - - - - usedefaultlisteners - false - - ${basedir}/target/security-verifier/ - ${basedir}/src/test/resources/instrumentation.txt - ${basedir}/src/test/resources/filters.txt - - ${basedir}/target - - - - maven-dependency-plugin - - - - copy-jacoco-dependencies - compile - - copy-dependencies - - - ${project.build.directory}/jacoco - jar - org.jacoco.agent - - - - - copy-secVerifier - compile - - copy-dependencies - - - ${basedir}/target/security-verifier - aar - SecVerifier - true - - - - - unpack-mar-jks - compile - - unpack - - - - - org.wso2.iot - wso2iot-broker - ${product.wso2iot.broker.version} - zip - true - ${basedir}/target/tobeCopied/ - **/*.jks,**/*.mar,**/axis2_client.xml - - - - - - - - org.apache.maven.plugins - maven-jar-plugin - 2.4 - - - - test-jar - - - - - - org.apache.maven.plugins - maven-surefire-report-plugin - 2.7.1 - - ${basedir}/target/report - transport-test - - - - integration-test - - report-only - - - - - - - maven-resources-plugin - 2.6 - - - copy-resources-jks - compile - - copy-resources - - - ${basedir}/src/test/resources/keystores/products - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/resources/security/ - - - **/*.jks - - - - - - - copy-axis2files - compile - - copy-resources - - - ${basedir}/src/test/resources/axis2config - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/conf/axis2/ - - - **/*.xml - - - - - - - copy-resources-mar - compile - - copy-resources - - - ${basedir}/src/test/resources/client/modules - - - - - ${basedir}/target/tobeCopied/wso2iot-broker-${product.wso2iot.broker.version}/repository/deployment/client/modules - - - **/*.mar - - - - - - - - - - - - - org.wso2.carbon.automation - org.wso2.carbon.automation.engine - - - org.wso2.carbon.automation - org.wso2.carbon.automation.test.utils - - - org.wso2.iot - org.wso2.iot.broker.integration.common.utils - - - org.wso2.iot - org.wso2.iot.broker.integration.common.clients - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.utils - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.extensions - - - org.wso2.carbon.automationutils - org.wso2.carbon.integration.common.tests - - - org.jacoco - org.jacoco.agent - - - - - true - - - - diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/AddNewTenantTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/AddNewTenantTestCase.java deleted file mode 100644 index 1b331623..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/AddNewTenantTestCase.java +++ /dev/null @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.configure; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.configure.AddNewTenantPage; -import org.wso2.mb.integration.common.utils.ui.pages.configure.ConfigurePage; -import org.wso2.mb.integration.common.utils.ui.pages.configure.TenantHomePage; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * Login as an admin user and creates a new tenant and logs out then login as the new tenant and - * logout - */ -public class AddNewTenantTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Test to create the new tenant account and login to the newly created tenant account. - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test() - public void addNewTenantTest() throws XPathExpressionException, IOException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - ConfigurePage configurePage = homePage.getConfigurePage(); - AddNewTenantPage addNewTenantPage = configurePage.getAddNewTenantPage(); - - String domain = "tenant1.com"; - String usagePlanName = "demo"; - String firstName = "Bob"; - String lastName = "Dillon"; - String adminUserName = "bob"; - String adminPassword = "password"; - String adminPasswordRepeat = "password"; - String adminEmail = "bob.dilon@gmail.com"; - - addNewTenantPage.add(domain, firstName, lastName, adminUserName, - adminPassword, adminPasswordRepeat, adminEmail); - homePage.logout(); - - driver.get(getLoginURL()); - loginPage = new LoginPage(driver); - TenantHomePage tenantHomePage = loginPage.loginAsTenant(adminUserName, domain, adminPassword); - tenantHomePage.logout(); - } - - /** - * Stops the web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/AdminWithDifferentAdminRoleName.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/AdminWithDifferentAdminRoleName.java deleted file mode 100644 index dcbbc703..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/AdminWithDifferentAdminRoleName.java +++ /dev/null @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.configure; - -import junit.framework.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.configure.AddUserStep1Page; -import org.wso2.mb.integration.common.utils.ui.pages.configure.AddUserStep2Page; -import org.wso2.mb.integration.common.utils.ui.pages.configure.ConfigurePage; -import org.wso2.mb.integration.common.utils.ui.pages.configure.UserManagementPage; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import java.io.IOException; -import javax.xml.xpath.XPathExpressionException; - -/** - * test for fix https://wso2.org/jira/browse/MB-850 - * This test case test whether admin with a different admin role name is recognised as an admin - * role in the server. - */ -public class AdminWithDifferentAdminRoleName extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case with a different name for admin role. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws IOException - */ - @BeforeClass() - public void initialize() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - restartServerWithDifferentAdminRoleName(); - } - - /** - * Test Steps: - * - Admin role name is changed to "Administrator" using user-mgt.xml and restart server - * - Log in to admin account and create a queue, "testQueue" - * - New user, John, created with admin privileges. - * - Log out from admin account and log back in with john account - * - Browse the "testQueue". - * Since john is an admin he should be able to view the queue. - * - * @throws IOException - * @throws XPathExpressionException - */ - @Test() - public void testForDifferentAdminUser() throws IOException, XPathExpressionException { - String queueName = "testQueue"; - String userName = "john"; - String password = "112358"; - - driver.get(getLoginURL()); - - // login as admin - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getAdminUserName(), getAdminPassword()); - - // create queue - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertTrue("Adding a new queue failed.", queueAddPage.addQueue(queueName, true)); - - // create new user, John - ConfigurePage configurePage = queueAddPage.getConfigurePage(); - UserManagementPage userManagementPage = configurePage.getUserManagementPage(); - AddUserStep1Page addUserStep1Page = userManagementPage.getAddNewUserPage(); - addUserStep1Page.addUserDetails(userName, password, password); - AddUserStep2Page addUserStep2Page = addUserStep1Page.next(); - addUserStep2Page.selectRole(CUSTOM_ADMIN_ROLE_NAME); - - Assert.assertTrue(addUserStep2Page.finish()); - - // logout from admin account - loginPage = addUserStep2Page.logout(); - - // login as john, (admin user) - homePage = loginPage.loginAs(userName, password); - QueuesBrowsePage browsePage = homePage.getQueuesBrowsePage(); - - // try to browse, - // NOTE: John doesn't have explicit consume or publish permission. But an admin user. - // should be authorised to browse queue content. - browsePage.browseQueue(queueName); - } - - /** - * Shuts down the selenium driver and restarts the server in previous configuration. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException { - driver.quit(); - restartInPreviousConfiguration(); - } - -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/NewUserPermissionTest.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/NewUserPermissionTest.java deleted file mode 100644 index e6dbe752..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/NewUserPermissionTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.configure; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.configure.*; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * Creates a new user with login permission using the super user admin account. - * Then logs into the created new user account with new users user credentials - */ -public class NewUserPermissionTest extends MBIntegrationUiBaseTest{ - - /** - * Initializes the test case - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Creates a new user with login role and logs in with that permissions. - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test() - public void createNewUser() throws XPathExpressionException, IOException { - // login to admin account - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - //create a new login user role with login permission - ConfigurePage configurePage = homePage.getConfigurePage(); - UserManagementPage usrMgtPage = configurePage.getUserManagementPage(); - AddRoleStep1Page step1 = usrMgtPage.getAddRolePage(); - step1.setDetails("loginRole"); - AddRoleStep2Page step2 = step1.next(); - step2.selectPermission("usr.mgt.add.role.step2.login.role.xpath"); - AddRoleStep3Page step3 = step2.next(); - - // assert whether the role was successfully created - Assert.assertEquals(step3.finish(), true); - - // create a new user and assign newly created login user role - configurePage = new ConfigurePage(driver); - usrMgtPage = configurePage.getUserManagementPage(); - AddUserStep1Page addUserStep1Page = usrMgtPage.getAddNewUserPage(); - addUserStep1Page.addUserDetails("loginUser", "password", "password"); - AddUserStep2Page addUserStep2Page = addUserStep1Page.next(); - addUserStep2Page.selectRole("loginRole"); - addUserStep2Page.finish(); - loginPage = logout(); - - // login with new user account - homePage = loginPage.loginAs("loginUser", "password"); - homePage.logout(); - } - - /** - * Shuts down the selenium web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } - -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/UserStoreManagementTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/UserStoreManagementTestCase.java deleted file mode 100644 index c32acd40..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/configure/UserStoreManagementTestCase.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.configure; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.configure.ConfigurePage; -import org.wso2.mb.integration.common.utils.ui.pages.configure.UserStoreManagementPage; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * This test case adds a secondary user store. - */ -public class UserStoreManagementTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * 1. Logs into the management console. - * 2. Goes to the configuration page. - * 3. Gets the user store management page. - * 4. Adds a secondary user store. - * - * @throws IOException - * @throws XPathExpressionException - */ - @Test(groups = "wso2.mb", description = "") - public void paginationTest() throws IOException, XPathExpressionException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - ConfigurePage configurePage = homePage.getConfigurePage(); - configurePage.getUserStoreManagementPage(); - } - - /** - * Shuts down the selenium web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCDurableTopicTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCDurableTopicTestCase.java deleted file mode 100644 index 902da8a3..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCDurableTopicTestCase.java +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.dlc; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCBrowsePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCContentPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.util.List; - -/** - * This test case will test dead letter channel operations for durable topic messages. - */ -public class DLCDurableTopicTestCase extends MBIntegrationUiBaseTest { - private static final Log log = LogFactory.getLog(DLCDurableTopicTestCase.class); - private static final int COLUMN_LIST_SIZE = 11; - private static final int MESSAGE_ID_COLUMN = 1; - private static final long SEND_COUNT = 2L; - private static final long EXPECTED_COUNT = 2L; - - /** - * DLC test queue name - */ - private static final String DLC_TEST_DURABLE_TOPIC = "DLCTestDurableTopic"; - - /** - * Andes consumer client - */ - private AndesClient consumerClient = null; - - /** - * The home page of MB management console - */ - private HomePage homePage = null; - - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesAckWaitTimeOut = null; - - /** - * Initializes test. This class will initialize web driver and - * restart server with altered broker.xml - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws IOException - */ - @BeforeClass() - public void initialize() throws AutomationUtilException, XPathExpressionException, IOException, ConfigurationException { - super.init(); - - super.serverManager = new ServerConfigurationManager(mbServer); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + - File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - // Changing "maximumRedeliveryAttempts" value to "2" in broker.xml - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "2"); - // Restarting server - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Purge all messages in dlc before test starts using ui. - * - * @throws XPathExpressionException - * @throws IOException - */ - @BeforeMethod() - public void cleanDeadLetterChannel() throws XPathExpressionException, IOException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - homePage = loginPage.loginAs(mbServer.getContextTenant() - .getContextUser().getUserName(), mbServer - .getContextTenant().getContextUser() - .getPassword()); - - DLCBrowsePage dlcBrowsePage = homePage.getDLCBrowsePage(); - //Testing delete messages - DLCContentPage dlcContentPage = dlcBrowsePage.getDLCContent(); - dlcContentPage.deleteAllDLCMessages(); - } - - /** - * This method will add durable topic messages to dead letter channel. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @BeforeMethod(dependsOnMethods = {"cleanDeadLetterChannel"}) - public void addDurableTopicMessagesToDLC() - throws AndesClientConfigurationException, NamingException, - JMSException, IOException, AndesClientException, XPathExpressionException { - // Get current "AndesAckWaitTimeOut" system property. - defaultAndesAckWaitTimeOut = System.getProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "0"); - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new - AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, DLC_TEST_DURABLE_TOPIC); - // Amount of message to receive - consumerConfig.setDurable(true, DLC_TEST_DURABLE_TOPIC); - consumerConfig.setSubscriptionID("durable-topic-sub-1"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT + 200L); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setAcknowledgeAfterEachMessageCount(EXPECTED_COUNT + 200L); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, DLC_TEST_DURABLE_TOPIC); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - int tries = 15; - - while (6L != consumerClient.getReceivedMessageCount()) { - if(0 == tries){ - Assert.fail("Expected amount of messages were not received"); - } - // Reducing try count - tries--; - //Thread sleep until message count in DLC is changed - AndesClientUtils.sleepForInterval(15000L); - log.info("Waiting for message count change."); - } - - //Thread sleep until messages sent to DLC after breaching maximum number of retrying - AndesClientUtils.sleepForInterval(80000L); - - } - - - /** - * This test will verify delete and restore functions in dlc for durable topic messages. - * 1. delete first element in dlc table. if message id doesn't exist in dlc ui table after - * delete test will be success. - * 2. restore first element in dlc table. if consumer client receive new messages after restore - * from dlc test will be success. - * TODO: After reroute feature completed in ui there should be a test for reroute durable topic messages. - * - * @throws java.io.IOException - */ - @Test() - public void performDurableTopicDeadLetterChannelTestCase() throws IOException { - - // Number of checks for an update in consumer message count. - int tries = 15; - - String deletingMessageID; - String restoringMessageID; - - DLCBrowsePage dlcBrowsePage = homePage.getDLCBrowsePage(); - Assert.assertNotNull(dlcBrowsePage.isDLCCreated(), "DeadLetter Channel not created. " + DLC_TEST_DURABLE_TOPIC); - - //Testing delete messages - DLCContentPage dlcContentPage = dlcBrowsePage.getDLCContent(); - deletingMessageID = dlcContentPage.deleteFunction(); - - Assert.assertTrue(checkMessages(deletingMessageID, DLC_TEST_DURABLE_TOPIC), - "Deleting messages of dead letter channel is unsuccessful."); - - // number of messages received by consumer client before restore function triggered. - long beforeRestoreMessageReceivedCount = consumerClient.getReceivedMessageCount(); - - //Testing restore messages - restoringMessageID = dlcContentPage.restoreFunction(); - - // Waiting until the message count is different after the message were published. - while (beforeRestoreMessageReceivedCount == consumerClient.getReceivedMessageCount()) { - if(0 == tries){ - Assert.fail("Consumer did not receive any messages."); - } - // Reducing try count - tries--; - //Thread sleep until message count in DLC is changed - AndesClientUtils.sleepForInterval(15000L); - log.info("Waiting for message count change in consumer."); - } - - // number of messages received by consumer client after restore function triggered. - long afterRestoreMessageReceivedCount = consumerClient.getReceivedMessageCount(); - - log.info("Message count in consumer after restoring messages : " + afterRestoreMessageReceivedCount); - - // This assertion will check if consumer client has received messages messages after - // restore function triggered from ui. If it receives messages after restore function triggered - // this assertion will be success. - Assert.assertTrue(beforeRestoreMessageReceivedCount < afterRestoreMessageReceivedCount, - restoringMessageID + " Durable topic message not successfully restored."); - } - - - /** - * Check whether element is present or not - * - * @param id which element check for its availability - * @return availability of the element - */ - public boolean isElementPresent(String id) { - return driver.findElements(By.xpath(id)).size() != 0; - } - - /** - * Search messageID through all messages in the queue - * - * @param deletingMessageID - Searching messageID - * @param queueName - Searching queue - * @return whether messageID available or not - */ - private boolean checkMessages(String deletingMessageID, String queueName) { - boolean isSuccessful = true; - if (isElementPresent(UIElementMapper.getInstance() - .getElement("mb.dlc.browse.content.table"))) { - WebElement queueTable = driver.findElement(By.xpath(UIElementMapper.getInstance(). - getElement("mb.dlc.browse.content.table"))); - List rowElementList = queueTable.findElements(By.tagName("tr")); - // Go through table rows and find deleted messageID - for (WebElement row : rowElementList) { - List columnList = row.findElements(By.tagName("td")); - // Assumption: there are eleven columns. MessageID is in second column - if ((COLUMN_LIST_SIZE == columnList.size()) && columnList.get(MESSAGE_ID_COLUMN) - .getText().equals(deletingMessageID)) { - isSuccessful = false; - break; - } - } - } else { - Assert.fail("No messages in Queue " + queueName + " after deleting"); - } - return isSuccessful; - } - - /** - * This method will restore all the configurations back. - * Following configurations will be restored. - * 1. AndesAckWaitTimeOut system property. - * 2. Restore default broker.xml and restart server. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException { - - // Setting system property "AndesAckWaitTimeOut" to default value. - // This will set andes ack wait timeout to 0. To send messages to - // DLC fast wait time has set to 0. - if (StringUtils.isBlank(defaultAndesAckWaitTimeOut)) { - System.clearProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, - defaultAndesAckWaitTimeOut); - } - - restartInPreviousConfiguration(); - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCPaginationTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCPaginationTestCase.java deleted file mode 100644 index 2cb472ad..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCPaginationTestCase.java +++ /dev/null @@ -1,74 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.dlc; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCBrowsePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following test case checks whether the DLC page is accessible. - */ -public class DLCPaginationTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void initialize() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Goes into the DLC page. - * - * @throws IOException - * @throws XPathExpressionException - */ - @Test() - public void paginationTest() throws IOException, XPathExpressionException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - homePage.getDLCBrowsePage(); - } - - /** - * Shuts down the selenium web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } - -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCQueueTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCQueueTestCase.java deleted file mode 100644 index 3b70ccaf..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCQueueTestCase.java +++ /dev/null @@ -1,385 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.dlc; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openqa.selenium.By; -import org.openqa.selenium.WebElement; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.andes.server.queue.DLCQueueUtils; -import org.wso2.carbon.andes.stub.AndesAdminServiceBrokerManagerAdminException; -import org.wso2.carbon.authenticator.stub.LogoutAuthenticationExceptionException; -import org.wso2.carbon.integration.common.utils.LoginLogoutClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.clients.AndesAdminClient; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.UIElementMapper; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCBrowsePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCContentPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.rmi.RemoteException; -import java.util.List; - -/** - * This test case will test following 3 scenarios from ui which are currently - * available in dlc browse page. - * Restore message from dlc. - * Deleting message from dlc. - * Rerouting message from dlc. - */ -public class DLCQueueTestCase extends MBIntegrationUiBaseTest { - private static final Log log = LogFactory.getLog(DLCQueueTestCase.class); - - /** - * The index of the messageID column in queue content table. Assumed to be the second column - */ - private static final int MESSAGE_ID_COLUMN_IN_QUEUE = 1; - - /** - * The index of the messageID column in DLC content table. Assumed to be the third column - */ - private static final int MESSAGE_ID_COLUMN_IN_DLC = 2; - - /** - * The message count that will be sent by the publisher - */ - private static final long SEND_COUNT = 15L; - - /** - * The message count that is expected to be received by the consumer - */ - private static final long EXPECTED_COUNT = 15L; - - /** - * Home page instance for the test case - */ - private HomePage homePage; - - /** - * DLC test queue name - */ - private static final String DLC_TEST_QUEUE = "DLCTestQueue"; - - /** - * The Queue name of the queue for which the message is being re-routed - */ - private static final String REROUTE_QUEUE = "rerouteTestQueue"; - - /** - * The XPath for the message content table once the dlc is browsed - */ - private static final String DLC_MESSAGE_CONTENT_TABLE = "mb.dlc.browse.content.table"; - - /** - * The XPath for the message content table once a queue is browsed - */ - private static final String QUEUE_MESSAGE_CONTENT_TABLE = "mb.queue.browse.content.table"; - - - /** - * Initializes the test case and changes the number of delivery attempts of a message to 1. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void initialize() throws AutomationUtilException, XPathExpressionException, IOException, - ConfigurationException { - super.init(); - - // Updating the redelivery attempts to 1 to speed up the test case. - super.serverManager = new ServerConfigurationManager(mbServer); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + - File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - // Changing "maximumRedeliveryAttempts" value to "1" in broker.xml - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "1"); - // Restarting server - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * This test case will test restore,delete and reroute messages of - * DeadLetter Channel from ui. - * 1. Initially this test case will create a new queue to reroute messages. - * 2. Delete queue message from dlc and check if message exist in dlc queue. - * 3. Reroute queue message from dlc and check if queue message exist in browse queue ui. - * 4. Reroute queue message from dlc and check if that queue message exist in reroute - * browse queue ui. - * - * @throws XPathExpressionException - * @throws IOException - * @throws AndesAdminServiceBrokerManagerAdminException - * @throws AndesClientConfigurationException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - * @throws AutomationUtilException - * @throws LogoutAuthenticationExceptionException - */ - @Test() - public void performDeadLetterChannelTestCase() throws XPathExpressionException, IOException, - AndesAdminServiceBrokerManagerAdminException, AndesClientConfigurationException, JMSException, - NamingException, AndesClientException, AutomationUtilException, LogoutAuthenticationExceptionException { - - // Number of checks for an update in DLC message count. - int tries = 15; - - // Getting message count in DLC prior adding new messages to DLC. - long messageCountPriorSendingMessages = this.getDLCMessageCount(); - - log.info("Message count in DLC before sending messages : " + messageCountPriorSendingMessages); - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, DLC_TEST_QUEUE); - // Amount of message to receive - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT + 200L); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setAcknowledgeAfterEachMessageCount(EXPECTED_COUNT + 210L); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, DLC_TEST_QUEUE); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - // Waiting until the message count in DLC is different after the message were published. - while (EXPECTED_COUNT > this.getDLCMessageCount()) { - if (0 == tries) { - Assert.assertEquals(this.getDLCMessageCount(), EXPECTED_COUNT, - "Did not receive the expected number of message to DLC."); - } - // Reducing try count - tries--; - //Thread sleep until message count in DLC is changed - AndesClientUtils.sleepForInterval(15000L); - log.info("Waiting for message count change."); - } - - log.info("Message count in DLC after sending messages : " + this.getDLCMessageCount()); - - // Stops consuming messages - consumerClient.stopClient(); - - String deletingMessageID; - String restoringMessageID; - String reroutingMessageID; - - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - homePage = loginPage.loginAs(mbServer.getContextTenant().getContextUser().getUserName(), - mbServer.getContextTenant().getContextUser().getPassword()); - - // Add an queue to test rerouting messages of DLC - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(REROUTE_QUEUE), true); - DLCBrowsePage dlcBrowsePage = homePage.getDLCBrowsePage(); - - // Make sure that the dead letter channel is created - Assert.assertNotNull(dlcBrowsePage.isDLCCreated(), "DeadLetter Channel not created. " + DLC_TEST_QUEUE); - - // Testing delete messages - deletingMessageID = dlcBrowsePage.getDLCContent().deleteFunction(); - - // Waiting till back end completes - AndesClientUtils.sleepForInterval(5000); - - // Check if message is still present in the dead letter channel - Assert.assertFalse(checkMessages(deletingMessageID, - DLCQueueUtils.identifyTenantInformationAndGenerateDLCString(DLC_TEST_QUEUE)), - "Deleting messages from DLC is unsuccessful. Message present in DLC."); - - // Check if the message is present in the original queue - Assert.assertFalse(checkMessages(deletingMessageID, DLC_TEST_QUEUE), - "Deleting messages from DLC is unsuccessful. Message present in queue."); - - log.info("Deleting messages in DLC is successful."); - - // Testing restore messages - restoringMessageID = homePage.getDLCBrowsePage().getDLCContent().restoreFunction(); - - // Waiting till back end completes - AndesClientUtils.sleepForInterval(5000); - - // Check if the message is present in the original queue - Assert.assertTrue(checkMessages(restoringMessageID, DLC_TEST_QUEUE), - "Restoring messages of DeadLetter Channel is unsuccessful. Message not present in queue."); - - // Check if message is deleted from the dead letter channel - Assert.assertFalse(checkMessages(restoringMessageID, - DLCQueueUtils.identifyTenantInformationAndGenerateDLCString(DLC_TEST_QUEUE)), - "Restoring messages of DeadLetter Channel is unsuccessful. Message present in DLC."); - - log.info("Restoring messages of DeadLetter Channel is successful."); - - // Testing reroute messages - reroutingMessageID = homePage.getDLCBrowsePage().getDLCContent().rerouteFunction(REROUTE_QUEUE); - - // Waiting till back end completes - AndesClientUtils.sleepForInterval(5000); - - // Check if the message is present in the re-routed queue - Assert.assertTrue(checkMessages(reroutingMessageID, REROUTE_QUEUE), - "Re-routing messages of DeadLetter Channel is unsuccessful. Message not present in queue."); - - // Check if message is deleted from the dead letter channel - Assert.assertFalse(checkMessages(reroutingMessageID, - DLCQueueUtils.identifyTenantInformationAndGenerateDLCString(DLC_TEST_QUEUE)), - "Re-routing messages of DeadLetter Channel is unsuccessful. Message present in DLC."); - - log.info("Re-routing messages of DeadLetter Channel is successful."); - } - - /** - * Check whether element is present or not. - * - * @param id which element check for its availability - * @return availability of the element - */ - public boolean isElementPresent(String id) { - return driver.findElements(By.xpath(id)).size() != 0; - } - - /** - * Search messageID through all messages in a given queue. - * - * @param messageID searching messageID - * @param queueName searching queue - * @return true if the message is present - */ - public boolean checkMessages(String messageID, String queueName) throws IOException { - //if the queue is the DLC, check messages in DLC content table - if (DLCQueueUtils.isDeadLetterQueue(queueName)) { - //browse the dlc - homePage.getDLCBrowsePage().getDLCContent(); - - //if the table isn't empty, check whether the message is present - if (isElementPresent(UIElementMapper.getInstance().getElement(DLC_MESSAGE_CONTENT_TABLE))) { - - return checkMessagesInTable(driver.findElement(By.xpath(UIElementMapper.getInstance(). - getElement(DLC_MESSAGE_CONTENT_TABLE))), messageID, MESSAGE_ID_COLUMN_IN_DLC); - } else { - log.debug("No messages in: " + queueName); - return false; - } - } - //if the queue is a storage queue, check messages in the queue content table - else { - //browse the queue - homePage.getQueuesBrowsePage().browseQueue(queueName); - - //if the table isn't empty, check whether the message is present the queue content table - if (isElementPresent(UIElementMapper.getInstance().getElement(QUEUE_MESSAGE_CONTENT_TABLE))) { - - return checkMessagesInTable(driver.findElement(By.xpath(UIElementMapper.getInstance(). - getElement(QUEUE_MESSAGE_CONTENT_TABLE))), messageID, MESSAGE_ID_COLUMN_IN_QUEUE); - } else { - log.debug("No messages in: " + queueName); - return false; - } - } - } - - /** - * Search message ID through a message content table. - * - * @param table the table in which the message should be in - * @param messageID messageID to be located - * @param messageIdColumn the index of the column which has messageIDs - * @return true if message is found - */ - private boolean checkMessagesInTable(WebElement table, String messageID, int messageIdColumn) { - List rowElementList = table.findElements(By.tagName("tr")); - // Go through table rows and find the messageID - for (WebElement row : rowElementList) { - List columnList = row.findElements(By.tagName("td")); - if ((columnList.get(messageIdColumn)).getText().equals(messageID)) { - return true; - } - } - return false; - } - - /** - * This class will restore andes acknowledgement time out system property - * and quit the ui web driver. - * - * @throws IOException - * @throws AutomationUtilException - * @throws LogoutAuthenticationExceptionException - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException, LogoutAuthenticationExceptionException { - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - driver.quit(); - } - - /** - * Gets the number of messages in the DLC queue. - * - * @return The number of messages. - * @throws AutomationUtilException - * @throws RemoteException - * @throws LogoutAuthenticationExceptionException - * @throws AndesAdminServiceBrokerManagerAdminException - */ - private long getDLCMessageCount() throws AutomationUtilException, RemoteException, - LogoutAuthenticationExceptionException, AndesAdminServiceBrokerManagerAdminException { - LoginLogoutClient loginLogoutClientForAdmin = new LoginLogoutClient(mbServer); - String sessionCookie = loginLogoutClientForAdmin.login(); - AndesAdminClient andesAdminClient = new AndesAdminClient(backendURL, sessionCookie); - long messageCount = andesAdminClient.getDlcQueue().getMessageCount(); - loginLogoutClientForAdmin.logout(); - - return messageCount; - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCReRouteAllTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCReRouteAllTestCase.java deleted file mode 100644 index aa043abe..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/dlc/DLCReRouteAllTestCase.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.dlc; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientConstants; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.clients.operations.utils.JMSAcknowledgeMode; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCBrowsePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.DLCContentPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; - -import java.io.File; -import java.io.IOException; -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; - -/** - * This test case will test dead letter channel reroute all function for durable topic messages. - */ -public class DLCReRouteAllTestCase extends MBIntegrationUiBaseTest { - private static final Log log = LogFactory.getLog(DLCReRouteAllTestCase.class); - private static final long SEND_COUNT = 2L; - private static final long EXPECTED_COUNT = 2L; - - /** - * DLC test queue name - */ - private static final String DLC_TEST_DURABLE_TOPIC = "DLCReRouteAllTopic"; - - /** - * DLC reroute queue name - */ - private static final String REREOUTE_QUEUE_NAME = "DLCReRouteAllQueue"; - - /** - * The home page of MB management console - */ - private HomePage homePage = null; - - /** - * The default andes acknowledgement wait timeout. - */ - private String defaultAndesAckWaitTimeOut = null; - - /** - * Initializes test. This class will initialize web driver and - * restart server with altered broker.xml - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws IOException - */ - @BeforeClass() - public void initialize() throws AutomationUtilException, XPathExpressionException, IOException, ConfigurationException { - super.init(); - - super.serverManager = new ServerConfigurationManager(mbServer); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + - File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - // Changing "maximumRedeliveryAttempts" value to "2" in broker.xml - configurationEditor.updateProperty(AndesConfiguration.TRANSPORTS_AMQP_MAXIMUM_REDELIVERY_ATTEMPTS, "1"); - configurationEditor.updateProperty(AndesConfiguration.MANAGEMENT_CONSOLE_ALLOW_REREOUTE_ALL_IN_DLC, "true"); - // Restarting server - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Purge all messages in dlc before test starts using ui. - * - * @throws XPathExpressionException - * @throws IOException - */ - @BeforeMethod() - public void cleanDeadLetterChannel() throws XPathExpressionException, IOException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - homePage = loginPage.loginAs(mbServer.getContextTenant() - .getContextUser().getUserName(), mbServer - .getContextTenant().getContextUser() - .getPassword()); - - DLCBrowsePage dlcBrowsePage = homePage.getDLCBrowsePage(); - //Testing delete messages - DLCContentPage dlcContentPage = dlcBrowsePage.getDLCContent(); - dlcContentPage.deleteAllDLCMessages(); - } - - /** - * Create a queue to reroute the messages - * - * @throws IOException - */ - @BeforeMethod(dependsOnMethods = {"cleanDeadLetterChannel"}) - public void createReRouteQueue() throws IOException { - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - queueAddPage.addQueue(REREOUTE_QUEUE_NAME); - } - - /** - * This method will add durable topic messages to dead letter channel. - * - * @throws AndesClientConfigurationException - * @throws NamingException - * @throws JMSException - * @throws IOException - * @throws AndesClientException - */ - @BeforeMethod(dependsOnMethods = {"createReRouteQueue"}) - public void addDurableTopicMessagesToDLC() - throws AndesClientConfigurationException, NamingException, - JMSException, IOException, AndesClientException, XPathExpressionException { - - // Get current "AndesAckWaitTimeOut" system property. - defaultAndesAckWaitTimeOut = System.getProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - - // Setting system property "AndesAckWaitTimeOut" for andes - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, "0"); - - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = new - AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, DLC_TEST_DURABLE_TOPIC); - // Amount of message to receive - consumerConfig.setDurable(true, DLC_TEST_DURABLE_TOPIC); - consumerConfig.setSubscriptionID("durable-reroute-topic-sub-1"); - consumerConfig.setMaximumMessagesToReceived(EXPECTED_COUNT + 200L); - consumerConfig.setAcknowledgeMode(JMSAcknowledgeMode.CLIENT_ACKNOWLEDGE); - consumerConfig.setAcknowledgeAfterEachMessageCount(EXPECTED_COUNT + 200L); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, DLC_TEST_DURABLE_TOPIC); - publisherConfig.setNumberOfMessagesToSend(SEND_COUNT); - - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - int tries = 15; - - while (4L != consumerClient.getReceivedMessageCount()) { - if(0 == tries){ - Assert.fail("Expected amount of messages were not received"); - } - // Reducing try count - tries--; - //Thread sleep until message count in DLC is changed - AndesClientUtils.sleepForInterval(15000L); - log.info("Waiting for message count change."); - } - } - - - /** - * This test will verify reroute all messages functions in dlc for durable topic messages. - * - * @throws java.io.IOException - */ - @Test() - public void performDurableTopicDLCReRouteAllTestCase() throws IOException { - DLCBrowsePage dlcBrowsePage = homePage.getDLCBrowsePage(); - Assert.assertNotNull(dlcBrowsePage.isDLCCreated(), "DeadLetter Channel not created. " + DLC_TEST_DURABLE_TOPIC); - - //Testing delete messages - DLCContentPage dlcContentPage = dlcBrowsePage.getDLCContent(); - - dlcContentPage.rerouteAllFunction("carbon:durable-reroute-topic-sub-1", REREOUTE_QUEUE_NAME); - - int messageCount = homePage.getQueuesBrowsePage().getMessageCount(REREOUTE_QUEUE_NAME); - - Assert.assertEquals(SEND_COUNT, messageCount, "Messages were not rerouted"); - } - - /** - * This method will restore all the configurations back. - * Following configurations will be restored. - * 1. AndesAckWaitTimeOut system property. - * 2. Restore default broker.xml and restart server. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException { - - // Setting system property "AndesAckWaitTimeOut" to default value. - // This will set andes ack wait timeout to 0. To send messages to - // DLC fast wait time has set to 0. - if (StringUtils.isBlank(defaultAndesAckWaitTimeOut)) { - System.clearProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY); - } else { - System.setProperty(AndesClientConstants.ANDES_ACK_WAIT_TIMEOUT_PROPERTY, - defaultAndesAckWaitTimeOut); - } - - restartInPreviousConfiguration(); - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/log/ViewLogsTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/log/ViewLogsTestCase.java deleted file mode 100644 index 92f37567..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/log/ViewLogsTestCase.java +++ /dev/null @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.log; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.monitor.ApplicationLogsPage; -import org.wso2.mb.integration.common.utils.ui.pages.monitor.MonitorPage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following test case checks accessibility of the system logs page. - */ -public class ViewLogsTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * View the system logs page. This page allows to change logs. - * - * @throws IOException - * @throws XPathExpressionException - */ - @Test() - public void viewSystemLogsTest() throws IOException, XPathExpressionException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - MonitorPage monitorPage = homePage.getMonitorPage(); - ApplicationLogsPage applicationLogsPage = monitorPage.getApplicationLogsPage(); - - monitorPage = applicationLogsPage.getMonitorPage(); - monitorPage.getSystemLogsPage(); - } - - /** - * Shuts down the selenium driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/login/LoginTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/login/LoginTestCase.java deleted file mode 100644 index 416ac10d..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/login/LoginTestCase.java +++ /dev/null @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.login; - -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following test case checks whether the admin user can login and logout. - */ -public class LoginTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Admin user will login and logout. - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test() - public void testLogin() throws XPathExpressionException, IOException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - homePage.logout(); - } - - /** - * Shuts down the selenium driver - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/messagecontent/ViewMessageContentTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/messagecontent/ViewMessageContentTestCase.java deleted file mode 100644 index ef18e18b..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/messagecontent/ViewMessageContentTestCase.java +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.messagecontent; - -import org.apache.commons.configuration.ConfigurationException; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.MessageContentPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueContentPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * Refer wso2 jira : https://wso2.org/jira/browse/MB-939 for details. - * Verify that the maximum display length is configurable for message content shown through management console. - */ -public class ViewMessageContentTestCase extends MBIntegrationUiBaseTest { - - private static final Log log = LogFactory.getLog(ViewMessageContentTestCase.class); - - private static final int MESSAGE_SIZE_IN_BYTES = 1044375; //Size of MessageContentInput.txt - private static final String TEST_QUEUE_NAME = "939TestQueue"; - // Input file to read a 1MB message content. - private static final String MESSAGE_CONTENT_INPUT_FILE_PATH = System.getProperty("framework.resource.location") + - File.separator + "MessageContentInput.txt"; - - //private static final String DEFAULT_MB_CONFIG_PATH = - - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Increase the managementConsole/maximumMessageDisplayLength to match the large message size that is tested. - */ - @BeforeClass - public void setupConfiguration() throws AutomationUtilException, XPathExpressionException, IOException, - ConfigurationException { - - super.serverManager = new ServerConfigurationManager(mbServer); - - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + - File.separator + "repository" + File.separator + "conf" + File.separator + "broker.xml"; - - log.info("DEFAULT_MB_CONFIG_PATH : " + defaultMBConfigurationPath); - - log.info("MESSAGE_CONTENT_INPUT_FILE_PATH" + MESSAGE_CONTENT_INPUT_FILE_PATH); - - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - - configurationEditor.updateProperty(AndesConfiguration - .MANAGEMENT_CONSOLE_MAX_DISPLAY_LENGTH_FOR_MESSAGE_CONTENT, String.valueOf(MESSAGE_SIZE_IN_BYTES + 1)); - - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * Verify that the Message content browse page for the sent message displays the exact length as the original - * message. - * - * @throws IOException - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws AndesClientException - * @throws JMSException - * @throws NamingException - */ - @Test(groups = {"wso2.mb"}) - public void verifyDisplayedMessageContentLength() throws IOException, AndesClientConfigurationException, - XPathExpressionException, AndesClientException, JMSException, NamingException { - - boolean testSuccess = false; - int displayedLength; - - // Login and create test Queue - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(mbServer.getContextTenant() - .getContextUser().getUserName(), mbServer.getContextTenant() - .getContextUser().getPassword()); - - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(TEST_QUEUE_NAME), true); - - long sendCount = 1; - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, TEST_QUEUE_NAME); - publisherConfig.setNumberOfMessagesToSend(sendCount); - publisherConfig.setReadMessagesFromFilePath(MESSAGE_CONTENT_INPUT_FILE_PATH); - - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - // Waiting till back end completes. - AndesClientUtils.sleepForInterval(5000); - - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - - QueueContentPage queueContentPage = queuesBrowsePage.browseQueue(TEST_QUEUE_NAME); - Assert.assertNotNull(queueContentPage, "Unable to browse Queue " + TEST_QUEUE_NAME); - - MessageContentPage messageContentPage = queueContentPage.viewFullMessage(1); - - Assert.assertNotNull(messageContentPage, "Unable to view the fully sent large message to queue : " + - TEST_QUEUE_NAME); - - displayedLength = messageContentPage.getDisplayedMessageLength(); - - if (displayedLength == MESSAGE_SIZE_IN_BYTES) { - testSuccess = true; - } - - Assert.assertTrue(testSuccess, "Sent Large message of " + MESSAGE_SIZE_IN_BYTES + " bytes for queue " + - TEST_QUEUE_NAME + " was not displayed correctly. " + "Displayed length : " + - displayedLength); - } - - /** - * Revert changed configuration, purge and delete the queue. - * - * @throws XPathExpressionException - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass() - public void cleanup() throws XPathExpressionException, IOException, AutomationUtilException { - - // Delete test queue - driver.get(getLoginURL()); - HomePage homePage = new HomePage(driver); - - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - - Assert.assertTrue(queuesBrowsePage.deleteQueue(TEST_QUEUE_NAME), "Failed to delete queue : " + TEST_QUEUE_NAME); - - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/permissions/QueuePermissionTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/permissions/QueuePermissionTestCase.java deleted file mode 100644 index 60df40c5..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/permissions/QueuePermissionTestCase.java +++ /dev/null @@ -1,126 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.carbon.mb.ui.test.permissions; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following class contains UI related to permission and queues. - */ -public class QueuePermissionTestCase extends MBIntegrationUiBaseTest { - /** - * Permission path for creating a queue - */ - private static final String ADD_QUEUE_PERMISSION = "/permission/admin/manage/queue"; - - /** - * Permission path for logging in to management console. - */ - private static final String LOGIN_PERMISSION = "/permission/admin/login"; - - /** - * Role for the test case scenarios - */ - private static final String CREATE_QUEUE_PERMISSION_ROLE = "create_queue_role"; - - /** - * Initializes the test case - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Creates a queue by giving queue creation rights to the user. - * 1. User is in a role with no permissions. - * 2. Admin gives permissions to the role to create queues and for logging in. - * 3. User creates a queue. - * 4. Validates whether queue is created. - * - * @throws IOException - * @throws UserAdminUserAdminException - * @throws XPathExpressionException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void createQueuePermissionTestCase() throws IOException, UserAdminUserAdminException, - XPathExpressionException { - String queueName = "queueCreationPermission"; - - AutomationContext authAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, - "queueAuthUser"); - User contextUser = authAutomationContext.getContextTenant().getContextUser(); - - String[] createPermissionUsers = new String[]{contextUser.getUserNameWithoutDomain()}; - - // Logging into user management as admin - UserManagementClient userManagementClient = - new UserManagementClient(backendURL, "admin", "admin"); - - // Removing admin permission for user - userManagementClient - .updateUserListOfRole(FrameworkConstants.ADMIN_ROLE, null, createPermissionUsers); - - // Adding roles along with user - userManagementClient.addRole(CREATE_QUEUE_PERMISSION_ROLE, createPermissionUsers, - new String[]{ADD_QUEUE_PERMISSION, LOGIN_PERMISSION}); - - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - - // Logging in to the the management console - HomePage homePage = loginPage.loginAs(contextUser.getUserNameWithoutDomain(), contextUser.getPassword()); - - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - - // Creating a queue by the user and check whether valid dialog pop up is shown - Assert.assertEquals(queueAddPage.addQueue(queueName), true); - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - - // Checks whether queue is created in the browsing page - Assert.assertEquals(queuesBrowsePage.isQueuePresent(queueName), true); - - } - - /** - * Closing down the driver - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/permissions/TopicPermissionTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/permissions/TopicPermissionTestCase.java deleted file mode 100644 index 2b5f57c7..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/permissions/TopicPermissionTestCase.java +++ /dev/null @@ -1,129 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.permissions; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.automation.engine.FrameworkConstants; -import org.wso2.carbon.automation.engine.context.AutomationContext; -import org.wso2.carbon.automation.engine.context.beans.User; -import org.wso2.carbon.integration.common.admin.client.UserManagementClient; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.user.mgt.stub.UserAdminUserAdminException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicsBrowsePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following class contains UI related to permission and topics. - */ -public class TopicPermissionTestCase extends MBIntegrationUiBaseTest { - /** - * Permission path for creating a topic - */ - private static final String ADD_TOPIC_PERMISSION = "/permission/admin/manage/topic"; - - /** - * Permission path for logging in to management console. - */ - private static final String LOGIN_PERMISSION = "/permission/admin/login"; - - /** - * Role for the test case scenarios - */ - private static final String CREATE_TOPIC_PERMISSION_ROLE = "create_topic_role"; - - /** - * Initializes test case - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Creates a topic by giving topic creation rights to the user. - * 1. User is in a role with no permissions. - * 2. Admin gives permissions to the role to create topics and for logging in. - * 3. User creates a topic. - * 4. Validates whether topic is created. - * - * @throws XPathExpressionException - * @throws IOException - * @throws UserAdminUserAdminException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void createTopicPermissionTestCase() throws XPathExpressionException, IOException, UserAdminUserAdminException { - String topicName = "topicCreationPermission"; - - AutomationContext authAutomationContext = - new AutomationContext("MB", "mb001", FrameworkConstants.SUPER_TENANT_KEY, - "topicAuthUser"); - User contextUser = authAutomationContext.getContextTenant().getContextUser(); - - String[] createPermissionUser = new String[]{contextUser.getUserNameWithoutDomain()}; - - // Logging into user management as admin - UserManagementClient userManagementClient = - new UserManagementClient(super.backendURL, "admin", "admin"); - - // Removing admin permission for user - userManagementClient.updateUserListOfRole(FrameworkConstants.ADMIN_ROLE, null, createPermissionUser); - - // Adding roles along with users - userManagementClient - .addRole(CREATE_TOPIC_PERMISSION_ROLE, createPermissionUser, new String[]{ADD_TOPIC_PERMISSION, LOGIN_PERMISSION}); - - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - // Logging in to the the management console - HomePage homePage = loginPage.loginAs(contextUser.getUserNameWithoutDomain(), contextUser.getPassword()); - - TopicAddPage topicAddPage = - homePage.getTopicAddPage("home.mb.topics.add.without.queue.xpath"); - - // Creating a topic by the user and check whether valid dialog pop up is shown - Assert.assertEquals(topicAddPage.addTopic(topicName), true); - - TopicsBrowsePage topicsBrowsePage = homePage.getTopicsBrowsePage("home.mb.topics.browse.without.queue.xpath"); - - // Checks whether topic is created in the browsing page - Assert.assertEquals(topicsBrowsePage.isTopicPresent(topicName), true); - } - - /** - * Closing down the driver - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/BrowseQueueContentTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/BrowseQueueContentTestCase.java deleted file mode 100644 index 408f16aa..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/BrowseQueueContentTestCase.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.queues; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * This class contains test cases to verify functionality related to 'Queues -> - * Browse -> Queue Content' page. - */ -public class BrowseQueueContentTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes test case - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * This test case will add a queue to MB and navigate to browse the queue - * content. - * - * @throws IOException - * @throws XPathExpressionException - */ - @Test() - public void navigateQueueContentPage() throws IOException, XPathExpressionException { - - String queueName = "testQcontent"; - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(mbServer.getContextTenant() - .getContextUser().getUserName(), mbServer.getContextTenant() - .getContextUser().getPassword()); - - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(queueName), true); - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - Assert.assertNotNull(queuesBrowsePage.browseQueue(queueName), "Unable to browse Queue " + queueName); - Assert.assertEquals(homePage.getQueuesBrowsePage().deleteQueue(queueName), true, "Unable to delete the queue " - + queueName + " after " + - "browsing"); - } - - /** - * Shuts down the selenium driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } - -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/BrowseQueueWithUserWithDomainName.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/BrowseQueueWithUserWithDomainName.java deleted file mode 100644 index 851bddbc..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/BrowseQueueWithUserWithDomainName.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.queues; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; - -/** - * Test case to browse the queue with a user with a domain name. - * User will have a domain name attached to the user name - * eg: WSO2/admin - */ -public class BrowseQueueWithUserWithDomainName extends MBIntegrationUiBaseTest { - - /** - * Initializes test case and starts up MB server with WSO2 domain name. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws IOException - */ - @BeforeClass() - public void initialize() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - restartServerWithDomainName(); // start with WSO2 domain name - } - - /** - * This test case will add a queue to MB and navigate to browse the queue - * content. - * - * @throws IOException - * @throws XPathExpressionException - */ - @Test() - public void navigateQueueContentPage() throws IOException, XPathExpressionException { - - String queueName = "testQcontent"; - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(mbServer.getContextTenant().getContextUser().getUserName(), - mbServer.getContextTenant().getContextUser().getPassword()); - - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(queueName), true); - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - Assert.assertNotNull(queuesBrowsePage.browseQueue(queueName), "Unable to browse Queue " + queueName); - Assert.assertEquals(homePage.getQueuesBrowsePage().deleteQueue(queueName), true, "Unable to delete the queue " + - queueName + " after browsing"); - } - - /** - * Shuts down selenium driver and restored earlier configuration. - * - * @throws IOException - * @throws AutomationUtilException - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException { - driver.quit(); - restartInPreviousConfiguration(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueCreationTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueCreationTestCase.java deleted file mode 100644 index a016e3e1..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueCreationTestCase.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.queues; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * This tests the creation of a queue from management console - */ -public class QueueCreationTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Tests the queue creation functionality from UI - *

- * Test Steps: - * - Login to management console - * - Create a queue - * - Go to queue browse page - * - * -Create a queue with colon symbol - * -Go to queue browse page - * @throws IOException - * @throws XPathExpressionException - */ - @Test() - public void queueCreationTestCase() throws IOException, XPathExpressionException { - - String qName = "QueueCreationTestCase"; - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(qName), true); - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - Assert.assertEquals(queuesBrowsePage.isQueuePresent(qName), true); - - qName = "QueueCreationTestCase:QueueCreationTestCase"; - - queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(qName), true); - queuesBrowsePage = homePage.getQueuesBrowsePage(); - Assert.assertEquals(queuesBrowsePage.isQueuePresent(qName), true); - - } - - /** - * Shuts down the selenium web driver - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueDeleteTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueDeleteTestCase.java deleted file mode 100644 index cf3867ca..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueDeleteTestCase.java +++ /dev/null @@ -1,146 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.queues; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * This tests the deletion of a queue from management console - */ -public class QueueDeleteTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes test case. - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Tests the queue deletion from UI - *

- * Test Steps: - * - login to management console - * - create a queue - * - Go to queue browse page - * - Delete console - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test() - public void testCase() throws XPathExpressionException, IOException { - - String qName = "testQ"; - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(qName), true); - - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - queuesBrowsePage.deleteQueue(qName); - queuesBrowsePage = homePage.getQueuesBrowsePage(); - - Assert.assertTrue(!queuesBrowsePage.isQueuePresent(qName)); - - logout(); - } - - /** - * 1. Creates a queue. - * 2. Publish messages to the queue. - * 3. Delete the queue. - * 4. Check if queue exists still without refreshing the page. - * - * @throws XPathExpressionException - * @throws IOException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - * @throws AndesClientConfigurationException - */ - @Test() - public void performPublishDeleteCheck() throws XPathExpressionException, IOException, JMSException, - NamingException, AndesClientException, AndesClientConfigurationException { - String queueName = "Delete-queue-ui"; - - // Logging into management console - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - // Adding the queue - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(queueName), true); - - // Creating a publisher client configuration - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setNumberOfMessagesToSend(1000); - publisherConfig.setPrintsPerMessageCount(100L); - - // Publishing messages - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - // Delete queue - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - queuesBrowsePage.deleteQueue(queueName); - queuesBrowsePage = homePage.getQueuesBrowsePage(); - - Assert.assertTrue(!queuesBrowsePage.isQueuePresent(queueName)); - // Logout - logout(); - } - - /** - * Shuts down selenium web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } - -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueDeleteWithSubscriber.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueDeleteWithSubscriber.java deleted file mode 100644 index 22620042..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/queues/QueueDeleteWithSubscriber.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.queues; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueuesBrowsePage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following UI test cases would attempt to delete a queue while subscribers were active and then once the - * subscribers have left, the queue should be deletable. - * JIRA - https://wso2.org/jira/browse/MB-1069 - */ -public class QueueDeleteWithSubscriber extends MBIntegrationUiBaseTest { - - /** - * Initialises the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @Override - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * 1. Creates a queue named 'deleteQueueWithSubscriber'. - * 2. Subscriber starts listening to the queue. - * 3. User tries to delete the queue. This should fail as there are active subscribers. - * 4. Subscriber stop listening to the queue. Implying no subscribers for the queue. - * 5. User should be able to delete the queue successfully. - * - * @throws IOException - * @throws XPathExpressionException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performDeleteQueueWithSubscriberTestCase() throws IOException, XPathExpressionException, - JMSException, NamingException, AndesClientException { - - String queueName = "deleteQueueWithSubscriber"; - - // Logging into the management console - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - // Creating a new queue - QueueAddPage queueAddPage = homePage.getQueueAddPage(); - Assert.assertEquals(queueAddPage.addQueue(queueName), true); - - // Creating a consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - - // Creating a subscriber and listens. - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - // Tries to delete the queue. - QueuesBrowsePage queuesBrowsePage = homePage.getQueuesBrowsePage(); - Assert.assertFalse(queuesBrowsePage.deleteQueue(queueName), "Queue was deleted while subscribers were active."); - - // Removing the subscribers. - consumerClient.stopClient(); - - // Deletes the queue successfully. - Assert.assertTrue(queuesBrowsePage.deleteQueue(queueName), "Queue could not be deleted while there were no " + - "subscribers."); - } - - /** - * Stops the selenium driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/subscriptions/SubscriptionDeleteTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/subscriptions/SubscriptionDeleteTestCase.java deleted file mode 100644 index 26664264..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/subscriptions/SubscriptionDeleteTestCase.java +++ /dev/null @@ -1,413 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.subscriptions; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSPublisherClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueSubscriptionsPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicSubscriptionsPage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * Following UI test is to test if close subscription button works for queue subscriptions - */ -public class SubscriptionDeleteTestCase extends MBIntegrationUiBaseTest { - - /** - * Keeps homepage page to navigate to the other pages - */ - HomePage homePage; - - /** - * Initialises the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @Override - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - - super.init(); - - //log into broker - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - } - - - /** - * 1. Create 3 queue subscribers for queue "subDeleteQueue" - * 2. Log into UI and close one subscriptions - * 3. Verify subscription close is successful and only 2 other subscription entries are shown - * 4. Verify one of subscribers does not get new messages - * @throws IOException - * @throws XPathExpressionException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "queue"}) - public void performQueueSubscriptionCloseTestCase() throws IOException, XPathExpressionException, - JMSException, NamingException, AndesClientException, AndesClientConfigurationException, - CloneNotSupportedException { - - String queueName = "subDeleteQueue"; - long expectedMessageCount = 1000L; - long messageCountToSend = 1000L; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 10L); - consumerConfig1.setRunningDelay(200); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - publisherConfig.setPrintsPerMessageCount(messageCountToSend / 10L); - publisherConfig.setNumberOfMessagesToSend(messageCountToSend); - - // Creating consumer clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - //start publisher client - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Wait until some messages receive - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - //ignore - } - - //verify all subscribers got at least one message - boolean allSubscribersGotMessages = false; - if(consumerClient1.getReceivedMessageCount() > 0 - && consumerClient2.getReceivedMessageCount() > 0 - && consumerClient3.getReceivedMessageCount() > 0) { - allSubscribersGotMessages = true; - } - - Assert.assertEquals(allSubscribersGotMessages, true, "All queue subscribers are not receiving messages"); - - QueueSubscriptionsPage queueSubscriptionsPage = homePage.getQueueSubscriptionsPage(); - boolean result = queueSubscriptionsPage.closeTopSubscription(); - - Assert.assertEquals(result, true, "Closing queue subscriber was not successful"); - - //verify one of the subscribers now does not get new messages - - long messageCountSub1 = consumerClient1.getReceivedMessageCount(); - long messageCountSub2 = consumerClient2.getReceivedMessageCount(); - long messageCountSub3 = consumerClient3.getReceivedMessageCount(); - - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - //ignore - } - - long messageCountNewSub1 = consumerClient1.getReceivedMessageCount(); - long messageCountNewSub2 = consumerClient2.getReceivedMessageCount(); - long messageCountNewSub3 = consumerClient3.getReceivedMessageCount(); - - boolean oneReceiverIsStopped = false; - - if(messageCountNewSub1 == messageCountSub1) { - oneReceiverIsStopped = true; - } else if(messageCountNewSub2 == messageCountSub2) { - oneReceiverIsStopped = true; - } else if(messageCountNewSub3 == messageCountSub3) { - oneReceiverIsStopped = true; - } - - Assert.assertEquals(oneReceiverIsStopped, true, "None of the queue subscribers stopped even if" - + "subscriber is stopped via UI "); - - //close all subscriptions - consumerClient1.stopClient(); - consumerClient2.stopClient(); - consumerClient3.stopClient(); - } - - - /** - * 1. Create 3 topic subscribers for topic "subDeleteTopic" - * 2. Log into UI and close one subscriptions - * 3. Verify subscription close is successful and only 2 other subscription entries are shown - * 4. Verify one of subscribers does not get new messages - * @throws IOException - * @throws XPathExpressionException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performTopicSubscriptionCloseTestCase() throws IOException, XPathExpressionException, - JMSException, NamingException, AndesClientException, AndesClientConfigurationException, - CloneNotSupportedException { - - String topicName = "subDeleteTopic"; - long expectedMessageCount = 1000L; - long messageCountToSend = 1000L; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 10L); - consumerConfig1.setRunningDelay(200); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - publisherConfig.setPrintsPerMessageCount(messageCountToSend / 10L); - publisherConfig.setNumberOfMessagesToSend(messageCountToSend); - - // Creating consumer clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - //start publisher client - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Wait until some messages receive - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - //ignore - } - - //verify all subscribers got at least one message - boolean allSubscribersGotMessages = false; - if(consumerClient1.getReceivedMessageCount() > 0 - && consumerClient2.getReceivedMessageCount() > 0 - && consumerClient3.getReceivedMessageCount() > 0) { - allSubscribersGotMessages = true; - } - - Assert.assertEquals(allSubscribersGotMessages, true, "All topic subscribers are not " - + "receiving messages"); - - //close one subscription - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - boolean result = topicSubscriptionsPage.closeNonDurableTopicSubscription(); - - Assert.assertEquals(result, true, "Closing topic subscriber was not successful"); - - //verify one of the subscribers now does not get new messages - - long messageCountSub1 = consumerClient1.getReceivedMessageCount(); - long messageCountSub2 = consumerClient2.getReceivedMessageCount(); - long messageCountSub3 = consumerClient3.getReceivedMessageCount(); - - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - //ignore - } - - long messageCountNewSub1 = consumerClient1.getReceivedMessageCount(); - long messageCountNewSub2 = consumerClient2.getReceivedMessageCount(); - long messageCountNewSub3 = consumerClient3.getReceivedMessageCount(); - - boolean oneReceiverIsStopped = false; - - if(messageCountNewSub1 == messageCountSub1) { - oneReceiverIsStopped = true; - } else if(messageCountNewSub2 == messageCountSub2) { - oneReceiverIsStopped = true; - } else if(messageCountNewSub3 == messageCountSub3) { - oneReceiverIsStopped = true; - } - - Assert.assertEquals(oneReceiverIsStopped, true, "None of the topic subscribers stopped even if" - + "subscriber is stopped via UI "); - - //close all subscriptions - consumerClient1.stopClient(); - consumerClient2.stopClient(); - consumerClient3.stopClient(); - } - - /** - * 1. Create 3 topic subscribers for topic "subDeleteDurableTopic" - * 2. Log into UI and close one subscriptions - * 3. Verify subscription close is successful and only 2 other subscription entries are shown - * 4. Verify closed subscriber is shown as inactive - * 5. Verify one of subscribers does not get new messages - * @throws IOException - * @throws XPathExpressionException - * @throws JMSException - * @throws NamingException - * @throws AndesClientException - */ - @Test(groups = {"wso2.mb", "topic"}) - public void performDurableTopicSubscriptionCloseTestCase() throws IOException, XPathExpressionException, - JMSException, NamingException, AndesClientException, AndesClientConfigurationException, - CloneNotSupportedException { - - String topicName = "subDeleteDurableTopic"; - long expectedMessageCount = 1000L; - long messageCountToSend = 1000L; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setDurable(true, "sub1"); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 10L); - consumerConfig1.setRunningDelay(200); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setSubscriptionID("sub2"); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - consumerConfig3.setSubscriptionID("sub3"); - - AndesJMSPublisherClientConfiguration publisherConfig = - new AndesJMSPublisherClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - publisherConfig.setPrintsPerMessageCount(messageCountToSend / 10L); - publisherConfig.setNumberOfMessagesToSend(messageCountToSend); - - // Creating consumer clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - //start publisher client - AndesClient publisherClient = new AndesClient(publisherConfig, true); - publisherClient.startClient(); - - //Wait until some messages receive - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - //ignore - } - - //verify all subscribers got at least one message - boolean allSubscribersGotMessages = false; - if(consumerClient1.getReceivedMessageCount() > 0 - && consumerClient2.getReceivedMessageCount() > 0 - && consumerClient3.getReceivedMessageCount() > 0) { - allSubscribersGotMessages = true; - } - - Assert.assertEquals(allSubscribersGotMessages, true, "All durable topic subscribers are not " - + "receiving messages"); - - //close one subscription - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - boolean result = topicSubscriptionsPage.closeDurableTopicSubscription(); - - Assert.assertEquals(result, true, "Closing durable topic subscriber was not successful"); - - //verify one of the subscribers now does not get new messages - - long messageCountSub1 = consumerClient1.getReceivedMessageCount(); - long messageCountSub2 = consumerClient2.getReceivedMessageCount(); - long messageCountSub3 = consumerClient3.getReceivedMessageCount(); - - try { - Thread.sleep(10000); - } catch (InterruptedException e) { - //ignore - } - - long messageCountNewSub1 = consumerClient1.getReceivedMessageCount(); - long messageCountNewSub2 = consumerClient2.getReceivedMessageCount(); - long messageCountNewSub3 = consumerClient3.getReceivedMessageCount(); - - boolean oneReceiverIsStopped = false; - - if(messageCountNewSub1 == messageCountSub1) { - oneReceiverIsStopped = true; - } else if(messageCountNewSub2 == messageCountSub2) { - oneReceiverIsStopped = true; - } else if(messageCountNewSub3 == messageCountSub3) { - oneReceiverIsStopped = true; - } - - Assert.assertEquals(oneReceiverIsStopped, true, "None of the durable topic subscribers stopped even if" - + "subscriber is stopped via UI "); - - //close all subscriptions - consumerClient1.stopClient(); - consumerClient2.stopClient(); - consumerClient3.stopClient(); - } - - /** - * Stops the selenium driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } - - -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/subscriptions/SubscriptionSearchTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/subscriptions/SubscriptionSearchTestCase.java deleted file mode 100644 index e851cb10..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/subscriptions/SubscriptionSearchTestCase.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * 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. - */ - -package org.wso2.carbon.mb.ui.test.subscriptions; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.QueueSubscriptionsPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicSubscriptionsPage; - -import java.io.IOException; -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; - -/** - * This class test the search functionality of queue and topic subscription pages. - */ -public class SubscriptionSearchTestCase extends MBIntegrationUiBaseTest { - /** - * Keeps homepage page to navigate to the other pages - */ - HomePage homePage; - - /** - * Initialises the test case. - * - * @throws org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException - * @throws javax.xml.xpath.XPathExpressionException - * @throws java.net.MalformedURLException - */ - @Override - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - //Log into broker - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - } - - /** - * Following test cases are done in this test case. - * 1. Create three queue subscribers for three different queues. - * 2. Search subscribers using the queue name pattern, identifier and own node Id - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws CloneNotSupportedException - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "queue"}, priority = 0) - public void performQueueSubscriptionSearchTestCase() throws AndesClientConfigurationException, - XPathExpressionException, CloneNotSupportedException, AndesClientException, JMSException, IOException, - NamingException { - String queueName = "subSearchQueue1"; - long expectedMessageCount = 1000L; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.QUEUE, queueName); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 10L); - consumerConfig1.setRunningDelay(200); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setDestinationName("subSearchQueue2"); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - consumerConfig3.setDestinationName("subSearchQueue3"); - - // Creating consumer clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - QueueSubscriptionsPage queueSubscriptionsPage = homePage.getQueueSubscriptionsPage(); - int result = queueSubscriptionsPage.searchQueueSubscriptions("1", "", 0, false, false); - Assert.assertEquals(result, 1); - - //Test exact match of queue name - result = queueSubscriptionsPage.searchQueueSubscriptions("subSearchQueue3", "", 0, true, false); - Assert.assertEquals(result, 1); - - result = queueSubscriptionsPage.searchQueueSubscriptions("SearchQueue", "", 0, false, false); - Assert.assertEquals(result, 3); - - consumerClient1.stopClient(); - consumerClient2.stopClient(); - consumerClient3.stopClient(); - } - - /** - * Following test cases are done in this test case. - * 1. Create three topic subscribers for three different topics. - * 2. Search subscribers using the topic name pattern, identifier and own node Id - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws CloneNotSupportedException - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "topic"}, priority = 1) - public void performTemporaryTopicSubscriptionSearchTestCase() throws AndesClientConfigurationException, - XPathExpressionException, CloneNotSupportedException, AndesClientException, JMSException, IOException, - NamingException { - String topicName = "subSearchTopic1"; - long expectedMessageCount = 1000L; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 10L); - consumerConfig1.setRunningDelay(200); - consumerConfig1.setAsync(false); - - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setDestinationName("subSearchTopic2"); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - consumerConfig3.setDestinationName("subSearchTopic3"); - - // Creating consumer clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - topicSubscriptionsPage.searchTopicSubscriptions("1", "", 0, false, false); - int result = topicSubscriptionsPage.getNonDurableSubscriptionsCount(); - Assert.assertEquals(result, 1); - - topicSubscriptionsPage.searchTopicSubscriptions("subSearchTopic2", "", 0, true, false); - result = topicSubscriptionsPage.getNonDurableSubscriptionsCount(); - Assert.assertEquals(result, 1); - - topicSubscriptionsPage.searchTopicSubscriptions("SearchTopic", "", 0, false, false); - result = topicSubscriptionsPage.getNonDurableSubscriptionsCount(); - Assert.assertEquals(result, 3); - - consumerClient1.stopClient(); - consumerClient2.stopClient(); - consumerClient3.stopClient(); - } - - /** - * Following test cases are done in this test case. - * 1. Create three durable topic subscribers for three different topics. - * 2. Search active subscribers using the queue name pattern, identifier and own node Id - * 3. Stop the subscribers - * 4. Search inactive subscribers using the queue name pattern, identifier and own node Id - * - * @throws AndesClientConfigurationException - * @throws XPathExpressionException - * @throws CloneNotSupportedException - * @throws AndesClientException - * @throws JMSException - * @throws IOException - * @throws NamingException - */ - @Test(groups = {"wso2.mb", "durable"}, priority = 2) - public void performDurableTopicSubscriptionSearchTestCase() throws AndesClientConfigurationException, - XPathExpressionException, CloneNotSupportedException, AndesClientException, JMSException, IOException, - NamingException { - String topicName = "subSearchDurable1"; - long expectedMessageCount = 1000L; - // Creating a initial JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, topicName); - consumerConfig1.setMaximumMessagesToReceived(expectedMessageCount); - consumerConfig1.setPrintsPerMessageCount(expectedMessageCount / 10L); - consumerConfig1.setRunningDelay(200); - consumerConfig1.setAsync(false); - consumerConfig1.setDurable(true, "subSearchDurable1SubId" ); - - //Create two more JMS consumer configurations - AndesJMSConsumerClientConfiguration consumerConfig2 = consumerConfig1.clone(); - consumerConfig2.setDestinationName("subSearchDurable2"); - consumerConfig1.setDurable(true, "subSearchDurable2SubId" ); - - AndesJMSConsumerClientConfiguration consumerConfig3 = consumerConfig1.clone(); - consumerConfig3.setDestinationName("subSearchDurable3"); - consumerConfig1.setDurable(true, "subSearchDurable3SubId"); - - // Creating consumer clients and starts the clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, true); - consumerClient1.startClient(); - - AndesClient consumerClient2 = new AndesClient(consumerConfig2, true); - consumerClient2.startClient(); - - AndesClient consumerClient3 = new AndesClient(consumerConfig3, true); - consumerClient3.startClient(); - - //Go to topic subscriptions page and search with different criteria. - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - topicSubscriptionsPage.searchTopicSubscriptions("1", "", 0, false, false); - int result = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - Assert.assertEquals(result, 1); - - topicSubscriptionsPage.searchTopicSubscriptions("SearchDurable", "", 0, false, false); - result = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - Assert.assertEquals(result, 3); - - // test exact match of topic name. - topicSubscriptionsPage.searchTopicSubscriptions("subSearchDurable3", "", 0, true, false); - result = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - Assert.assertEquals(result, 1); - - topicSubscriptionsPage.searchTopicSubscriptions("", "carbon:subSearchDurable", 0, false, false); - result = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - Assert.assertEquals(result, 3); - - //Stop the clients - consumerClient1.stopClient(); - consumerClient2.stopClient(); - consumerClient3.stopClient(); - - //Go to topic subscriptions page and search with different criteria. - topicSubscriptionsPage.searchTopicSubscriptions("", "", 0, false, false); - result = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - Assert.assertEquals(result, 0); - - topicSubscriptionsPage.searchTopicSubscriptions("subSearchDurable", "", 0, false, false); - result = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - Assert.assertEquals(result, 3); - result = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - Assert.assertEquals(result, 0); - } - - /** - * Shuts down the selenium web driver. - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException { - driver.quit(); - } -} - diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/SharedDurableSubscriptionTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/SharedDurableSubscriptionTestCase.java deleted file mode 100644 index 9d2e2489..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/SharedDurableSubscriptionTestCase.java +++ /dev/null @@ -1,341 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ - -package org.wso2.carbon.mb.ui.test.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.andes.configuration.enums.AndesConfiguration; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.carbon.integration.common.utils.mgt.ServerConfigurationManager; -import org.wso2.mb.integration.common.clients.AndesClient; -import org.wso2.mb.integration.common.clients.configurations.AndesJMSConsumerClientConfiguration; -import org.wso2.mb.integration.common.clients.operations.utils.AndesClientUtils; -import org.wso2.mb.integration.common.clients.operations.utils.ExchangeType; -import org.wso2.mb.integration.common.utils.backend.ConfigurationEditor; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicSubscriptionsPage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * The following class contains test cases related to durable topics with shared subscriptions. - */ -public class SharedDurableSubscriptionTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case and modifying broker.xml to allow shared subscriptions. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void initialize() throws Exception { - super.init(); - - super.serverManager = new ServerConfigurationManager(mbServer); - String defaultMBConfigurationPath = ServerConfigurationManager.getCarbonHome() + File.separator + "repository" + - File.separator + "conf" + File.separator + "broker.xml"; - ConfigurationEditor configurationEditor = new ConfigurationEditor(defaultMBConfigurationPath); - // Changing "allowSharedSubscription" value to "true" in broker.xml - configurationEditor.updateProperty(AndesConfiguration.ALLOW_SHARED_SHARED_SUBSCRIBERS, "true"); - // Restarting server - configurationEditor.applyUpdatedConfigurationAndRestartServer(serverManager); - } - - /** - * With "allowSharedSubscriptions" on following steps are done : - * 1. Created a durable subscription with ID "client-id-shared-1" and check whether UI is correct. - * 2. Disconnect the subscriber and check whether UI is correct. - * 3. Created 3 durable subscription with ID "client-id-shared-1" and check whether UI is correct. - * 4. Disconnect the subscribers and check whether UI is correct. - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performSharedDurableTopicTestCase() throws Exception { - - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - int durableActiveSubscriptionsCountBeforeTest = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - int durableInActiveSubscriptionsCountBeforeTest = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "sharedDurableTopic1"); - consumerConfig.setDurable(true, "client-id-shared-1"); - - // Creating clients - AndesClient consumerClient = new AndesClient(consumerConfig, true); - consumerClient.startClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - int durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - int durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 1, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest, - "Inactive subscription list had modified."); - - consumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest, - "Subscription has been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest + 1, - "Inactive subscription list has not updated."); - - // Creating clients - consumerClient = new AndesClient(consumerConfig, 3, true); - consumerClient.startClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 3, - "Subscriptions(3) has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest, - "Inactive subscription list has modified."); - - consumerClient.stopClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest, - "Subscription has been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest + 1, - "Inactive subscription list has not updated."); - - homePage.logout(); - - } - - /** - * With "allowSharedSubscriptions" on following steps are done : - * 1. Created 3 durable subscription with ID "client-id-shared-4" to topic "sharedDurableTopic4" and check whether - * UI is correct. - * 2. Created 3 durable subscription with ID "client-id-shared-5" to topic "sharedDurableTopic4" and check whether - * UI is correct. - * 3. Disconnect the subscribers with "client-id-shared-4" client ID and check whether UI is correct. - * 4. Disconnect the subscribers with "client-id-shared-5" client ID and check whether UI is correct. - * - * @throws Exception - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performSharedSameDurableTopicTestCase() throws Exception { - - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - int durableActiveSubscriptionsCountBeforeTest = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - int durableInActiveSubscriptionsCountBeforeTest = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "sharedDurableTopic4"); - consumerConfig1.setDurable(true, "client-id-shared-4"); - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "sharedDurableTopic4"); - consumerConfig2.setDurable(true, "client-id-shared-5"); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, 3, true); - consumerClient1.startClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - int durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - int durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 3, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest, - "Inactive subscription list had modified."); - - // Creating clients - AndesClient consumerClient2 = new AndesClient(consumerConfig2, 3, true); - consumerClient2.startClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 6, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest, - "Inactive subscription list had modified."); - - consumerClient1.stopClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 3, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest + 1, - "Inactive subscription list had modified."); - - consumerClient2.stopClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest + 2, - "Inactive subscription list had modified."); - - homePage.logout(); - } - - /** - * With "allowSharedSubscriptions" on following steps are done : - * 1. Created 3 durable subscription with ID "client-id-shared-2" to topic "sharedDurableTopic2" and check whether - * UI is correct. - * 2. Created 3 durable subscription with ID "client-id-shared-3" to topic "sharedDurableTopic3" and check whether - * UI is correct. - * 3. Disconnect the subscribers with "client-id-shared-2" client ID and check whether UI is correct. - * 4. Disconnect the subscribers with "client-id-shared-3" client ID and check whether UI is correct. - * - * @throws Exception - */ - @Test(groups = {"wso2.mb", "durableTopic"}) - public void performSharedMultipleDurableTopicTestCase() throws Exception { - - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - TopicSubscriptionsPage topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - int durableActiveSubscriptionsCountBeforeTest = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - int durableInActiveSubscriptionsCountBeforeTest = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - // Creating a JMS consumer client configuration - AndesJMSConsumerClientConfiguration consumerConfig1 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "sharedDurableTopic2"); - consumerConfig1.setDurable(true, "client-id-shared-2"); - - AndesJMSConsumerClientConfiguration consumerConfig2 = - new AndesJMSConsumerClientConfiguration(getAMQPPort(), ExchangeType.TOPIC, "sharedDurableTopic3"); - consumerConfig2.setDurable(true, "client-id-shared-3"); - - // Creating clients - AndesClient consumerClient1 = new AndesClient(consumerConfig1, 3, true); - consumerClient1.startClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - int durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - int durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 3, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest, - "Inactive subscription list had modified."); - - // Creating clients - AndesClient consumerClient2 = new AndesClient(consumerConfig2, 3, true); - consumerClient2.startClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 6, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest, - "Inactive subscription list had modified."); - - consumerClient1.stopClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest + 3, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest + 1, - "Inactive subscription list had modified."); - - consumerClient2.stopClient(); - - AndesClientUtils.sleepForInterval(3000); - - topicSubscriptionsPage = homePage.getTopicSubscriptionsPage(); - durableActiveSubscriptionsCount = topicSubscriptionsPage.getDurableActiveSubscriptionsCount(); - durableInActiveSubscriptionsCount = topicSubscriptionsPage.getDurableInActiveSubscriptionsCount(); - - Assert.assertEquals(durableActiveSubscriptionsCount, durableActiveSubscriptionsCountBeforeTest, - "Subscription has not been added to Active list"); - Assert.assertEquals(durableInActiveSubscriptionsCount, durableInActiveSubscriptionsCountBeforeTest + 2, - "Inactive subscription list had modified."); - - homePage.logout(); - } - - /** - * Shuts down the selenium web driver. - */ - @AfterClass() - public void tearDown() throws IOException, AutomationUtilException { - //Revert back to original configuration. - super.serverManager.restoreToLastConfiguration(true); - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/TopicCreationTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/TopicCreationTestCase.java deleted file mode 100644 index 5fb29dea..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/TopicCreationTestCase.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * WSO2 Inc. licenses this file to you 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. - */ - -package org.wso2.carbon.mb.ui.test.topic; - -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicAddPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.TopicsBrowsePage; - -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; - -/** - * This tests the creation of a topic from management console - */ -public class TopicCreationTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * Tests the topic creation from UI with colon sign for the name - *

- * Test Steps: - * - Login to management console - * - Create a topic - * - Go to topic browse page - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test() - public void testCase() throws XPathExpressionException, IOException { - - String topicName = "TopicCreationTestTopic"; - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - TopicAddPage topicAddPage = homePage.getTopicAddPage(); - Assert.assertEquals(topicAddPage.addTopic(topicName), true); - TopicsBrowsePage topicBrowsePage = homePage.getTopicsBrowsePage(); - Assert.assertEquals(topicBrowsePage.isTopicPresent(topicName), true); - } - - /** - * Shuts down the selenium web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/TopicTenantTestCase.java b/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/TopicTenantTestCase.java deleted file mode 100644 index 121719f9..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/java/org/wso2/carbon/mb/ui/test/topic/TopicTenantTestCase.java +++ /dev/null @@ -1,128 +0,0 @@ -/* -* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -* -* WSO2 Inc. licenses this file to you 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. -*/ -package org.wso2.carbon.mb.ui.test.topic; - - -import org.eclipse.paho.client.mqttv3.MqttException; -import org.eclipse.paho.client.mqttv3.MqttMessage; -import org.testng.Assert; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; -import org.wso2.carbon.integration.common.utils.exceptions.AutomationUtilException; -import org.wso2.mb.integration.common.clients.ClientMode; -import org.wso2.mb.integration.common.clients.MQTTClientConnectionConfiguration; -import org.wso2.mb.integration.common.clients.MQTTClientEngine; -import org.wso2.mb.integration.common.clients.MQTTConstants; -import org.wso2.mb.integration.common.clients.QualityOfService; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientConfigurationException; -import org.wso2.mb.integration.common.clients.exceptions.AndesClientException; -import org.wso2.mb.integration.common.utils.backend.MBIntegrationUiBaseTest; -import org.wso2.mb.integration.common.utils.ui.pages.configure.AddNewTenantPage; -import org.wso2.mb.integration.common.utils.ui.pages.configure.ConfigurePage; -import org.wso2.mb.integration.common.utils.ui.pages.login.LoginPage; -import org.wso2.mb.integration.common.utils.ui.pages.main.HomePage; - -import javax.jms.JMSException; -import javax.naming.NamingException; -import javax.xml.xpath.XPathExpressionException; -import java.io.IOException; -import java.net.MalformedURLException; -import java.util.List; - -/** - * UI test case(s) for tenant related topics. - */ -public class TopicTenantTestCase extends MBIntegrationUiBaseTest { - - /** - * Initializes the test case. - * - * @throws AutomationUtilException - * @throws XPathExpressionException - * @throws MalformedURLException - */ - @BeforeClass() - public void init() throws AutomationUtilException, XPathExpressionException, IOException { - super.init(); - } - - /** - * 1. Create the new tenant account - * 2. Publish and subscribe MQTT messages using the created tenant admin account. - * - * @throws XPathExpressionException - * @throws IOException - */ - @Test(groups = {"wso2.mb", "queue", "mqtt"}, description = "https://wso2.org/jira/browse/MB-1180") - public void performAddNewTenantPublishSubscribeQueue() throws XPathExpressionException, IOException, - AndesClientConfigurationException, JMSException, NamingException, AndesClientException, MqttException { - driver.get(getLoginURL()); - LoginPage loginPage = new LoginPage(driver); - HomePage homePage = loginPage.loginAs(getCurrentUserName(), getCurrentPassword()); - - ConfigurePage configurePage = homePage.getConfigurePage(); - AddNewTenantPage addNewTenantPage = configurePage.getAddNewTenantPage(); - - String domain = "home.com"; - String firstName = "Bob"; - String lastName = "Marley"; - String adminUserName = "bob"; - String adminPassword = "marleyandme"; - String adminPasswordRepeat = "marleyandme"; - String adminEmail = "bob.marley@home.com"; - - addNewTenantPage.add(domain, firstName, lastName, adminUserName, - adminPassword, adminPasswordRepeat, adminEmail); - homePage.logout(); - - String destinationName = "home.com/bobs-tenant-topic"; - - MQTTClientEngine mqttClientEngine = new MQTTClientEngine(); - - MQTTClientConnectionConfiguration mqttClientConnectionConfiguration = - mqttClientEngine.getConfigurations(mbServer); - mqttClientConnectionConfiguration.setBrokerUserName("bob!home.com"); - mqttClientConnectionConfiguration.setBrokerPassword("marleyandme"); - - //create the subscribers - mqttClientEngine.createSubscriberConnection(destinationName, QualityOfService.LEAST_ONCE, 1, true, - ClientMode.BLOCKING, mqttClientConnectionConfiguration); - - mqttClientEngine.createPublisherConnection(destinationName, QualityOfService.LEAST_ONCE, - MQTTConstants.TEMPLATE_PAYLOAD, 1, 1, - ClientMode.BLOCKING, mqttClientConnectionConfiguration); - - mqttClientEngine.waitUntilAllMessageReceivedAndShutdownClients(); - - List receivedMessages = mqttClientEngine.getReceivedMessages(); - - Assert.assertEquals(receivedMessages.size(), 1, "The received message count is incorrect."); - - Assert.assertEquals(receivedMessages.get(0).getPayload(), MQTTConstants.TEMPLATE_PAYLOAD, - "The received message is incorrect"); - } - - /** - * Stops the web driver. - */ - @AfterClass() - public void tearDown() { - driver.quit(); - } -} diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/MessageContentInput.txt b/modules/broker/integration/tests-ui-integration/src/test/resources/MessageContentInput.txt deleted file mode 100644 index d1cf7aec..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/MessageContentInput.txt +++ /dev/null @@ -1,4 +0,0 @@ -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 -65,112,97,99,104,101,32,77,97,118,101,110,32,51,46,48,46,53,32,40,114,48,49,100,101,49,52,55,50,52,99,100,101,102,49,54,52,99,100,51,51,99,55,99,56,99,50,102,101,49,53,53,102,97,102,57,54,48,50,100,97,59,32,50,48,49,51,45,48,50,45,49,57,32,49,57,58,50,49,58,50,56,43,48,53,51,48,41,10,77,97,118,101,110,32,104,111,109,101,58,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,10,74,97,118,97,32,118,101,114,115,105,111,110,58,32,49,46,54,46,48,95,54,53,44,32,118,101,110,100,111,114,58,32,65,112,112,108,101,32,73,110,99,46,10,74,97,118,97,32,104,111,109,101,58,32,47,83,121,115,116,101,109,47,76,105,98,114,97,114,121,47,74,97,118,97,47,74,97,118,97,86,105,114,116,117,97,108,77,97,99,104,105,110,101,115,47,49,46,54,46,48,46,106,100,107,47,67,111,110,116,101,110,116,115,47,72,111,109,101,10,68,101,102,97,117,108,116,32,108,111,99,97,108,101,58,32,101,110,95,85,83,44,32,112,108,97,116,102,111,114,109,32,101,110,99,111,100,105,110,103,58,32,77,97,99,82,111,109,97,110,10,79,83,32,110,97,109,101,58,32,34,109,97,99,32,111,115,32,120,34,44,32,118,101,114,115,105,111,110,58,32,34,49,48,46,57,46,52,34,44,32,97,114,99,104,58,32,34,120,56,54,95,54,52,34,44,32,102,97,109,105,108,121,58,32,34,109,97,99,34,10,91,73,78,70,79,93,32,69,114,114,111,114,32,115,116,97,99,107,116,114,97,99,101,115,32,97,114,101,32,116,117,114,110,101,100,32,111,110,46,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,103,108,111,98,97,108,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,80,114,111,103,114,97,109,115,47,97,112,97,99,104,101,45,109,97,118,101,110,45,51,46,48,46,53,47,99,111,110,102,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,82,101,97,100,105,110,103,32,117,115,101,114,32,115,101,116,116,105,110,103,115,32,102,114,111,109,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,115,101,116,116,105,110,103,115,46,120,109,108,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,32,97,116,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,68,69,66,85,71,93,32,85,115,105,110,103,32,109,97,110,97,103,101,114,32,69,110,104,97,110,99,101,100,76,111,99,97,108,82,101,112,111,115,105,116,111,114,121,77,97,110,97,103,101,114,32,119,105,116,104,32,112,114,105,111,114,105,116,121,32,49,48,32,102,111,114,32,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,10,91,73,78,70,79,93,32,83,99,97,110,110,105,110,103,32,102,111,114,32,112,114,111,106,101,99,116,115,46,46,46,10,91,68,69,66,85,71,93,32,69,120,116,101,110,115,105,111,110,32,114,101,97,108,109,115,32,102,111,114,32,112,114,111,106,101,99,116,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,32,40,110,111,110,101,41,10,91,68,69,66,85,71,93,32,76,111,111,107,105,110,103,32,117,112,32,108,105,102,101,99,121,108,101,32,109,97,112,112,105,110,103,115,32,102,111,114,32,112,97,99,107,97,103,105,110,103,32,112,111,109,32,102,114,111,109,32,67,108,97,115,115,82,101,97,108,109,91,112,108,101,120,117,115,46,99,111,114,101,44,32,112,97,114,101,110,116,58,32,110,117,108,108,93,10,91,68,69,66,85,71,93,32,61,61,61,32,82,69,65,67,84,79,82,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,84,97,115,107,115,58,32,32,32,91,99,108,101,97,110,44,32,105,110,115,116,97,108,108,93,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,73,78,70,79,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,73,78,70,79,93,32,66,117,105,108,100,105,110,103,32,87,83,79,50,32,77,101,115,115,97,103,101,32,66,114,111,107,101,114,32,45,32,68,105,115,116,114,105,98,117,116,105,111,110,32,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,73,78,70,79,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,100,101,102,97,117,108,116,32,45,62,32,91,118,97,108,105,100,97,116,101,44,32,105,110,105,116,105,97,108,105,122,101,44,32,103,101,110,101,114,97,116,101,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,114,101,115,111,117,114,99,101,115,44,32,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,99,108,97,115,115,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,115,111,117,114,99,101,115,44,32,103,101,110,101,114,97,116,101,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,114,101,115,111,117,114,99,101,115,44,32,116,101,115,116,45,99,111,109,112,105,108,101,44,32,112,114,111,99,101,115,115,45,116,101,115,116,45,99,108,97,115,115,101,115,44,32,116,101,115,116,44,32,112,114,101,112,97,114,101,45,112,97,99,107,97,103,101,44,32,112,97,99,107,97,103,101,44,32,112,114,101,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,112,111,115,116,45,105,110,116,101,103,114,97,116,105,111,110,45,116,101,115,116,44,32,118,101,114,105,102,121,44,32,105,110,115,116,97,108,108,44,32,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,99,108,101,97,110,32,45,62,32,91,112,114,101,45,99,108,101,97,110,44,32,99,108,101,97,110,44,32,112,111,115,116,45,99,108,101,97,110,93,10,91,68,69,66,85,71,93,32,76,105,102,101,99,121,99,108,101,32,115,105,116,101,32,45,62,32,91,112,114,101,45,115,105,116,101,44,32,115,105,116,101,44,32,112,111,115,116,45,115,105,116,101,44,32,115,105,116,101,45,100,101,112,108,111,121,93,10,91,68,69,66,85,71,93,32,61,61,61,32,80,82,79,74,69,67,84,32,66,85,73,76,68,32,80,76,65,78,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,80,114,111,106,101,99,116,58,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,99,111,108,108,101,99,116,41,58,32,91,93,10,91,68,69,66,85,71,93,32,68,101,112,101,110,100,101,110,99,105,101,115,32,40,114,101,115,111,108,118,101,41,58,32,91,116,101,115,116,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,100,101,112,101,110,100,101,110,99,105,101,115,41,58,32,91,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,82,101,112,111,115,105,116,111,114,105,101,115,32,40,112,108,117,103,105,110,115,41,32,32,32,32,32,58,32,91,119,115,111,50,46,114,101,108,101,97,115,101,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,46,115,110,97,112,115,104,111,116,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,115,110,97,112,115,104,111,116,115,47,44,32,115,110,97,112,115,104,111,116,115,41,44,32,119,115,111,50,45,110,101,120,117,115,32,40,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,44,32,114,101,108,101,97,115,101,115,43,115,110,97,112,115,104,111,116,115,41,44,32,99,101,110,116,114,97,108,32,40,104,116,116,112,58,47,47,114,101,112,111,46,109,97,118,101,110,46,97,112,97,99,104,101,46,111,114,103,47,109,97,118,101,110,50,44,32,114,101,108,101,97,115,101,115,41,93,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,100,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,125,60,47,101,120,99,108,117,100,101,68,101,102,97,117,108,116,68,105,114,101,99,116,111,114,105,101,115,62,10,32,32,60,102,97,105,108,79,110,69,114,114,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,97,118,101,110,46,99,108,101,97,110,46,102,97,105,108,79,110,69,114,114,111,114,125,60,47,102,97,105,108,79,110,69,114,114,111,114,62,10,32,32,60,102,111,108,108,111,119,83,121,109,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,102,111,108,108,111,119,83,121,109,76,105,110,107,115,125,60,47,102,111,108,108,111,119,83,121,109,76,105,110,107,115,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,114,101,112,111,114,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,108,101,97,110,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,116,101,115,116,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,118,101,114,98,111,115,101,62,36,123,99,108,101,97,110,46,118,101,114,98,111,115,101,125,60,47,118,101,114,98,111,115,101,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,112,114,101,95,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,105,115,116,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,100,101,112,101,110,100,101,110,99,121,45,112,108,117,103,105,110,58,50,46,48,45,97,108,112,104,97,45,52,58,117,110,112,97,99,107,32,40,117,110,112,97,99,107,45,119,115,111,50,99,97,114,98,111,110,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,32,32,60,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,52,46,51,46,48,45,83,78,65,80,83,72,79,84,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,116,121,112,101,62,122,105,112,60,47,116,121,112,101,62,10,32,32,32,32,32,32,60,111,118,101,114,87,114,105,116,101,62,116,114,117,101,60,47,111,118,101,114,87,114,105,116,101,62,10,32,32,32,32,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,116,97,114,103,101,116,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,62,10,32,32,60,47,97,114,116,105,102,97,99,116,73,116,101,109,115,62,10,32,32,60,108,111,99,97,108,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,62,10,32,32,60,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,60,47,109,97,114,107,101,114,115,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,125,60,47,111,117,116,112,117,116,65,98,115,111,108,117,116,101,65,114,116,105,102,97,99,116,70,105,108,101,110,97,109,101,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,100,101,112,101,110,100,101,110,99,121,34,62,36,123,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,109,100,101,112,46,111,118,101,114,73,102,78,101,119,101,114,125,60,47,111,118,101,114,87,114,105,116,101,73,102,78,101,119,101,114,62,10,32,32,60,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,125,60,47,111,118,101,114,87,114,105,116,101,82,101,108,101,97,115,101,115,62,10,32,32,60,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,100,101,112,46,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,125,60,47,111,118,101,114,87,114,105,116,101,83,110,97,112,115,104,111,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,60,47,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,62,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,60,47,114,101,109,111,116,101,82,101,112,111,115,62,10,32,32,60,115,105,108,101,110,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,105,108,101,110,116,125,60,47,115,105,108,101,110,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,101,120,116,114,97,99,116,45,100,111,99,115,45,102,114,111,109,45,99,111,109,112,111,110,101,110,116,115,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,112,114,111,112,101,114,116,121,32,110,97,109,101,61,34,116,101,109,112,100,105,114,34,32,118,97,108,117,101,61,34,116,97,114,103,101,116,47,100,111,99,115,45,116,101,109,112,34,47,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,34,47,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,46,122,105,112,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,115,111,50,109,98,45,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,117,110,122,105,112,32,100,101,115,116,61,34,36,123,116,101,109,112,100,105,114,125,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,114,101,112,111,115,105,116,111,114,121,47,99,111,109,112,111,110,101,110,116,115,47,112,108,117,103,105,110,115,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,46,117,105,42,46,106,97,114,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,117,110,122,105,112,62,10,32,32,32,32,60,109,111,118,101,32,116,111,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,47,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,32,32,60,109,97,112,112,101,114,32,116,111,61,34,42,46,120,109,108,34,32,102,114,111,109,61,34,42,46,104,116,109,108,34,32,116,121,112,101,61,34,103,108,111,98,34,47,62,10,32,32,32,32,60,47,109,111,118,101,62,10,32,32,32,32,60,109,107,100,105,114,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,47,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,36,123,116,101,109,112,100,105,114,125,47,119,101,98,34,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,121,117,105,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,99,111,100,101,112,114,101,115,115,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,101,100,105,116,97,114,101,97,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,97,106,97,120,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,87,69,66,45,73,78,70,47,42,42,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,104,116,109,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,106,115,112,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,42,46,120,115,108,34,47,62,10,32,32,32,32,32,32,32,32,60,101,120,99,108,117,100,101,32,110,97,109,101,61,34,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,115,114,99,47,115,105,116,101,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,46,46,47,46,46,47,100,111,99,115,34,62,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,10,32,32,32,32,60,99,111,112,121,32,116,111,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,47,34,32,105,110,99,108,117,100,101,101,109,112,116,121,100,105,114,115,61,34,102,97,108,115,101,34,32,111,118,101,114,119,114,105,116,101,61,34,102,97,108,115,101,34,62,10,32,32,32,32,32,32,60,102,105,108,101,115,101,116,32,100,105,114,61,34,115,114,99,47,115,105,116,101,47,120,100,111,99,47,34,62,10,32,32,32,32,32,32,32,32,60,105,110,99,108,117,100,101,32,110,97,109,101,61,34,42,42,47,105,109,97,103,101,115,47,42,46,42,34,47,62,10,32,32,32,32,32,32,60,47,102,105,108,101,115,101,116,62,10,32,32,32,32,60,47,99,111,112,121,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,115,105,116,101,45,112,108,117,103,105,110,58,51,46,48,58,115,105,116,101,32,40,100,101,102,97,117,108,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,125,60,47,103,101,110,101,114,97,116,101,80,114,111,106,101,99,116,73,110,102,111,62,10,32,32,60,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,125,60,47,103,101,110,101,114,97,116,101,82,101,112,111,114,116,115,62,10,32,32,60,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,125,60,47,103,101,110,101,114,97,116,101,83,105,116,101,109,97,112,62,10,32,32,60,103,101,110,101,114,97,116,101,100,83,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,103,101,110,101,114,97,116,101,100,45,115,105,116,101,34,47,62,10,32,32,60,105,110,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,115,111,117,114,99,101,69,110,99,111,100,105,110,103,125,34,62,36,123,101,110,99,111,100,105,110,103,125,60,47,105,110,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,108,111,99,97,108,101,115,62,36,123,108,111,99,97,108,101,115,125,60,47,108,111,99,97,108,101,115,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,62,36,123,115,105,116,101,79,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,60,47,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,62,10,32,32,60,111,117,116,112,117,116,69,110,99,111,100,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,34,62,36,123,111,117,116,112,117,116,69,110,99,111,100,105,110,103,125,60,47,111,117,116,112,117,116,69,110,99,111,100,105,110,103,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,125,60,47,114,101,108,97,116,105,118,105,122,101,68,101,99,111,114,97,116,105,111,110,76,105,110,107,115,62,10,32,32,60,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,32,32,60,112,108,117,103,105,110,62,10,32,32,32,32,32,32,60,103,114,111,117,112,73,100,62,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,60,47,103,114,111,117,112,73,100,62,10,32,32,32,32,32,32,60,97,114,116,105,102,97,99,116,73,100,62,109,97,118,101,110,45,112,114,111,106,101,99,116,45,105,110,102,111,45,114,101,112,111,114,116,115,45,112,108,117,103,105,110,60,47,97,114,116,105,102,97,99,116,73,100,62,10,32,32,32,32,32,32,60,118,101,114,115,105,111,110,62,50,46,52,60,47,118,101,114,115,105,111,110,62,10,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,32,32,32,32,60,114,101,112,111,114,116,62,105,110,100,101,120,60,47,114,101,112,111,114,116,62,10,32,32,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,115,62,10,32,32,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,62,10,32,32,32,32,32,32,60,47,114,101,112,111,114,116,83,101,116,115,62,10,32,32,32,32,60,47,112,108,117,103,105,110,62,10,32,32,60,47,114,101,112,111,114,116,80,108,117,103,105,110,115,62,10,32,32,60,114,101,112,111,114,116,115,62,36,123,114,101,112,111,114,116,115,125,60,47,114,101,112,111,114,116,115,62,10,32,32,60,114,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,115,114,99,47,115,105,116,101,34,47,62,10,32,32,60,115,107,105,112,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,109,97,118,101,110,46,115,105,116,101,46,115,107,105,112,125,60,47,115,107,105,112,62,10,32,32,60,116,101,109,112,108,97,116,101,62,36,123,116,101,109,112,108,97,116,101,125,60,47,116,101,109,112,108,97,116,101,62,10,32,32,60,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,115,114,99,47,115,105,116,101,34,62,36,123,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,125,60,47,116,101,109,112,108,97,116,101,68,105,114,101,99,116,111,114,121,62,10,32,32,60,116,101,109,112,108,97,116,101,70,105,108,101,62,36,123,116,101,109,112,108,97,116,101,70,105,108,101,125,60,47,116,101,109,112,108,97,116,101,70,105,108,101,62,10,32,32,60,118,97,108,105,100,97,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,118,97,108,105,100,97,116,101,125,60,47,118,97,108,105,100,97,116,101,62,10,32,32,60,120,100,111,99,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,47,120,100,111,99,115,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,115,115,101,109,98,108,121,45,112,108,117,103,105,110,58,50,46,50,45,98,101,116,97,45,53,58,97,116,116,97,99,104,101,100,32,40,100,105,115,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,65,103,103,114,101,103,97,116,105,110,103,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,125,60,47,97,112,112,101,110,100,65,115,115,101,109,98,108,121,73,100,62,10,32,32,60,97,116,116,97,99,104,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,62,36,123,97,116,116,97,99,104,125,60,47,97,116,116,97,99,104,62,10,32,32,60,98,97,115,101,100,105,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,98,97,115,101,100,105,114,125,34,47,62,10,32,32,60,99,108,97,115,115,105,102,105,101,114,62,36,123,99,108,97,115,115,105,102,105,101,114,125,60,47,99,108,97,115,115,105,102,105,101,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,62,36,123,100,101,115,99,114,105,112,116,111,114,125,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,73,100,62,36,123,100,101,115,99,114,105,112,116,111,114,73,100,125,60,47,100,101,115,99,114,105,112,116,111,114,73,100,62,10,32,32,60,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,98,105,110,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,115,114,99,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,32,32,60,100,101,115,99,114,105,112,116,111,114,62,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,100,111,99,115,46,120,109,108,60,47,100,101,115,99,114,105,112,116,111,114,62,10,32,32,60,47,100,101,115,99,114,105,112,116,111,114,115,62,10,32,32,60,100,114,121,82,117,110,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,97,115,115,101,109,98,108,121,46,100,114,121,82,117,110,125,60,47,100,114,121,82,117,110,62,10,32,32,60,102,105,108,116,101,114,115,62,10,32,32,32,32,60,102,105,108,116,101,114,62,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,103,105,116,47,112,114,111,100,117,99,116,45,109,98,47,109,97,115,116,101,114,47,112,114,111,100,117,99,116,45,109,98,47,109,111,100,117,108,101,115,47,100,105,115,116,114,105,98,117,116,105,111,110,47,115,114,99,47,109,97,105,110,47,97,115,115,101,109,98,108,121,47,102,105,108,116,101,114,46,112,114,111,112,101,114,116,105,101,115,60,47,102,105,108,116,101,114,62,10,32,32,60,47,102,105,108,116,101,114,115,62,10,32,32,60,102,105,110,97,108,78,97,109,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,102,105,110,97,108,78,97,109,101,125,34,47,62,10,32,32,60,105,103,110,111,114,101,68,105,114,70,111,114,109,97,116,69,120,116,101,110,115,105,111,110,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,116,114,117,101,34,47,62,10,32,32,60,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,125,60,47,105,103,110,111,114,101,77,105,115,115,105,110,103,68,101,115,99,114,105,112,116,111,114,62,10,32,32,60,105,110,99,108,117,100,101,83,105,116,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,105,110,99,108,117,100,101,83,105,116,101,125,60,47,105,110,99,108,117,100,101,83,105,116,101,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,34,47,62,10,32,32,60,109,97,118,101,110,83,101,115,115,105,111,110,62,36,123,115,101,115,115,105,111,110,125,60,47,109,97,118,101,110,83,101,115,115,105,111,110,62,10,32,32,60,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,112,114,111,106,101,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,125,34,47,62,10,32,32,60,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,114,101,97,99,116,111,114,80,114,111,106,101,99,116,115,125,34,47,62,10,32,32,60,114,101,109,111,116,101,82,101,112,111,115,105,116,111,114,105,101,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,109,111,116,101,65,114,116,105,102,97,99,116,82,101,112,111,115,105,116,111,114,105,101,115,125,34,47,62,10,32,32,60,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,125,60,47,114,117,110,79,110,108,121,65,116,69,120,101,99,117,116,105,111,110,82,111,111,116,62,10,32,32,60,115,105,116,101,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,114,101,112,111,114,116,105,110,103,46,111,117,116,112,117,116,68,105,114,101,99,116,111,114,121,125,34,47,62,10,32,32,60,115,107,105,112,65,115,115,101,109,98,108,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,115,107,105,112,65,115,115,101,109,98,108,121,125,60,47,115,107,105,112,65,115,115,101,109,98,108,121,62,10,32,32,60,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,119,97,114,110,34,62,36,123,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,125,60,47,116,97,114,76,111,110,103,70,105,108,101,77,111,100,101,62,10,32,32,60,116,101,109,112,82,111,111,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,60,119,111,114,107,68,105,114,101,99,116,111,114,121,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,98,117,105,108,100,46,100,105,114,101,99,116,111,114,121,125,47,97,115,115,101,109,98,108,121,47,119,111,114,107,34,47,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,105,110,115,116,97,108,108,45,112,108,117,103,105,110,58,50,46,51,46,49,58,105,110,115,116,97,108,108,32,40,100,101,102,97,117,108,116,45,105,110,115,116,97,108,108,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,114,116,105,102,97,99,116,125,34,47,62,10,32,32,60,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,97,116,116,97,99,104,101,100,65,114,116,105,102,97,99,116,115,125,34,47,62,10,32,32,60,99,114,101,97,116,101,67,104,101,99,107,115,117,109,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,99,114,101,97,116,101,67,104,101,99,107,115,117,109,125,60,47,99,114,101,97,116,101,67,104,101,99,107,115,117,109,62,10,32,32,60,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,36,123,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,125,60,47,108,111,99,97,108,82,101,112,111,115,105,116,111,114,121,62,10,32,32,60,112,97,99,107,97,103,105,110,103,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,112,97,99,107,97,103,105,110,103,125,34,47,62,10,32,32,60,112,111,109,70,105,108,101,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,36,123,112,114,111,106,101,99,116,46,102,105,108,101,125,34,47,62,10,32,32,60,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,32,100,101,102,97,117,108,116,45,118,97,108,117,101,61,34,102,97,108,115,101,34,62,36,123,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,125,60,47,117,112,100,97,116,101,82,101,108,101,97,115,101,73,110,102,111,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,10,91,68,69,66,85,71,93,32,71,111,97,108,58,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,115,58,109,97,118,101,110,45,97,110,116,114,117,110,45,112,108,117,103,105,110,58,49,46,49,58,114,117,110,32,40,99,108,101,97,110,95,116,97,114,103,101,116,41,10,91,68,69,66,85,71,93,32,83,116,121,108,101,58,32,32,32,32,32,32,32,32,32,82,101,103,117,108,97,114,10,91,68,69,66,85,71,93,32,67,111,110,102,105,103,117,114,97,116,105,111,110,58,32,60,63,120,109,108,32,118,101,114,115,105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,110,103,61,34,85,84,70,45,56,34,63,62,10,60,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,32,32,60,97,114,116,105,102,97,99,116,115,62,36,123,112,108,117,103,105,110,46,97,114,116,105,102,97,99,116,115,125,60,47,97,114,116,105,102,97,99,116,115,62,10,32,32,60,112,114,111,106,101,99,116,62,36,123,112,114,111,106,101,99,116,125,60,47,112,114,111,106,101,99,116,62,10,32,32,60,115,111,117,114,99,101,82,111,111,116,62,36,123,115,111,117,114,99,101,82,111,111,116,125,60,47,115,111,117,114,99,101,82,111,111,116,62,10,32,32,60,116,97,115,107,115,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,97,114,99,104,105,118,101,45,116,109,112,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,100,101,112,101,110,100,101,110,99,121,45,109,97,118,101,110,45,112,108,117,103,105,110,45,109,97,114,107,101,114,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,109,97,118,101,110,45,97,114,99,104,105,118,101,114,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,119,115,111,50,99,97,114,98,111,110,45,99,111,114,101,45,52,46,51,46,48,45,83,78,65,80,83,72,79,84,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,111,117,114,99,101,115,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,116,97,114,103,101,116,47,115,105,116,101,34,47,62,10,32,32,32,32,60,100,101,108,101,116,101,32,100,105,114,61,34,115,114,99,47,115,105,116,101,34,47,62,36,123,116,97,115,107,115,125,60,47,116,97,115,107,115,62,10,32,32,60,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,36,123,116,101,115,116,83,111,117,114,99,101,82,111,111,116,125,60,47,116,101,115,116,83,111,117,114,99,101,82,111,111,116,62,10,60,47,99,111,110,102,105,103,117,114,97,116,105,111,110,62,10,91,68,69,66,85,71,93,32,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,61,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,58,97,110,100,101,115,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,112,97,114,101,110,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,107,101,114,110,101,108,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,115,101,114,118,105,99,101,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,99,97,114,98,111,110,45,105,100,101,110,116,105,116,121,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,105,110,115,116,97,108,108,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,112,97,114,101,110,116,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,117,115,101,114,45,109,97,110,97,103,101,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,101,118,101,110,116,45,115,116,117,98,115,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,67,111,117,108,100,32,110,111,116,32,102,105,110,100,32,109,101,116,97,100,97,116,97,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,108,111,99,97,108,32,40,47,85,115,101,114,115,47,65,107,97,108,97,110,107,97,47,46,109,50,47,114,101,112,111,115,105,116,111,114,121,41,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,103,114,111,117,112,115,47,119,115,111,50,45,112,117,98,108,105,99,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,45,110,101,120,117,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,70,97,105,108,117,114,101,32,116,111,32,102,105,110,100,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,32,105,110,32,104,116,116,112,58,47,47,109,97,118,101,110,46,119,115,111,50,46,111,114,103,47,110,101,120,117,115,47,99,111,110,116,101,110,116,47,114,101,112,111,115,105,116,111,114,105,101,115,47,114,101,108,101,97,115,101,115,47,32,119,97,115,32,99,97,99,104,101,100,32,105,110,32,116,104,101,32,108,111,99,97,108,32,114,101,112,111,115,105,116,111,114,121,44,32,114,101,115,111,108,117,116,105,111,110,32,119,105,108,108,32,110,111,116,32,98,101,32,114,101,97,116,116,101,109,112,116,101,100,32,117,110,116,105,108,32,116,104,101,32,117,112,100,97,116,101,32,105,110,116,101,114,118,97,108,32,111,102,32,119,115,111,50,46,114,101,108,101,97,115,101,115,32,104,97,115,32,101,108,97,112,115,101,100,32,111,114,32,117,112,100,97,116,101,115,32,97,114,101,32,102,111,114,99,101,100,10,91,68,69,66,85,71,93,32,83,107,105,112,112,101,100,32,114,101,109,111,116,101,32,117,112,100,97,116,101,32,99,104,101,99,107,32,102,111,114,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,47,109,97,118,101,110,45,109,101,116,97,100,97,116,97,46,120,109,108,44,32,108,111,99,97,108,108,121,32,99,97,99,104,101,100,32,109,101,116,97,100,97,116,97,32,117,112,45,116,111,45,100,97,116,101,46,10,91,68,69,66,85,71,93,32,111,114,103,46,119,115,111,50,46,109,98,58,119,115,111,50,109,98,58,112,111,109,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,114,97,109,112,97,114,116,58,114,97,109,112,97,114,116,45,116,114,117,115,116,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,107,101,114,110,101,108,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,105,109,112,108,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,119,115,45,109,101,116,97,100,97,116,97,95,50,46,48,95,115,112,101,99,58,106,97,114,58,49,46,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,116,97,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,58,115,101,114,118,108,101,116,45,97,112,105,58,106,97,114,58,50,46,52,58,99,111,109,112,105,108,101,32,40,118,101,114,115,105,111,110,32,109,97,110,97,103,101,100,32,102,114,111,109,32,50,46,51,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,119,115,100,108,52,106,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,45,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,97,112,105,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,100,111,109,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,58,119,111,100,101,110,45,105,109,112,108,45,99,111,109,109,111,110,115,58,106,97,114,58,49,46,48,77,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,119,115,46,114,115,58,106,115,114,51,49,49,45,97,112,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,109,101,120,58,106,97,114,58,105,109,112,108,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,120,105,115,50,45,109,116,111,109,112,111,108,105,99,121,58,106,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,58,97,100,100,114,101,115,115,105,110,103,58,109,97,114,58,49,46,54,46,49,45,119,115,111,50,118,49,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,100,111,109,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,97,99,116,105,118,97,116,105,111,110,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,106,97,118,97,109,97,105,108,95,49,46,52,95,115,112,101,99,58,106,97,114,58,49,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,115,116,120,45,97,115,108,58,106,97,114,58,51,46,50,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,115,101,99,117,114,105,116,121,58,119,115,115,52,106,58,106,97,114,58,49,46,53,46,49,49,45,119,115,111,50,118,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,55,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,115,97,110,116,117,97,114,105,111,58,120,109,108,115,101,99,58,106,97,114,58,49,46,52,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,49,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,115,97,109,108,58,106,97,114,58,50,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,111,112,101,110,119,115,58,106,97,114,58,49,46,50,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,111,112,101,110,115,97,109,108,58,120,109,108,116,111,111,108,105,110,103,58,106,97,114,58,49,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,106,99,108,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,108,111,103,52,106,45,111,118,101,114,45,115,108,102,52,106,58,106,97,114,58,49,46,53,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,106,111,100,97,45,116,105,109,101,58,106,111,100,97,45,116,105,109,101,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,101,120,116,45,106,100,107,49,53,58,106,97,114,58,49,46,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,110,101,116,46,106,99,105,112,58,106,99,105,112,45,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,114,103,115,58,106,97,114,103,115,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,118,101,108,111,99,105,116,121,58,118,101,108,111,99,105,116,121,58,106,97,114,58,49,46,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,114,101,115,111,108,118,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,120,101,114,99,101,115,58,115,101,114,105,97,108,105,122,101,114,58,106,97,114,58,50,46,57,46,49,58,114,117,110,116,105,109,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,106,100,107,49,52,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,115,108,102,52,106,58,115,108,102,52,106,45,97,112,105,58,106,97,114,58,49,46,53,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,52,58,106,97,114,58,49,52,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,115,108,102,52,106,46,119,115,111,50,58,115,108,102,52,106,58,106,97,114,58,49,46,53,46,49,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,108,111,103,52,106,58,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,97,110,100,101,115,46,119,115,111,50,58,97,110,100,101,115,45,99,108,105,101,110,116,58,106,97,114,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,102,105,108,116,101,114,45,115,115,108,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,109,105,110,97,58,109,105,110,97,45,99,111,114,101,58,106,97,114,58,49,46,49,46,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,106,109,115,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,108,111,103,103,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,108,111,103,52,106,58,106,97,114,58,49,46,50,46,49,51,46,118,50,48,48,55,48,54,49,49,49,52,49,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,111,111,116,115,116,114,97,112,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,119,114,97,112,112,101,114,58,119,114,97,112,112,101,114,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,106,97,114,58,51,46,56,46,49,46,118,50,48,49,50,48,56,51,48,45,49,52,52,53,50,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,58,111,114,103,46,101,99,108,105,112,115,101,46,111,115,103,105,46,115,101,114,118,105,99,101,115,58,106,97,114,58,51,46,51,46,49,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,50,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,105,108,101,115,46,119,115,111,50,58,116,105,108,101,115,45,106,115,112,58,106,97,114,58,50,46,48,46,53,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,46,119,115,111,50,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,104,97,122,101,108,99,97,115,116,58,104,97,122,101,108,99,97,115,116,58,106,97,114,58,51,46,50,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,104,101,108,112,101,114,58,106,97,114,58,49,46,49,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,98,111,117,110,99,121,99,97,115,116,108,101,58,98,99,112,114,111,118,45,106,100,107,49,53,58,106,97,114,58,49,51,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,108,108,101,99,116,105,111,110,115,58,106,97,114,58,51,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,45,104,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,117,108,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,116,114,105,98,101,115,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,99,97,116,97,108,105,110,97,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,110,110,111,116,97,116,105,111,110,115,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,97,112,105,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,117,116,105,108,58,106,97,114,58,55,46,48,46,53,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,112,114,111,120,121,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,97,117,116,104,101,110,116,105,99,97,116,111,114,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,46,104,116,116,112,46,115,101,114,118,108,101,116,58,106,97,114,58,49,46,49,46,51,48,48,46,118,50,48,49,50,48,53,50,50,45,49,56,52,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,111,114,103,46,97,112,97,99,104,101,46,106,97,115,112,101,114,46,103,108,97,115,115,102,105,115,104,58,106,97,114,58,50,46,50,46,50,46,118,50,48,49,50,48,53,49,53,48,57,53,53,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,58,106,97,114,58,50,46,50,46,48,46,118,50,48,49,49,49,50,48,49,49,49,53,56,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,99,111,114,101,46,99,111,109,109,111,110,115,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,115,101,114,118,108,101,116,46,106,115,112,46,106,115,116,108,46,119,115,111,50,58,106,115,116,108,58,106,97,114,58,49,46,50,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,101,99,108,105,112,115,101,46,101,113,117,105,110,111,120,58,106,97,118,97,120,46,115,101,114,118,108,101,116,58,106,97,114,58,51,46,48,46,48,46,118,50,48,49,49,49,50,48,49,49,48,49,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,97,110,103,46,119,115,111,50,58,99,111,109,109,111,110,115,45,108,97,110,103,58,106,97,114,58,50,46,54,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,116,105,108,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,116,101,115,116,32,40,115,99,111,112,101,32,109,97,110,97,103,101,100,32,102,114,111,109,32,99,111,109,112,105,108,101,32,98,121,32,111,114,103,46,119,115,111,50,46,109,98,58,109,98,45,112,97,114,101,110,116,58,51,46,48,46,48,45,83,78,65,80,83,72,79,84,41,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,117,101,117,105,110,103,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,98,97,115,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,105,103,110,105,116,101,114,101,97,108,116,105,109,101,46,115,109,97,99,107,46,119,115,111,50,58,115,109,97,99,107,120,58,106,97,114,58,51,46,48,46,52,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,106,97,120,101,110,58,106,97,120,101,110,58,106,97,114,58,49,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,100,111,109,52,106,58,100,111,109,52,106,58,106,97,114,58,49,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,100,111,109,58,106,100,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,109,108,45,97,112,105,115,58,120,109,108,45,97,112,105,115,58,106,97,114,58,49,46,51,46,48,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,101,114,99,101,115,73,109,112,108,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,120,111,109,58,120,111,109,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,101,114,99,101,115,58,120,109,108,80,97,114,115,101,114,65,80,73,115,58,106,97,114,58,50,46,54,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,120,97,108,97,110,58,120,97,108,97,110,58,106,97,114,58,50,46,54,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,46,105,98,109,46,105,99,117,58,105,99,117,52,106,58,106,97,114,58,50,46,54,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,46,119,115,111,50,58,99,111,109,109,111,110,115,45,102,105,108,101,117,112,108,111,97,100,58,106,97,114,58,49,46,50,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,46,119,115,111,50,58,97,110,116,58,106,97,114,58,49,46,55,46,48,46,119,115,111,50,118,49,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,110,116,58,97,110,116,45,108,97,117,110,99,104,101,114,58,106,97,114,58,49,46,55,46,48,58,116,101,115,116,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,46,119,115,111,50,58,99,111,109,109,111,110,115,45,104,116,116,112,99,108,105,101,110,116,58,106,97,114,58,51,46,49,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,99,111,109,109,111,110,115,46,115,115,108,58,110,111,116,45,121,101,116,45,99,111,109,109,111,110,115,45,115,115,108,58,106,97,114,58,48,46,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,97,112,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,46,119,115,111,50,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,46,48,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,110,101,116,46,115,111,117,114,99,101,102,111,114,103,101,46,102,105,110,100,98,117,103,115,58,97,110,110,111,116,97,116,105,111,110,115,58,106,97,114,58,49,46,51,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,106,97,118,97,120,46,99,97,99,104,101,46,119,115,111,50,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,106,98,111,115,115,46,115,112,101,99,46,106,97,118,97,120,46,116,114,97,110,115,97,99,116,105,111,110,58,106,98,111,115,115,45,116,114,97,110,115,97,99,116,105,111,110,45,97,112,105,95,49,46,49,95,115,112,101,99,58,106,97,114,58,49,46,48,46,48,46,70,105,110,97,108,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,114,101,103,105,115,116,114,121,46,120,98,111,111,116,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,99,111,114,101,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,100,98,99,112,46,119,115,111,50,58,99,111,109,109,111,110,115,45,100,98,99,112,58,106,97,114,58,49,46,52,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,109,112,97,115,115,45,112,114,111,106,101,99,116,46,119,115,111,50,58,99,111,109,112,97,115,115,58,106,97,114,58,50,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,114,100,98,109,115,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,110,100,97,116,97,115,111,117,114,99,101,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,46,119,115,111,50,58,106,100,98,99,45,112,111,111,108,58,106,97,114,58,55,46,48,46,51,52,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,116,111,109,99,97,116,58,116,111,109,99,97,116,45,106,100,98,99,58,106,97,114,58,55,46,48,46,52,55,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,46,119,115,111,50,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,45,115,99,114,97,116,99,104,112,97,100,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,112,111,105,58,112,111,105,58,106,97,114,58,51,46,57,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,46,119,115,111,50,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,112,111,111,108,58,99,111,109,109,111,110,115,45,112,111,111,108,58,106,97,114,58,49,46,53,46,54,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,111,114,103,46,119,115,111,50,46,115,101,99,117,114,101,118,97,117,108,116,58,106,97,114,58,49,46,48,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,108,105,58,99,111,109,109,111,110,115,45,99,108,105,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,105,111,58,99,111,109,109,111,110,115,45,105,111,58,106,97,114,58,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,117,105,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,99,111,109,109,111,110,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,115,101,114,46,109,103,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,113,112,105,100,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,117,109,46,119,115,46,97,112,105,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,46,119,115,111,50,58,97,120,105,111,109,58,106,97,114,58,49,46,50,46,49,49,46,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,103,101,114,111,110,105,109,111,46,115,112,101,99,115,46,119,115,111,50,58,103,101,114,111,110,105,109,111,45,115,116,97,120,45,97,112,105,95,49,46,48,95,115,112,101,99,58,106,97,114,58,49,46,48,46,49,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,119,111,111,100,115,116,111,120,45,99,111,114,101,45,97,115,108,58,106,97,114,58,52,46,50,46,48,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,99,111,100,101,104,97,117,115,46,119,111,111,100,115,116,111,120,58,115,116,97,120,50,45,97,112,105,58,106,97,114,58,51,46,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,32,32,32,106,97,118,97,120,46,120,109,108,46,115,116,114,101,97,109,58,115,116,97,120,45,97,112,105,58,106,97,114,58,49,46,48,45,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,58,111,114,103,46,119,115,111,50,46,99,97,114,98,111,110,46,101,118,101,110,116,46,99,108,105,101,110,116,46,115,116,117,98,58,106,97,114,58,52,46,51,46,48,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,99,108,105,101,110,116,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,97,120,105,115,50,46,119,115,111,50,58,97,120,105,115,50,45,106,115,111,110,58,106,97,114,58,49,46,54,46,49,46,119,115,111,50,118,49,49,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,111,100,101,110,46,119,115,111,50,58,119,111,100,101,110,58,106,97,114,58,49,46,48,46,48,46,77,56,45,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,104,116,116,112,99,111,109,112,111,110,101,110,116,115,46,119,115,111,50,58,104,116,116,112,99,111,114,101,58,106,97,114,58,52,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,99,111,100,101,99,46,119,115,111,50,58,99,111,109,109,111,110,115,45,99,111,100,101,99,58,106,97,114,58,49,46,51,46,48,46,119,115,111,50,118,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,97,120,105,111,109,58,97,120,105,111,109,45,97,112,105,58,106,97,114,58,49,46,50,46,49,49,45,119,115,111,50,118,53,45,83,78,65,80,83,72,79,84,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,119,115,100,108,52,106,46,119,115,111,50,58,119,115,100,108,52,106,58,106,97,114,58,49,46,54,46,50,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,110,101,101,116,104,105,46,119,115,111,50,58,110,101,101,116,104,105,58,106,97,114,58,50,46,48,46,52,46,119,115,111,50,118,52,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,111,114,103,46,97,112,97,99,104,101,46,119,115,46,99,111,109,109,111,110,115,46,115,99,104,101,109,97,46,119,115,111,50,58,88,109,108,83,99,104,101,109,97,58,106,97,114,58,49,46,52,46,55,46,119,115,111,50,118,50,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,99,111,109,109,111,110,115,45,108,111,103,103,105,110,103,58,106,97,114,58,49,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,108,111,103,107,105,116,58,108,111,103,107,105,116,58,106,97,114,58,49,46,48,46,49,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,32,32,32,32,32,32,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,97,118,97,108,111,110,45,102,114,97,109,101,119,111,114,107,58,106,97,114,58,52,46,49,46,51,58,99,111,109,112,105,108,101,10,91,68,69,66,85,71,93,32,32,32,32,106,108,105,110,101,58,106,108,105,110,101,58,106,97,114,58,49,46,48,58,99,111,109,112,105,108,101,10,91,73,78,70,79,93,32,10,91,73,78,70,79,93,32,45,45,45,32,109,97,118,101,110,45,99,108,101,97,110,45,112,108,117,103,105,110,58,50,46,52,46,49,58,99,108,101,97,110,32,40,100,101,102,97,117,108,116,45,99,108,101,97,110,41,32,64,32,119,115,111,50,109,98,32,45,45,45,10,91,68,69,66,85,71,93,32,67,114,101,97,116,101,100,32,110,101,119,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,73,109,112,111,114,116,105,110,103,32,102,111,114,101,105,103,110,32,112,97,99,107,97,103,101,115,32,105,110,116,111,32,99,108,97,115,115,32,114,101,97,108,109,32,109,97,118,101,110,46,97,112,105,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,101,118,101,110,116,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,116,114,97,110,115,102,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,109,101,116,97,100,97,116,97,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,88,112,112,51,68,111,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,99,111,108,108,101,99,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,118,101,114,115,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,110,105,116,111,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,114,101,115,111,117,114,99,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,111,103,103,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,102,105,108,101,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,112,111,115,105,116,111,114,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,97,115,115,114,101,97,108,109,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,101,120,101,99,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,115,112,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,101,112,111,114,116,105,110,103,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,117,115,97,98,105,108,105,116,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,97,105,110,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,109,112,111,110,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,83,101,114,105,97,108,105,122,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,101,110,116,105,99,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,103,114,97,112,104,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,115,101,116,116,105,110,103,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,99,108,97,115,115,119,111,114,108,100,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,109,112,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,116,111,111,108,99,104,97,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,100,101,112,108,111,121,109,101,110,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,111,98,115,101,114,118,101,114,115,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,69,120,99,101,112,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,117,116,105,108,46,120,109,108,46,112,117,108,108,46,88,109,108,80,117,108,108,80,97,114,115,101,114,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,99,108,105,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,105,110,115,116,97,108,108,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,116,101,120,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,97,117,116,104,111,114,105,122,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,114,111,106,101,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,114,116,105,110,102,111,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,108,105,102,101,99,121,99,108,101,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,99,111,110,102,105,103,117,114,97,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,97,114,116,105,102,97,99,116,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,109,111,100,101,108,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,119,97,103,111,110,46,112,114,111,120,121,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,115,111,110,97,116,121,112,101,46,97,101,116,104,101,114,46,114,101,115,111,108,117,116,105,111,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,97,112,97,99,104,101,46,109,97,118,101,110,46,112,108,117,103,105,110,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104,97,117,115,46,112,108,101,120,117,115,46,42,32,60,32,112,108,101,120,117,115,46,99,111,114,101,10,91,68,69,66,85,71,93,32,32,32,73,109,112,111,114,116,101,100,58,32,111,114,103,46,99,111,100,101,104 \ No newline at end of file diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/artifacts/mb/config/user-mgt-admin-role-name.xml b/modules/broker/integration/tests-ui-integration/src/test/resources/artifacts/mb/config/user-mgt-admin-role-name.xml deleted file mode 100644 index eb4bfef3..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/artifacts/mb/config/user-mgt-admin-role-name.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - true - administrator - - admin - admin - - everyone - - jdbc/WSO2CarbonDB - - - - - org.wso2.carbon.user.core.tenant.JDBCTenantManager - false - 100 - false - default - SHA-256 - true - true - true - false - ^[\S]{5,30}$ - ^[\S]{5,30}$ - ^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$ - ^[\S]{3,30}$ - ^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$ - ^[\S]{3,30}$ - true - 100 - 100 - false - false - - - - /permission - true - - - - diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/artifacts/mb/config/user-mgt.xml b/modules/broker/integration/tests-ui-integration/src/test/resources/artifacts/mb/config/user-mgt.xml deleted file mode 100644 index c50646a8..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/artifacts/mb/config/user-mgt.xml +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - true - admin - - admin - admin - - everyone - - jdbc/WSO2CarbonDB - - - - - org.wso2.carbon.user.core.tenant.JDBCTenantManager - false - 100 - false - default - SHA-256 - true - true - true - false - ^[\S]{5,30}$ - ^[\S]{5,30}$ - ^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$ - ^[\S]{3,30}$ - ^[^~!#$;%^*+={}\\|\\\\<>,\'\"]{3,30}$ - ^[\S]{3,30}$ - true - 100 - 100 - false - false - WSO2 - - - - /permission - true - - - - diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/automation.xml b/modules/broker/integration/tests-ui-integration/src/test/resources/automation.xml deleted file mode 100644 index 8c3a1279..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/automation.xml +++ /dev/null @@ -1,240 +0,0 @@ - - - - - - - - - - - 60000 - - standalone - - true - - false - - - - - - - http://10.100.2.51:4444/wd/hub/ - - - - firefox - - /software/firefox/firefox-bin - - - - - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - jdbc:h2:testDB - wso2carbon - wso2carbon - org.h2.Driver - - - - - - - keystores/products/wso2carbon.jks - - JKS - - wso2carbon - - wso2carbon - - wso2carbon - - - - - client-truststore.jks - - JKS - - wso2carbon - - - - - - https://wso2.org/repo - file:///home/krishantha/test - - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - queueAuthUser - queueAuthUser - - - topicAuthUser - topicAuthUser - - - - - - - - - admin - admin - - - - - testuser11 - testuser11 - - - testuser21 - testuser21 - - - - - - - - - - - - - localhost - - - 11063 - 10743 - 6972 - 9972 - 3183 - 10183 - - - - - - - - - - - - - - - org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension - - - - - org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/automationXMLSchema.xsd b/modules/broker/integration/tests-ui-integration/src/test/resources/automationXMLSchema.xsd deleted file mode 100644 index 8cf956ce..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/automationXMLSchema.xsd +++ /dev/null @@ -1,590 +0,0 @@ - - - - - - - - ================================================= - Parameters ================================================= - Browser type with used by framework to execute UI test, supported types - - chrome|firefox|opera|ie|htmlUnit - - - - - - - Change this to edit wait time for test - artifact deployment - - - - - - Change this to product|platform/cloud to - execute test on specific environment - - - - - - - Change this to true if you want to generate - coverage statistics - - - - - - Change this to true if you want to enable - framework dashboard - - - - - - - - - - - - - - - Change to enable remote webDriver - URL of remote webDriver server - - - - - - - - - - - - - Type of the browser selenium tests - are running" - - - - - - - - path to webDriver - executable - required only for - chrome - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - KeyStore which will be used for - encrypting/decrypting passwords - and other sensitive information. - - - - - - - Keystore file location - - - - - - Keystore type (JKS/PKCS12 etc.) - - - - - - Keystore password - - - - - - Private Key alias - - - - - - Private Key password - - - - - - - - - - System wide trust-store which is used to - maintain the certificates of all - the trusted parties. - - - - - - - trust-store file location - - - - - - trust-store type (JKS/PKCS12 - etc.) - - - - - - trust-store password - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/axis2config/axis2_client.xml b/modules/broker/integration/tests-ui-integration/src/test/resources/axis2config/axis2_client.xml deleted file mode 100644 index a8b584d0..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/axis2config/axis2_client.xml +++ /dev/null @@ -1,300 +0,0 @@ - - - - - - - true - false - false - - - 500 - - 15000 - - - false - - - - true - - - - - - false - - - admin - axis2 - - - - - - - - - - - - - - - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6071 - - - - - - - - - - - - - - - - - - - - - - HTTP/1.1 - chunked - 60000 - 60000 - - - HTTP/1.1 - chunked - 60000 - 60000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar b/modules/broker/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar deleted file mode 100644 index d28b3a08..00000000 Binary files a/modules/broker/integration/tests-ui-integration/src/test/resources/client/modules/addressing-1.6.1-wso2v20.mar and /dev/null differ diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar b/modules/broker/integration/tests-ui-integration/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar deleted file mode 100644 index 5903cc4b..00000000 Binary files a/modules/broker/integration/tests-ui-integration/src/test/resources/client/modules/rampart-1.6.1-wso2v10.mar and /dev/null differ diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/filters.txt b/modules/broker/integration/tests-ui-integration/src/test/resources/filters.txt deleted file mode 100644 index 04aa6cb7..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/filters.txt +++ /dev/null @@ -1,17 +0,0 @@ --*.stub* --*.stub_ --*.stub_4.0.0 --*.stub- --org.eclipse.* --*.equinox.* --org.wso2.carbon.user.core.* --samples.* --*.log4j* --*.axis2* --*.ui* --*.tenant* --*.stratos* --*.eventing* --*tests-transports* --org.wso2.carbon.mediation.statistics* --*startup* \ No newline at end of file diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/instrumentation.txt b/modules/broker/integration/tests-ui-integration/src/test/resources/instrumentation.txt deleted file mode 100644 index 12af5f28..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/instrumentation.txt +++ /dev/null @@ -1,2 +0,0 @@ -org.wso2.carbon.andes* -org.dna* diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/keystores/products/client-truststore.jks b/modules/broker/integration/tests-ui-integration/src/test/resources/keystores/products/client-truststore.jks deleted file mode 100644 index cd16dd7e..00000000 Binary files a/modules/broker/integration/tests-ui-integration/src/test/resources/keystores/products/client-truststore.jks and /dev/null differ diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/keystores/products/wso2carbon.jks b/modules/broker/integration/tests-ui-integration/src/test/resources/keystores/products/wso2carbon.jks deleted file mode 100644 index 7942c53c..00000000 Binary files a/modules/broker/integration/tests-ui-integration/src/test/resources/keystores/products/wso2carbon.jks and /dev/null differ diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/log4j.properties b/modules/broker/integration/tests-ui-integration/src/test/resources/log4j.properties deleted file mode 100644 index 535afa56..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/log4j.properties +++ /dev/null @@ -1,45 +0,0 @@ -# -# Copyright (c) 2005-2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -# -# WSO2 Inc. licenses this file to you 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. -# - -# -# This is the log4j configuration file used by WSO2 Carbon -# -# IMPORTANT : Please do not remove or change the names of any -# of the Appenders defined here. The layout pattern & log file -# can be changed using the WSO2 Carbon Management Console, and those -# settings will override the settings in this file. -# - -log4j.rootLogger=INFO, console, Default - -log4j.logger.org.wso2=INFO -log4j.logger.org.apache.axis2.deployment.ModuleDeployer=WARN -#Automation file apender -log4j.appender.Default=org.apache.log4j.RollingFileAppender -log4j.appender.Default.File=logs/automation.log -log4j.appender.Default.Append=true -log4j.appender.Default.MaxFileSize=10MB -log4j.appender.Default.MaxBackupIndex=10 -log4j.appender.Default.layout=org.apache.log4j.PatternLayout -log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n - - -#Automation console apender -log4j.appender.console=org.apache.log4j.ConsoleAppender -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml b/modules/broker/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml deleted file mode 100644 index 1d089ac8..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/testng-server-mgt.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/broker/integration/tests-ui-integration/src/test/resources/testng.xml b/modules/broker/integration/tests-ui-integration/src/test/resources/testng.xml deleted file mode 100644 index f09d5e15..00000000 --- a/modules/broker/integration/tests-ui-integration/src/test/resources/testng.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/pom.xml b/modules/broker/org.wso2.stratos.mb.dashboard.ui/pom.xml deleted file mode 100644 index 28f03444..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/pom.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - org.wso2.iot - wso2iot-broker-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.stratos.mb.dashboard.ui - bundle - WSO2 Stratos Message Broker - Dashboard UI - - - - - - org.apache.felix - maven-scr-plugin - - - org.apache.felix - maven-bundle-plugin - - true - - - ${project.artifactId} - ${project.artifactId} - - org.wso2.stratos.governance.dashboard.ui.*, - - - !javax.xml.namespace, - javax.xml.namespace; version=0.0.0, - javax.servlet; version=2.4.0, - javax.servlet.http; version=2.4.0, - *;resolution:=optional - - UIBundle - - - - - - - - - - org.apache.axis2.wso2 - axis2 - - - log4j - log4j - - - org.wso2.carbon - org.wso2.carbon.registry.core - - - org.wso2.carbon - org.wso2.carbon.ui - - - org.wso2.carbon.commons - org.wso2.carbon.statistics.ui - - - commons-logging - commons-logging - - - diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/css/dashboard-common.css b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/css/dashboard-common.css deleted file mode 100644 index c241d781..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/css/dashboard-common.css +++ /dev/null @@ -1,66 +0,0 @@ -.tip-table { - border-collapse: collapse; - width:868px; -} - -.tip-table tr td.tip-empty { - width: 20px; -} - -.tip-top { - width: 202px; - height: 85px; - z-index: 90; -} - -.tip-content-lifter { - margin-top: -20px; - position:relative; - font-size:11px; -} -.tip-content a.dashboard-subtitle { - line-height:30px; -} -.tip-content { - background: transparent url(../images/tip-back.png) repeat-y left top; - padding: 10px !important; - width: 182px; - z-index: 100; -} - -.tip-bottom { - background: transparent url(../images/tip-bottom.png) no-repeat left top; - height: 11px; - width: 202px; -} - -a.tip-title,h3.tip-title { - color: #333333 !important; - font-size: 18px !important; - text-decoration: none; - margin-bottom:0 !important; - margin-top:0 !important; - display:block; -} -a.tip-title{ - cursor:pointer; -} - -a.tip-title:hover { - color: #930000 !important; -} -div#workArea h2.dashboard-title { - background-image: url(../images/dashboard-title-bg.gif); - background-position: left bottom; - background-repeat: repeat-x; - border-bottom: 0 none; - color: #000000; - font-size: 150%; - font-weight: bold; - line-height: 25px; - margin-bottom: 20px; - padding-bottom: 10px; -} -.tip-table-div{ - height:10px; -} \ No newline at end of file diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/css/dashboard.css b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/css/dashboard.css deleted file mode 100644 index 0afeb38e..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/css/dashboard.css +++ /dev/null @@ -1,39 +0,0 @@ -div#dashboard-clear { - clear:both; - margin-top:5px; -} -div.tip { - width: 133px; - float: left; - margin-left: 20px; - margin-right: 20px; - margin-bottom: 40px; - padding-left: 12px; - padding-right: 12px; - text-align: center; - background-image: url(../images/tip-bg.gif); - background-position: left 12px; - background-repeat: no-repeat; - -} -div#workArea h2.dashboard-title { - background-image: url(../images/dashboard-title-bg.gif); - background-position: left bottom; - background-repeat: repeat-x; - border-bottom: 0px; - line-height: 20px; - font-size: 130%; - color: #000; - margin-bottom: 20px; -} -div.tip div.image { - height: 65px; -} -div.tip a.dashboard-subtitle { - line-height: 25px; - font-weight: bold; -} -div.tip p{ - text-align: left; - font-size: 11px; -} diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/docs/images/dashboard.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/docs/images/dashboard.png deleted file mode 100644 index 4c0117ea..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/docs/images/dashboard.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/docs/userguide.html b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/docs/userguide.html deleted file mode 100644 index c5972fe2..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/docs/userguide.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - Business Rules Server - User Guide - - - - -

Business Rules Server Home

- -

-Separating business rules from infrastructure code boosts the agility of an enterprise by increasing the ability to smoothly evolve. The WSO2 Business Rules Server is the easiest way to bring rule processing and SOA together by exposing rules as services and allowing rules to act upon message flows. The WSO2 Business Rules Server provides a "Wizard interface" for easily exposing a rule as a service, a rule repository including versioning and rollback, governance and lifecycle management, Web 2.0 community features including the ability to share, tag, comment on and rate rules, standard SOA interoperability and Quality of Service (QoS) including secure and reliable WS-* and REST services, and many more. -

- - -

Figure1: Cloud Business Rules Server Home Page

- - diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/dashboard-title-bg.gif b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/dashboard-title-bg.gif deleted file mode 100644 index 15a54065..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/dashboard-title-bg.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb1.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb1.png deleted file mode 100644 index fd33a269..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb1.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb2.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb2.png deleted file mode 100644 index 4a3e1867..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb2.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb3.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb3.png deleted file mode 100644 index 6eaabaf0..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb3.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb4.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb4.png deleted file mode 100644 index 0ea33ecc..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb4.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb5.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb5.png deleted file mode 100644 index 410ae1b9..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb5.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb6.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb6.png deleted file mode 100644 index efedf484..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb6.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb7.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb7.png deleted file mode 100644 index 136a99f1..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb7.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb8.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb8.png deleted file mode 100644 index 52dd82e4..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/mb8.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/t-right-logo.gif b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/t-right-logo.gif deleted file mode 100644 index 644f8413..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/t-right-logo.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/tip-bottom.png b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/tip-bottom.png deleted file mode 100644 index 3159c0ec..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/images/tip-bottom.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/index-old.jsp b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/index-old.jsp deleted file mode 100644 index a11222b3..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/index-old.jsp +++ /dev/null @@ -1,86 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> - - - - - - - - -<%@include file="../admin/index.jsp" %> - - - - -
-
-
- -
-
-
- diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/index.jsp b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/index.jsp deleted file mode 100644 index 30f6ec82..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/index.jsp +++ /dev/null @@ -1,198 +0,0 @@ - -<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %> - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> - - -<% - Object param = session.getAttribute("authenticated"); - String passwordExpires = (String) session.getAttribute(ServerConstants.PASSWORD_EXPIRATION); - boolean loggedIn = false; - if (param != null) { - loggedIn = (Boolean) param; - } -%> - -
- <% - if (loggedIn && passwordExpires != null) { - %> -

Your password expires at <%=passwordExpires%>. Please change by visiting here

- <% - } - %> -
-
-
- - -

WSO2 MB quick start dashboard

- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -

Publish/Subscribe to Topics


- - -

WS-Eventing to publish/subscribe to topics using web service standards.

- -
-
-
-

AMQP


- -

JMS support thorough AMQP to publish/subscribe to topics and Queues.

- -
-
-
-

Topic Authorization


- -

Role based authorization to topics.

- -
-
-
-

Manage topics and queues permissions


- -

Administrative console support to manage topics and queues permissions.

- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-

Clustering support


- -

Clustering support to facilitate high-availability and fail-over support.

- -
-
-
-

User based authorization for queues


- - -

User based authorization for queues.

- -
-
-
-

Message browsing


- - -

Message browsing support to view message content in the admin console.

- -
-
-
-

WS-eventing support


- - -

WS-eventing support to expose and consume events using two different standard APIs.

- -
-
-

-
-

-
diff --git a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/system_stats_ajaxprocessor.jsp b/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/system_stats_ajaxprocessor.jsp deleted file mode 100644 index 72ce2a26..00000000 --- a/modules/broker/org.wso2.stratos.mb.dashboard.ui/src/main/resources/web/tenant-dashboard/system_stats_ajaxprocessor.jsp +++ /dev/null @@ -1,127 +0,0 @@ - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ page import="org.apache.axis2.context.ConfigurationContext" %> -<%@ page import="org.wso2.carbon.CarbonConstants" %> -<%@ page import="org.wso2.carbon.statistics.ui.StatisticsAdminClient" %> -<%@ page import="org.wso2.carbon.statistics.ui.types.carbon.SystemStatistics" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.ServerConstants" %> -<%@ page import="org.wso2.carbon.ui.CarbonUIMessage" %> - -<% - response.setHeader("Cache-Control", "no-cache"); - - String backendServerURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - ConfigurationContext configContext = - (ConfigurationContext) config.getServletContext().getAttribute(CarbonConstants.CONFIGURATION_CONTEXT); - - String cookie = (String) session.getAttribute(ServerConstants.ADMIN_SERVICE_COOKIE); - StatisticsAdminClient client = new StatisticsAdminClient(cookie, backendServerURL, - configContext, request.getLocale()); - - SystemStatistics systemStats; - try { - systemStats = client.getSystemStatistics(); - } catch (Exception e) { - response.setStatus(500); - CarbonUIMessage uiMsg = new CarbonUIMessage(CarbonUIMessage.ERROR, e.getMessage(), e); - session.setAttribute(CarbonUIMessage.ID, uiMsg); -%> - -<% - return; - } -%> - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<%= ((float) Math.round(systemStats.getAvgResponseTime() * 1000)) / 1000 %> - ms -
- <% if (systemStats.getMinResponseTime() <= 0) {%> - < 1.00 ms - <% } else {%> - <%= systemStats.getMinResponseTime()%> ms - <% }%> -
<%= systemStats.getMaxResponseTime()%> ms
<%= systemStats.getRequestCount()%> -
<%= systemStats.getResponseCount()%> -
<%= systemStats.getFaultCount()%> -
<%= systemStats.getServices()%> -
-
  - - - - - - - - - -
-
-
-
-
\ No newline at end of file diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/pom.xml b/modules/broker/org.wso2.stratos.mb.login.ui/pom.xml deleted file mode 100644 index fe76c028..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - org.wso2.iot - wso2iot-broker-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.stratos.mb.login.ui - bundle - WSO2 Stratos Message Broker - Login User Interface - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - add-source - generate-sources - - add-source - - - - target/generated-code/src - - - - - - - org.apache.felix - maven-bundle-plugin - - true - - - ${project.artifactId} - ${project.artifactId} - - javax.servlet; version=2.4.0, - javax.servlet.http; version=2.4.0, - org.apache.lucene.*, - *;resolution:=optional - - UIBundle - - - - - - - - - log4j - log4j - - - org.wso2.carbon - org.wso2.carbon.registry.core - - - - commons-logging - commons-logging - - - javax.servlet - servlet-api - provided - - - org.apache.axis2.wso2 - axis2 - - - org.apache.ws.commons.axiom.wso2 - axiom - - - org.wso2.carbon - org.wso2.carbon.ui - - - org.wso2.carbon - org.wso2.carbon.core - - - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/META-INF/component.xml b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/META-INF/component.xml deleted file mode 100644 index 746a68be..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/META-INF/component.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/org/wso2/stratos/mb/login/ui/i18n/JSResources.properties b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/org/wso2/stratos/mb/login/ui/i18n/JSResources.properties deleted file mode 100644 index 4282f036..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/org/wso2/stratos/mb/login/ui/i18n/JSResources.properties +++ /dev/null @@ -1,2 +0,0 @@ -password.mismatched=Passwords do not match. -current.password.should.provided=You should provide the current password inorder to change the password. \ No newline at end of file diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/org/wso2/stratos/mb/login/ui/i18n/Resources.properties b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/org/wso2/stratos/mb/login/ui/i18n/Resources.properties deleted file mode 100644 index 887b0878..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/org/wso2/stratos/mb/login/ui/i18n/Resources.properties +++ /dev/null @@ -1,43 +0,0 @@ -submit.tenant=Submit Tenant -domain=Domain -domain.information=Domain Information -contact.details=Contact Details -admin.username=Admin Username -current.admin.password=Current Admin Password -new.admin.password=New Admin Password -new.admin.password.repeat=New Admin Password (Repeat) -admin.password=Admin Password -admin.password.repeat=Admin Password (Repeat) -govern.add_tenants.menu=Add New Tenant -govern.view_tenants.menu=View Tenants -overview=Overview -tenants.list=Tenants List -company.organization=Company/Organization -admin.contact=Admin Contact -edit=Edit -multitenancy=Multitenancy -added.successfully=You have successfully added a new tenant with domain: -updated.successfully=You have successfully updated the tenant with domain: -update.added.tenant=Update the just added/updated tenant -update.tenant=Update Tenant -add.new.tenant=Add a new tenant -register.new.organization=Register A New Organization -view.all.tenants=View all tenants -tenant.admin=Tenant Admin -tenant.description=Tenant Description -admin.fullname=Full Name -admin.address=Address -admin.email=Email -admin.telephone=Telephone -admin.im=IM -admin.url=URL -self.registration=Registry Tenant -gaas=GaaS -gaas.register.a.new.tenant=Register A New Tenant -active=Active -theme.management=Theme Managment -word.verification=Word Verification -captcha.message=Type the characters you see in the picture below. -sign.in=Sign in -sign.in.help=Sign in help -forgot.password=Forgot Password diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/css/loginpage.css b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/css/loginpage.css deleted file mode 100644 index c398bad8..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/css/loginpage.css +++ /dev/null @@ -1,268 +0,0 @@ -body { - color:#111111; - font-family:"Calibri","Lucida Grande","Lucida Sans","Microsoft Sans Serif","Lucida Sans Unicode","Verdana","Sans-serif","trebuchet ms" !important; - font-size:0.75em; - font-size-adjust:none; - font-style:normal; - font-variant:normal; - font-weight:normal; - line-height:1.25em; - background-image: url(../images/body-bg.gif); - background-position: left top; - background-repeat: repeat-x; - margin: 0px; - padding: 0px; -} - -div.clear { - clear:both; -} -p { } - -td { } - -a:link { } - -a:visited { } - -a:hover { } - -a:active { } - -div#login-content { - background-image:url(../images/login-bg.gif); - background-position:left top; - background-repeat:no-repeat; - height:277px; - left:50%; - margin-left:-481px; - position:absolute; - text-align:center; - width:962px; -} -div#login-content div.main-text { - margin-top: 113px; - margin-left: 50px; - float: left; - width: 750px; - font-size: 140%; - line-height: 125%; - height: 80px; - text-align: left; -} -div.feature { - float:left; - margin-left:79px; - margin-top:23px; - padding-bottom:20px; - padding-top:20px; - text-align:left; - width:221px; -} -div.feature img { - float: left; - margin-right: 10px; - width: 64px; -} -div.feature h2 { - margin-top: 0px; - margin-bottom: 7px; - color: #0499CC; - font-size: 155%; - line-height: 110%; - font-weight: normal; - -} -div.feature p { - margin-top: 0px; - padding-top: 0px; -} -div#login-content div.feature-left { - margin-left: 70px; -} -a.register-button { - background-image:url(../images/reg-button.gif); - background-position:left top; - background-repeat:no-repeat; - color:#FFFFFF; - cursor:pointer; - display:block; - font-size:220%; - font-weight:normal; - line-height:63px; - margin:auto auto 5px; - text-align:left; - text-decoration:none; - text-indent:25px; - width:444px; -} -a.register-button:hover { - background-image: url(../images/reg-button-hover.gif); -} -div.resources { - text-align: center; -} -div.resources a { - background-image:url("../images/link-icon.gif"); - background-position:right 4px; - background-repeat:no-repeat; - color:#004990; - font-size:130%; - line-height:20px; - padding-right:15px; - text-decoration:none; -} -div.resources a:hover { - color: #000000; -} -table.ad { - width: 100%; - margin-top: 15px; -} -table.ad tr td { - vertical-align: top; - text-align: center; -} -td#ad { - height:210px; - width: 50%; -} -div#sign-in { - text-align:left; - width: 580px; - margin: auto; -} -div#sign-in div.sign-in-form { - width: 580px; -} -div#sign-in h2 { - border-bottom:1px solid #78BDE8; - font-size:130%; - margin-bottom:10px; - margin-top:0; - padding-bottom:10px; - padding-top:0; -} -div#sign-in table tr td.top { - padding-top: 10px; -} -div#sign-in table tr td { - padding-bottom:5px; - padding-right:7px; -} -div#sign-in table { - border-bottom:1px solid #0499CC; - margin-bottom:7px; -} -div#sign-in table tr td.title { - font-size: 180%; - font-weight: bold; - padding-bottom: 10px; - padding-top: 0px; - text-align: left; -} -#loginForm td label{ - font-size:12px; -} -div#sign-in a.help { - font-size: 14px; - text-decoration: none; - color: #00447C; -} -td#ad iframe.ad-frame { - border: 0px; - width: 420px; - height: 210px; - margin: 0px; - padding: 0px; -} -div#footer { - margin-top: 30px; - height: 50px; - border-top: solid 1px #009FC2; - padding-top: 7px; - text-align: left; -} -div#footer a { - text-decoration: none; - color: #00447C; -} -div#footer div.powered { - float: right; - font-size: 11px; - color: #333; -} -div#footer div.powered span { - float: left; - margin-right: 5px; - line-height: 23px; -} -div#sign-in table.sign-in { - border-bottom: 0px; -} -div#sign-in table tr td { - padding-top: 10px; - width: 290px; -} -div#sign-in table tbody tr td.third-party { - border-left: dotted 1px #cccccc; - padding: 20px; -} -div#sign-in table tbody tr td.third-party a img { - border: 0px; - margin-top: 10px; -} -.sign-in-box{ - -moz-border-radius: 5px; - border-radius: 5px; - border:solid 1px #b5dff7; - background-color:#ebf7fd; - padding-left:10px; - width:800px; - margin-left:70px; - - -moz-box-shadow: 0 0 3px #999; - -webkit-box-shadow: 0 0 3px #999; - box-shadow: 0 0 3px #999; -} -.sign-in-box h3{ - color:#0499cc; - font-size:12px; - font-weight:bold; - padding-bottom:10px; -} -.sign-in-box table tr td{ - text-align:left !important; -} -.user_pass_table a{ - font-size:11px; -} -.user_pass_table td{ - padding:4px; - text-align:left !important; -} -.sign-in-box div.help_txt{ - color: #666666; - line-height:20px; -} -.user_pass_td{ - border-right:solid 1px #ccc; -} -.google-app-td{ - padding-left:10px; - width:300px; -} -#loginBoxGoogle{ - margin-top:15px; -} -#loginBoxGoogle div.help_txt{ - font-size:11px; -} -h2.stratos-Signin{ - color:#0499cc; - font-size:22px; - line-height:30px; -} -.google-app-td img{ - cursor:pointer; -} \ No newline at end of file diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/css/tenant.css b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/css/tenant.css deleted file mode 100644 index 26d0e28b..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/css/tenant.css +++ /dev/null @@ -1,62 +0,0 @@ -/*css editor styles */ -.csseditor-top-line{ - background-color:black; - height:5px; -} -.csseditor-leftbox{ - background-color:#9a9a9a; - padding-left:5px; - padding-right:5px; - padding-bottom:5px; - padding-top:15px; - height:380px; -} -.csseditor-leftbox-top{ - color:#ffffff; - font-size:18px; - height:30px; -} -.csseditor-textbox{ - background-color:#dfe7ed; - border:solid 1px #ffffff; - width:100%; -} -.csseditor-rightbox{ - background-color:#c9c9c9; - border:solid 1px #ffffff; - height:400px; -} -.csseditor-rightbox-title{ - background-color:#9a9a9a; - height:25px; - color:#ffffff; - padding-left:10px; - padding-top:5px; -} -.csseditor-searchbox{ - padding-left:10px; - padding-top:10px; -} -#flickr_results{ - height:300px; - overflow-y:auto; - overflow-x:hidden; - margin-left:5px; - margin-right:5px; - border:solid 1px #ffffff; -} -.imageList{ -} -.imageList li { - padding-top: 3px !important; - padding-left: 5px !important; - background-color: #e1e9ec; - border: solid 1px #b5bdc1; -} - -.imageList li a { - background-image: url(../images/images.gif); - background-repeat: no-repeat; - padding-left: 20px; - text-indent: 50px; -} \ No newline at end of file diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/images/sign-in-no-domain.png b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/images/sign-in-no-domain.png deleted file mode 100644 index ad844f04..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/images/sign-in-no-domain.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/images/sign-in-with-domain.png b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/images/sign-in-with-domain.png deleted file mode 100644 index b931db2b..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/images/sign-in-with-domain.png and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/userguide.html b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/userguide.html deleted file mode 100644 index a1f58d7e..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/docs/userguide.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - Governance as a Service Sign In - User Guide - - - - -

Governance as a Service Sign In

- -

-You can use this form to sign in to the Governance as a Service (GaaS) Admin Console. You can access this page from one of the following urls. -

- -

-

    -
  1. The common login: https://governance.stratoslive.wso2.com
  2. -
  3. The domain name specific login: https://governance.stratoslive.wso2.com/t/yourdomoain (e.g. for the wso2.org domain: https://governance.stratoslive.wso2.com/t/wso2.org)
  4. -
-

- -

1. The common login: When accessed through https://governance.stratoslive.wso2.com

- -

-When accessed through https://governance.stratoslive.wso2.com -

-

Figure1: Sign In Form When accessed through https://governance.stratoslive.wso2.com

- -

- - - - - - - - - - - - - - - - -
- The Form Field - - Description -
Username

For this field you need to enter the username in the following format.

-
yourname@yourdomain
-

E.g. foo@wso2.com

-
PasswordThe Password of your user account -
-

- - -

2. The domain name specific login: When accessed through https://governance.stratoslive.wso2.com/t/yourdomoain

- -

-When accessed through https://governance.stratoslive.wso2.com/t/yourdomain -

-

Figure1: Sign In Form When accessed through https://governance.stratoslive.wso2.com/t/yourdomoain

- -

- - - - - - - - - - - - - - - - -
- The Form Field - - Description -
Username

For this field you only need to enter the username as the domain name is already suggested for you. Note that derives the domain - name from the url. So in case you want to login to an account in a different domain you have to change the url of the correct domain specific - login and try entering the username and password.

-
PasswordThe Password of your user account -
-

- - - - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/ajax-loader.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/ajax-loader.gif deleted file mode 100644 index f2a1bc0c..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/ajax-loader.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/body-bg.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/body-bg.gif deleted file mode 100644 index de362bcd..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/body-bg.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/button-back.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/button-back.gif deleted file mode 100644 index 6a52e342..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/button-back.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/content-back-left.jpg b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/content-back-left.jpg deleted file mode 100644 index ebfe8ed7..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/content-back-left.jpg and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/content-back.jpg b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/content-back.jpg deleted file mode 100644 index 62b8da1d..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/content-back.jpg and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/create-org-button.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/create-org-button.gif deleted file mode 100644 index b7e62a3e..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/create-org-button.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-01-icon.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-01-icon.gif deleted file mode 100644 index 255f4513..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-01-icon.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-02-icon.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-02-icon.gif deleted file mode 100644 index 011a15e6..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-02-icon.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-03-icon.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-03-icon.gif deleted file mode 100644 index f1b076bd..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/feature-03-icon.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/footer.jpg b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/footer.jpg deleted file mode 100644 index c617091d..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/footer.jpg and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/forum.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/forum.gif deleted file mode 100644 index e92779ad..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/forum.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/google-apps-login.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/google-apps-login.gif deleted file mode 100644 index 6eb5c9b7..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/google-apps-login.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/header.jpg b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/header.jpg deleted file mode 100644 index 4438a061..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/header.jpg and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/help.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/help.gif deleted file mode 100644 index 3b050aac..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/help.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/images.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/images.gif deleted file mode 100644 index 94b46dc3..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/images.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/issue-tracker.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/issue-tracker.gif deleted file mode 100644 index 9029c129..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/issue-tracker.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/link-icon.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/link-icon.gif deleted file mode 100644 index 5598f596..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/link-icon.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/login-ad.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/login-ad.gif deleted file mode 100644 index d6f16896..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/login-ad.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/login-bg.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/login-bg.gif deleted file mode 100644 index 4eb08c66..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/login-bg.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/logo.jpg b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/logo.jpg deleted file mode 100644 index 202360d4..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/logo.jpg and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/mailing-list.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/mailing-list.gif deleted file mode 100644 index 06d61e3c..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/mailing-list.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/paas-login-1pix-1.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/paas-login-1pix-1.gif deleted file mode 100644 index 439f27d7..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/paas-login-1pix-1.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/page-back.jpg b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/page-back.jpg deleted file mode 100644 index 2e21b541..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/page-back.jpg and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/people.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/people.gif deleted file mode 100644 index edfa49b1..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/people.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/powered.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/powered.gif deleted file mode 100644 index d54cd284..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/powered.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/reg-button-hover.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/reg-button-hover.gif deleted file mode 100644 index 89f2c549..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/reg-button-hover.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/reg-button.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/reg-button.gif deleted file mode 100644 index 5d8e2e43..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/reg-button.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/register-button-hover.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/register-button-hover.gif deleted file mode 100644 index f877e420..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/register-button-hover.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/register-button.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/register-button.gif deleted file mode 100644 index b3f3d836..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/register-button.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/right-logo-brs.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/right-logo-brs.gif deleted file mode 100644 index aed7e38b..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/right-logo-brs.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/services.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/services.gif deleted file mode 100755 index 98831169..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/services.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/stratos-brs-logo.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/stratos-brs-logo.gif deleted file mode 100644 index bc517f66..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/stratos-brs-logo.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/t-right-logo.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/t-right-logo.gif deleted file mode 100644 index d9e358d0..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/t-right-logo.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/thememgt.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/thememgt.gif deleted file mode 100644 index e554e874..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/thememgt.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/user-guide.gif b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/user-guide.gif deleted file mode 100644 index 9342adcd..00000000 Binary files a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/images/user-guide.gif and /dev/null differ diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/js/login.js b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/js/login.js deleted file mode 100644 index c57a3f8f..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/js/login.js +++ /dev/null @@ -1,88 +0,0 @@ -function loginPreCheck() { - var userName = document.getElementById("txtUserName").value; - var errorMsgEle = document.getElementById("errorMsg"); - errorMsgEle.innerHTML = ""; - if (userName != null) { - atIndex = userName.lastIndexOf('@'); - if (atIndex == -1) { - // if there are no '@'s we are not validating the username - return; - } - } - - var tenantDomain = ""; - var tenantDomainEle = document.getElementById("tenantDomain"); - if (tenantDomainEle.innerHTML != "") { - return; - } - tenantDomain = getDomainFromUserName(); - if (tenantDomain == null || tenantDomain == "") { - // tenant 0, we are submitting without rename check - return; - } - - var busyCheck = document.getElementById("busyCheck"); - busyCheck.innerHTML = ""; - - new Ajax.Request('../tenant-login/domain_rename_checker_ajaxprocessor.jsp', - { - method:'post', - parameters: {domain: tenantDomain}, - - onSuccess: function(transport) { - busyCheck.innerHTML = ""; - var returnValue = transport.responseText; - if (returnValue.search(/----success----/) != -1) { - // nothing much needed to be done - } else if (returnValue.search(/----trial----/) != -1) { - // need to redirect to the trial domain - - var newTenantDomain = tenantDomain + "-trial"; - msg = "The domain name of your account is renamed to " + newTenantDomain + " " + - "as the ownership of the domain is not confirmed. You can login to the account under the " + - "changed domain name and confirm the ownership of your domain from the 'Account management' page."; - var exitCode = function() { - var username = getTenantAwareUserName(); - var newUsername = username + "@" + newTenantDomain; - document.getElementById("txtUserName").value = newUsername; - }; - CARBON.showWarningDialog(msg, exitCode, exitCode); - } else { - // some error just show no messages - msg = ""; - errorMsgEle.innerHTML = msg; - } - }, - - onFailure: function(transport){ - busyCheck.innerHTML = ""; - } - }); -} - -function getDomainFromUserName() { - var tenantDomain = ""; - var userName = document.getElementById("txtUserName").value; - if (userName != null) { - atIndex = userName.lastIndexOf('@'); - if (atIndex != -1) { - tenantDomain = userName.substring(atIndex + 1, userName.length); - } - } - return tenantDomain; -} - - -function getTenantAwareUserName() { - var userName = document.getElementById("txtUserName").value; - if (userName != null) { - atIndex = userName.lastIndexOf('@'); - if (atIndex != -1) { - userName = userName.substring(0, atIndex); - } - } - return userName; -} - - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/login_ajaxprocessor.jsp b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/login_ajaxprocessor.jsp deleted file mode 100644 index 8113cc88..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/login_ajaxprocessor.jsp +++ /dev/null @@ -1,297 +0,0 @@ - -<%@ page import="org.wso2.carbon.CarbonConstants" %> - -<%@ page import="org.wso2.carbon.ui.CarbonUIUtil" %> -<%@ page import="org.wso2.carbon.utils.multitenancy.MultitenantConstants" %> - -<%--Copyright 2004 The Apache Software Foundation - -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. ---%> - -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib prefix="carbon" uri="http://wso2.org/projects/carbon/taglibs/carbontags.jar" %> - - - - - - - - WSO2 Stratos Mashup Server - - - - - - - - - - - - - - - - - - - -
- - -<% - if("Success".equals(request.getParameter("addTenant"))){ - %> - - -<% - } - String tenantdomain = (String)request.getAttribute(MultitenantConstants.TENANT_DOMAIN); - String tip = ""; - if(tenantdomain == null){ - tenantdomain = ""; - tip = "Enter the username in the format: user name@yourdomain, Example: foo@abc.com"; - } - else{ - tenantdomain = "@" + tenantdomain; - } - String userForumURL = (String) config.getServletContext().getAttribute(CarbonConstants.PRODUCT_XML_WSO2CARBON + CarbonConstants.PRODUCT_XML_USERFORUM); - String userGuideURL = (String) config.getServletContext().getAttribute(CarbonConstants.PRODUCT_XML_WSO2CARBON + CarbonConstants.PRODUCT_XML_USERGUIDE); - String mailinglistURL = (String) config.getServletContext().getAttribute(CarbonConstants.PRODUCT_XML_WSO2CARBON + CarbonConstants.PRODUCT_XML_MAILINGLIST); - String issuetrackerURL = (String) config.getServletContext().getAttribute(CarbonConstants.PRODUCT_XML_WSO2CARBON + CarbonConstants.PRODUCT_XML_ISSUETRACKER); - if (userForumURL == null) { - userForumURL = "#"; - } - if (userGuideURL == null) { - userGuideURL = "#"; - } - if (mailinglistURL == null) { - mailinglistURL = "#"; - } - if (issuetrackerURL == null) { - issuetrackerURL = "#"; - } -%> - - <% - String loginStatus = request.getParameter("loginStatus"); - if (loginStatus != null && "false".equalsIgnoreCase(loginStatus)) { - %> - - <% - } - - if (loginStatus != null && "failed".equalsIgnoreCase(loginStatus)) { - %> - - <% - } - String backendURL = CarbonUIUtil.getServerURL(config.getServletContext(), session); - String registerPath = null; - int serviceIndex = backendURL.indexOf("/services/"); - int startingIndex = backendURL.contains("https")? "https://".length(): "http://".length(); - String serverName = backendURL.substring(startingIndex, serviceIndex); - int dotIndex = serverName.indexOf("."); - if (dotIndex != -1) { - String managerServerName = serverName.substring(dotIndex + 1); - registerPath = "https://" + managerServerName + "/carbon/tenant-register/select_domain.jsp"; - } - %> - <%--New page design begings--%> - - -
-
- The WSO2 Business Rules Server, isolating business logic from infrastructure code and thereby increasing the ability of the enterprise to change at the speed of business, delivered as a multi-tenant, elastically scaling, metered platform -
-
-
- -

Standard Rule engine Support

-

- Support any JSR94 based rule engine. Released with Drools rule engine. -

-
-
- -

Rule service creation support

-

- Support for writing rules as user preferences and creating rule services. -

-
-
- -

Registry as a Rule Repository

-

- Resource ownerships and ability to sharing. Tagging, commenting and rating. Resource / collection versioning and rollback. Governance and lifecycle management. -

-
-
- - - - -
- - - -
-
- -
- - - -
- - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/policy.html b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/policy.html deleted file mode 100644 index ab0177c9..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/policy.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - -Governance.stratoslive.wso2.com - Privacy Policy - - - - - -

Governance.stratoslive.wso2.com - Privacy Policy

- -

Governance.stratoslive.wso2.com takes your privacy seriously. Please read the following to learn more - about our privacy policy.

- -

INFORMATION COLLECTION AND USE

- -
    -
  • When you register with Governance.stratoslive.wso2.com we ask for personal information such as - your name, email address, and - biographical information. When you sign into Governance.stratoslive.wso2.com using your - account, you are not anonymous to us.

  • -
  • Governance.stratoslive.wso2.com may collect information about your activities on the site from - your computer and browser, - including your IP address, Governance.stratoslive.wso2.com cookie information, your software - and hardware attributes, and the - content you access on our site.

  • -
  • Governance.stratoslive.wso2.com may use this information to customize content you see, to - fulfil request for products or - services, to improve our services, and to provide anonymous reporting to internal and - external clients.

  • -
  • Governance.stratoslive.wso2.com may also use this information to contact you or to conduct - research.

  • -
-

- -

INFORMATION DISCLOSURE

- -

Governance.stratoslive.wso2.com does not rent, sell or share personal information about you with others - except to provide products or - services that you've requested, unless:

-
    -
  • You or your legal guardian authorize to do so.

  • -
  • The information is shared under a confidentiality agreement with a partner for the - purpose of communicating - with you about Governance.stratoslive.wso2.com offers. These partners are prohibited from - sharing your information with others.

  • -
  • The information is requested under subpoena, court order or legal process.

  • -
  • The information is needed to establish or exercise our legal rights or defend against - legal claims.

  • -
  • We believe the information is needed to investigate, prevent, or take action against - illegal activities, violations - of our Terms of Service, or as otherwise required by law.

  • -
  • Governance.stratoslive.wso2.com or its owner WSO2, Inc. is acquired or merged with another - company. Governance.stratoslive.wso2.com will make efforts to - announce any such change of ownership and any consequent change of privacy policy.

    -
  • -
- -

Governance.stratoslive.wso2.com may set and access Governance.stratoslive.wso2.com cookies on your - computer.

- -



- -



- -

CHANGING PERSONAL INFORMATION

- -

You can change or delete your Governance.stratoslive.wso2.com account profile at any time.

- -



- -

CONFIDENTIALITY AND SECURITY

- -
    -
  • Access to personal information about you is limited to WSO2 employees who we believe - reasonably need to - access that information in order to maintain Governance.stratoslive.wso2.com, to fulfill - services you've requested, or to - otherwise do their jobs.

  • -
  • Governance.stratoslive.wso2.com takes precautions to secure personal information against - accidental or malicious release.

  • -
-



- -

CHANGES TO THIS PRIVACY POLICY

- -

Governance.stratoslive.wso2.com may update this policy at any time. We will notify you of significant - changes in the policy by sending a - notice to the email address associated with each account or by placing a prominent notice on our - site.

- -

If you have questions or suggestions about our privacy policy, please contact Support.

- -



- -

Effective 1st November 2009

- - - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/support.html b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/support.html deleted file mode 100644 index 50dba020..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/support.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - Governance.stratoslive.wso2.com - Support - - - - -
-

Governance.stratoslive.wso2.com - Support

- -

Visit http://wso2.com/cloud/services/governance for more details about the Governance as as Service (GaaS) support.

-

For support with technical aspects of Governance.stratoslive.wso2.com or Governance Registry instance, visit the - Governance Registry Forum.

- -

If you have suggestions on how to improve Governance.stratoslive.wso2.com or found bugs, please let us know in the registry user mailing list, registry-user@wso2.org.

- -
- - - diff --git a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/terms.html b/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/terms.html deleted file mode 100644 index 32ad0472..00000000 --- a/modules/broker/org.wso2.stratos.mb.login.ui/src/main/resources/web/tenant-login/terms/terms.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - -Governance.stratoslive.wso2.com - Terms of Service - - - - - -

Governance.stratoslive.wso2.com - Terms of Service

- -

THE FOLLOWING TERMS AND CONDITIONS ARE APPLIED TO GOVERNANCE.CLOUD.WSO2.COM ACCOUNTS

- -



- -

1. ACCEPTANCE OF GOVERNANCE.CLOUD.WSO2.COM TERMS

- -

Welcome to Governance.stratoslive.wso2.com! By requesting a membership account on - Governance.stratoslive.wso2.com, you agree to these terms. WSO2 Inc. (WSO2), as the owner of - Governance.stratoslive.wso2.com, reserves the right to update and change these Terms and all documents - incorporated by reference at any time. You can always find the most recent version of the Terms - at http://www.Governance.stratoslive.wso2.com/carbon/tenant-login/terms/terms.html.

- -



- -

2. DESCRIPTION OF SERVICE

- -

2.1 GOVERNANCE.CLOUD.WSO2.COM

- -

Governance.stratoslive.wso2.com provides members with the ability to store the enterprise metadata in - their SOA platform and govern them. WSO2 reserves the right to limit the amount of resources - members under a particular domain can upload, the number of users, the roles or permission a - domain can have, the available features, and particular accounts based on the processing power - they require, the bandwidth they consume, or any other deleterious technical or social side - effects it may cause. WSO2 reserves the right to remove or bar a member for any reason.

- -



- -

3. GOVERNANCE.CLOUD.WSO2.COM ACCOUNTS

- -

To participate in Governance.stratoslive.wso2.com, you must have a valid email address. In - consideration of your use of Governance.stratoslive.wso2.com, you agree to: (a) provide true, accurate, - current and complete information about yourself and (b) maintain and promptly update the - Registration Data to keep it true, accurate, current and complete. If you provide any information - that is untrue, inaccurate, not current or incomplete, or WSO2 has reasonable grounds to suspect - that such information is untrue, inaccurate, not current or incomplete, WSO2 has the right to - suspend or terminate your Governance.stratoslive.wso2.com account and delete any information or content - therein without liability to WSO2.

- -

By providing us with a valid email address you agree that WSO2 may contact you at that address - for purposes of managing and maintaining your Governance.stratoslive.wso2.com account. In addition we - reserve the right to send announcements regarding Governance.stratoslive.wso2.com and WSO2 products or - services to that account. WSO2 will not sell your email address or provide it to third parties - without your prior approval.

- -



- -

4. PAYMENT TERMS

- -

4.1 General Terms

- -

Governance.stratoslive.wso2.com beta is currently a free service. WSO2 Inc. retains the right to cease - offering free memberships at any time, to transition current accounts to paid subscriptions when - the beta period ends, to convert existing features to premium (paid) features, or to introduce - new premium features. Users of the beta are under no obligation to subscribe to a paid account, - in which case Governance.stratoslive.wso2.com reserves the right to suspend or terminate the member - account.

- -



- -

4.2 Cancellation of Membership

- -

Memberships can be cancelled online at any time. Any difficulty encountered with deleting a - membership account should be addressed to the Governance.stratoslive.wso2.com support group, whose - contact information can be found at - http://www.Governance.stratoslive.wso2.com/carbon/tenant-login/terms/support.html.

- -



- -

5. GOVERNANCE.CLOUD.WSO2.COM's RESERVATION OF RIGHTS

- -

WSO2 expressly reserves the right to immediately modify, delete content from, suspend or - terminate your account and refuse current or future use of Governance.stratoslive.wso2.com or any other - service run by WSO2, if WSO2 in its sole discretion believes you have: (i) violated or tried to - violate the rights of others; or (ii) acted inconsistently with the spirit or letter of these - Terms of Service. In such event, your Governance.stratoslive.wso2.com account may be suspended or - cancelled immediately in our discretion, all the information and content contained within it will - be deleted permanently and you will not be entitled to any refund of any of the amounts you've - paid for such account. WSO2 accepts no liability for information or content that is deleted.

- -

WSO2 also reserves the right to cease offering the Governance.stratoslive.wso2.com service, temporarily - or permanently, at any time.

- -



- -

6. INDEMNITY

- -

You agree to indemnify and hold harmless WSO2, and its subsidiaries, affiliates, officers, - agents, or other partners, and employees, from any claim or demand, including reasonable - attorneys' fees, made by any third party due to or arising out of your use of and access to - Governance.stratoslive.wso2.com, your violation of the Terms of Service, your violation of any rights - of another person or entity, or your violation of any applicable laws or regulations.

- -



- -

7. PRIVACY

- -

Registration Data and certain other information about you are subject to our Privacy Policy. For - more information, see our full privacy policy at - http://www.Governance.stratoslive.wso2.com/carbon/tenant-login/privacy.html.

- -



- -

8. AGE REQUIREMENTS FOR USE OF GOVERNANCE.CLOUD.WSO2.COM

- -

Governance.stratoslive.wso2.com is available for individuals aged 13 years or older. If you are 13 or - older but under the age of 18, you should review these terms and conditions with your parent or - guardian to make sure that you and your parent or guardian understand and agree to these terms - and conditions.

- -



- -

9. INTELLECTUAL PROPERTY RIGHTS

- -

Governance.stratoslive.wso2.com provides the capacity to store and host member content, including - service meta data (WSDLS, Schemas, Policies), images and other media, and any other document - type. By uploading and creating content on Governance.stratoslive.wso2.com, you assert that you are the - copyright holder or licensee of that content.

- -



- -

10. LOCATION OF LAWSUIT

- -

By agreeing to these Terms of Service you agree in case of a legal dispute to submit to the - personal and exclusive jurisdiction of the courts located within the county of Santa Clara, - California.

- -

Effective 1st November 2009

- - - diff --git a/modules/broker/p2-profile/pom.xml b/modules/broker/p2-profile/pom.xml index 0c901da5..60ee5d29 100644 --- a/modules/broker/p2-profile/pom.xml +++ b/modules/broker/p2-profile/pom.xml @@ -163,10 +163,10 @@ - org.wso2.iot:org.wso2.iot.broker.styles.feature:${product.wso2iot.broker.version} + org.wso2.mb:org.wso2.mb.styles.feature:${product.mb.version} - org.wso2.iot:org.wso2.stratos.mb.dashboard.ui.feature:${product.wso2iot.broker.version} + org.wso2.mb:org.wso2.stratos.mb.dashboard.ui.feature:${product.mb.version} org.wso2.ciphertool:org.wso2.ciphertool.feature:${cipher.tool.version} @@ -203,10 +203,6 @@ org.wso2.carbon.databridge.datapublisher.feature.group ${carbon.analytics.common.version} - - org.wso2.stratos.mb.dashboard.ui.feature.group - ${product.wso2iot.broker.version} - org.wso2.carbon.system.statistics.feature.group ${carbon.commons.version} @@ -313,8 +309,12 @@ - org.wso2.iot.broker.styles.feature.group - ${product.wso2iot.broker.version} + org.wso2.stratos.mb.dashboard.ui.feature.group + ${product.mb.version} + + + org.wso2.mb.styles.feature.group + ${product.mb.version} diff --git a/modules/broker/pom.xml b/modules/broker/pom.xml index c799f818..67b1c259 100644 --- a/modules/broker/pom.xml +++ b/modules/broker/pom.xml @@ -35,12 +35,7 @@ WSO2 IoT Broker Module - styles - features p2-profile distribution - org.wso2.stratos.mb.dashboard.ui - org.wso2.stratos.mb.login.ui - diff --git a/modules/broker/styles/pom.xml b/modules/broker/styles/pom.xml deleted file mode 100644 index 06cd8414..00000000 --- a/modules/broker/styles/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - wso2iot-broker-styles-parent - pom - WSO2 MB Styles Parent - http://wso2.org/projects/mb/java - WSO2 Message Broker Server Styles Parent - - - - Apache License Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0 - - - - - product - service - - - diff --git a/modules/broker/styles/product/feature.properties b/modules/broker/styles/product/feature.properties deleted file mode 100644 index 35179a69..00000000 --- a/modules/broker/styles/product/feature.properties +++ /dev/null @@ -1,217 +0,0 @@ -################################################################################ -# Copyright 2009 WSO2, Inc. (http://wso2.com) -# -# 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. -################################################################################ - -providerName=WSO2 Inc. - -########################## license properties ################################## -licenseURL=http://www.apache.org/licenses/LICENSE-2.0 - -license=\ - Apache License\n\ - Version 2.0, January 2004\n\ - http://www.apache.org/licenses/\n\ -\n\ - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\ -\n\ - 1. Definitions.\n\ -\n\ - "License" shall mean the terms and conditions for use, reproduction,\n\ - and distribution as defined by Sections 1 through 9 of this document.\n\ -\n\ - "Licensor" shall mean the copyright owner or entity authorized by\n\ - the copyright owner that is granting the License.\n\ -\n\ - "Legal Entity" shall mean the union of the acting entity and all\n\ - other entities that control, are controlled by, or are under common\n\ - control with that entity. For the purposes of this definition,\n\ - "control" means (i) the power, direct or indirect, to cause the\n\ - direction or management of such entity, whether by contract or\n\ - otherwise, or (ii) ownership of fifty percent (50%) or more of the\n\ - outstanding shares, or (iii) beneficial ownership of such entity.\n\ -\n\ - "You" (or "Your") shall mean an individual or Legal Entity\n\ - exercising permissions granted by this License.\n\ -\n\ - "Source" form shall mean the preferred form for making modifications,\n\ - including but not limited to software source code, documentation\n\ - source, and configuration files.\n\ -\n\ - "Object" form shall mean any form resulting from mechanical\n\ - transformation or translation of a Source form, including but\n\ - not limited to compiled object code, generated documentation,\n\ - and conversions to other media types.\n\ -\n\ - "Work" shall mean the work of authorship, whether in Source or\n\ - Object form, made available under the License, as indicated by a\n\ - copyright notice that is included in or attached to the work\n\ - (an example is provided in the Appendix below).\n\ -\n\ - "Derivative Works" shall mean any work, whether in Source or Object\n\ - form, that is based on (or derived from) the Work and for which the\n\ - editorial revisions, annotations, elaborations, or other modifications\n\ - represent, as a whole, an original work of authorship. For the purposes\n\ - of this License, Derivative Works shall not include works that remain\n\ - separable from, or merely link (or bind by name) to the interfaces of,\n\ - the Work and Derivative Works thereof.\n\ -\n\ - "Contribution" shall mean any work of authorship, including\n\ - the original version of the Work and any modifications or additions\n\ - to that Work or Derivative Works thereof, that is intentionally\n\ - submitted to Licensor for inclusion in the Work by the copyright owner\n\ - or by an individual or Legal Entity authorized to submit on behalf of\n\ - the copyright owner. For the purposes of this definition, "submitted"\n\ - means any form of electronic, verbal, or written communication sent\n\ - to the Licensor or its representatives, including but not limited to\n\ - communication on electronic mailing lists, source code control systems,\n\ - and issue tracking systems that are managed by, or on behalf of, the\n\ - Licensor for the purpose of discussing and improving the Work, but\n\ - excluding communication that is conspicuously marked or otherwise\n\ - designated in writing by the copyright owner as "Not a Contribution."\n\ -\n\ - "Contributor" shall mean Licensor and any individual or Legal Entity\n\ - on behalf of whom a Contribution has been received by Licensor and\n\ - subsequently incorporated within the Work.\n\ -\n\ - 2. Grant of Copyright License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - copyright license to reproduce, prepare Derivative Works of,\n\ - publicly display, publicly perform, sublicense, and distribute the\n\ - Work and such Derivative Works in Source or Object form.\n\ -\n\ - 3. Grant of Patent License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - (except as stated in this section) patent license to make, have made,\n\ - use, offer to sell, sell, import, and otherwise transfer the Work,\n\ - where such license applies only to those patent claims licensable\n\ - by such Contributor that are necessarily infringed by their\n\ - Contribution(s) alone or by combination of their Contribution(s)\n\ - with the Work to which such Contribution(s) was submitted. If You\n\ - institute patent litigation against any entity (including a\n\ - cross-claim or counterclaim in a lawsuit) alleging that the Work\n\ - or a Contribution incorporated within the Work constitutes direct\n\ - or contributory patent infringement, then any patent licenses\n\ - granted to You under this License for that Work shall terminate\n\ - as of the date such litigation is filed.\n\ -\n\ - 4. Redistribution. You may reproduce and distribute copies of the\n\ - Work or Derivative Works thereof in any medium, with or without\n\ - modifications, and in Source or Object form, provided that You\n\ - meet the following conditions:\n\ -\n\ - (a) You must give any other recipients of the Work or\n\ - Derivative Works a copy of this License; and\n\ -\n\ - (b) You must cause any modified files to carry prominent notices\n\ - stating that You changed the files; and\n\ -\n\ - (c) You must retain, in the Source form of any Derivative Works\n\ - that You distribute, all copyright, patent, trademark, and\n\ - attribution notices from the Source form of the Work,\n\ - excluding those notices that do not pertain to any part of\n\ - the Derivative Works; and\n\ -\n\ - (d) If the Work includes a "NOTICE" text file as part of its\n\ - distribution, then any Derivative Works that You distribute must\n\ - include a readable copy of the attribution notices contained\n\ - within such NOTICE file, excluding those notices that do not\n\ - pertain to any part of the Derivative Works, in at least one\n\ - of the following places: within a NOTICE text file distributed\n\ - as part of the Derivative Works; within the Source form or\n\ - documentation, if provided along with the Derivative Works; or,\n\ - within a display generated by the Derivative Works, if and\n\ - wherever such third-party notices normally appear. The contents\n\ - of the NOTICE file are for informational purposes only and\n\ - do not modify the License. You may add Your own attribution\n\ - notices within Derivative Works that You distribute, alongside\n\ - or as an addendum to the NOTICE text from the Work, provided\n\ - that such additional attribution notices cannot be construed\n\ - as modifying the License.\n\ -\n\ - You may add Your own copyright statement to Your modifications and\n\ - may provide additional or different license terms and conditions\n\ - for use, reproduction, or distribution of Your modifications, or\n\ - for any such Derivative Works as a whole, provided Your use,\n\ - reproduction, and distribution of the Work otherwise complies with\n\ - the conditions stated in this License.\n\ -\n\ - 5. Submission of Contributions. Unless You explicitly state otherwise,\n\ - any Contribution intentionally submitted for inclusion in the Work\n\ - by You to the Licensor shall be under the terms and conditions of\n\ - this License, without any additional terms or conditions.\n\ - Notwithstanding the above, nothing herein shall supersede or modify\n\ - the terms of any separate license agreement you may have executed\n\ - with Licensor regarding such Contributions.\n\ -\n\ - 6. Trademarks. This License does not grant permission to use the trade\n\ - names, trademarks, service marks, or product names of the Licensor,\n\ - except as required for reasonable and customary use in describing the\n\ - origin of the Work and reproducing the content of the NOTICE file.\n\ -\n\ - 7. Disclaimer of Warranty. Unless required by applicable law or\n\ - agreed to in writing, Licensor provides the Work (and each\n\ - Contributor provides its Contributions) on an "AS IS" BASIS,\n\ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n\ - implied, including, without limitation, any warranties or conditions\n\ - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n\ - PARTICULAR PURPOSE. You are solely responsible for determining the\n\ - appropriateness of using or redistributing the Work and assume any\n\ - risks associated with Your exercise of permissions under this License.\n\ -\n\ - 8. Limitation of Liability. In no event and under no legal theory,\n\ - whether in tort (including negligence), contract, or otherwise,\n\ - unless required by applicable law (such as deliberate and grossly\n\ - negligent acts) or agreed to in writing, shall any Contributor be\n\ - liable to You for damages, including any direct, indirect, special,\n\ - incidental, or consequential damages of any character arising as a\n\ - result of this License or out of the use or inability to use the\n\ - Work (including but not limited to damages for loss of goodwill,\n\ - work stoppage, computer failure or malfunction, or any and all\n\ - other commercial damages or losses), even if such Contributor\n\ - has been advised of the possibility of such damages.\n\ -\n\ - 9. Accepting Warranty or Additional Liability. While redistributing\n\ - the Work or Derivative Works thereof, You may choose to offer,\n\ - and charge a fee for, acceptance of support, warranty, indemnity,\n\ - or other liability obligations and/or rights consistent with this\n\ - License. However, in accepting such obligations, You may act only\n\ - on Your own behalf and on Your sole responsibility, not on behalf\n\ - of any other Contributor, and only if You agree to indemnify,\n\ - defend, and hold each Contributor harmless for any liability\n\ - incurred by, or claims asserted against, such Contributor by reason\n\ - of your accepting any such warranty or additional liability.\n\ -\n\ - END OF TERMS AND CONDITIONS\n - -######################### copyright properties ################################# -copyrightURL=TODO - -copyright=\ -Copyright 2009 WSO2, Inc. (http://wso2.com)\n\ -\n\ -Licensed under the Apache License, Version 2.0 (the "License");\n\ -you may not use this file except in compliance with the License.\n\ -You may obtain a copy of the License at\n\ -\n\ -http://www.apache.org/licenses/LICENSE-2.0\n\ -\n\ -Unless required by applicable law or agreed to in writing, software\n\ -distributed under the License is distributed on an "AS IS" BASIS,\n\ -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\ -See the License for the specific language governing permissions and\n\ -limitations under the License.\n - diff --git a/modules/broker/styles/product/pom.xml b/modules/broker/styles/product/pom.xml deleted file mode 100644 index 03c821dc..00000000 --- a/modules/broker/styles/product/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-styles-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.iot.broker.styles - bundle - WSO2 MB Styles - http://wso2.org - - - - - maven-eclipse-plugin - 2.6 - - - org.apache.felix - maven-bundle-plugin - - true - - - ${project.artifactId} - ${project.artifactId} - * - - org.osgi.framework, - org.osgi.service.http, - org.wso2.carbon.ui, - javax.servlet.*;version="2.4.0", - *;resolution:=optional - - UIBundle - org.wso2.carbon.ui - - - - - - - src/main/resources - - META-INF/product.xml - - true - - - src/main/resources - - META-INF/product.xml - - - - - - diff --git a/modules/broker/styles/product/src/main/resources/META-INF/product.xml b/modules/broker/styles/product/src/main/resources/META-INF/product.xml deleted file mode 100644 index 4c7debff..00000000 --- a/modules/broker/styles/product/src/main/resources/META-INF/product.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - http://stackoverflow.com/questions/tagged/wso2/ - http://docs.wso2.org/wiki/display/MB300/WSO2+Message+Broker+Documentation - http://wso2.org/mail - https://wso2.org/jira/browse/CARBON - - diff --git a/modules/broker/styles/product/src/main/resources/web/product/about.html b/modules/broker/styles/product/src/main/resources/web/product/about.html deleted file mode 100644 index d4fb7a53..00000000 --- a/modules/broker/styles/product/src/main/resources/web/product/about.html +++ /dev/null @@ -1,120 +0,0 @@ - - -WSO2 MB - About - - - - -

Version 3.0.0

-

About WSO2 Message Broker Server

-

WSO2 MB is a lightweight and easy-to-use Open Source Message Broker Server -(MB) available under the Apache Software License v2.0.

- - -

WSO2 Message Broker 3.0.0 is developed on top of the revolutionary - Carbon platform -and is based on the OSGi framework to achieve the -better modularity for your SOA architecture. This also contains a lots of new -features and many other optional components to customize the behavior of the -server. Further, if you do not want any of the built in features, you can -uninstall those features without any trouble. In other words, this ES can be -customized to your SOA needs.

-

About WSO2 Carbon

-

WSO2 Carbon is a component based Enterprise SOA platform. The -design of -WSO2 Carbon focuses on separating the key functionality of the SOA -platform -into separate pluggable Carbon components that can be mixed and -matched, like -customizable building blocks. This allows you to add only the -functionality -you need to start up, and continue to add product capabilities -as your -requirements grow. This helps a business to quickly adapt to -changes.

-

OSGi is used as the underlying core modularization technology -to build the -Carbon platform. The Carbon framework is shipped with Eclipse Equinox -by -default, but can be supported on Spring dm Server, Felix or Knoplerfish -if -required. The OSGi technology even allows you to write your business -functionality as an OSGi component and deploy it in the existing Carbon -platform.

-

For a quick start on using the WSO2 Carbon -platform, the Carbon components are pre-assembled into the following -products:

- -

You can assemble your own products by combining -components and -deploying them in a preferred architecture.

-

The WSO2 Carbon platform gives maximum flexibility to adapt -the middleware -to your enterprise architecture, rather than adapt your architecture to -the -middleware.

- -

About WSO2

-

WSO2 is a Open Source technology company building Open Source -middleware -platforms for Web services and SOA. WSO2 delivers integrated middleware -stacks based on components developed at Apache, offering industry -leading -performance and convenience for customers.

-

Founded in August 2005 by pioneers in Web services and Open -Source, WSO2 -engineers contribute heavily to many key Apache Web services projects.

- -

Have you tried...

-

Registry

-

WSAS

-

ESB

-

BPS

-

BRS

-

Identity

-

DSS

-

BAM

-

GS

-

MS

-

Stay connected

-

Subscribe -to the WSO2 newsletter - project updates, events, articles, SOA news -and much -more.

- - diff --git a/modules/broker/styles/product/src/main/resources/web/styles/css/main.css b/modules/broker/styles/product/src/main/resources/web/styles/css/main.css deleted file mode 100644 index dd39635e..00000000 --- a/modules/broker/styles/product/src/main/resources/web/styles/css/main.css +++ /dev/null @@ -1,238 +0,0 @@ -/* ---------------- template styles ------------------------- */ - -table#main-table td#header { - background-color:#3B003D; - background-image:url(../images/back-repeat.png); - background-repeat:repeat-x; - height:70px; - border-bottom:solid 1px #000000; -} - -table#main-table td#menu-panel { - border-right: solid 1px #989898; - /*background-image: url(../images/mb-server-menu-panel-bg.gif);*/ - background-position: right top; - background-repeat: repeat-y; -} - - -/* ---------------- header styles ------------------ */ -div#header-div { - background-image: url( ../images/mb-header-bg.png); - height:70px; -} - -div#header-div div.left-logo { - background-image: url( ../images/mb-logo.png ); - margin-left:25px; - margin-top:22px; - position:absolute; -} - -div#header-div div.right-logo { - /*background-image:url("../images/right-logo-bg.gif"); - background-position:right top; - background-repeat:no-repeat;*/ - color:#9f9f9f; - height:32px; - margin-right:20px; - line-height: 30px; - margin-top:10px; - padding-right:0px; - padding-top:0px; -} -div#header-div div.header-links { - margin-top:0px; -} -div#header-div div.header-links div.right-links { - margin-right: 0px; - height: 27px; - padding-top: 0px; - color:#ffffff; -} - -div#header-div div.header-links div.right-links a { color:#fff; } -div#header-div div.header-links div.right-links ul { - background-image:none; - background-position:left top; - background-repeat:repeat-x; - padding-left: 25px; - padding-right: 15px; - padding-top: 4px; - padding-bottom: 4px; -} -/* ------------- menu styles ---------------------- */ -div#menu { -} - -div#menu ul.main { -} - -div#menu ul.main li { -} - -div#menu ul.main li.normal { -} - -div#menu ul.main li a.menu-home { -background-image:url(../images/menu_header.png); -height:28px; -color:#fff; -} - -div#menu ul.main li.menu-header { - background-image: url(../images/mb-server-menu-header.png); - background-position: left bottom; - background-repeat: repeat-x; - height: 32px; - line-height: 32px; - font-weight:600; - color:#444; -} - -div#menu ul.main li a.menu-default { -} - -div#menu ul.main li a.menu-default:hover { - background-color: #EFECF5; - border-bottom: solid 1px #C2B7D8; - border-top: solid 1px #C2B7D8; - color: #00447C; -} - -div#menu ul.sub { -} - -/* -------------- child no-01 styles -------------- */ - -div#menu ul.sub li.normal { - -} - -div#menu ul.sub li a.menu-default { -} - -/* ----------- child no-01 (disabled) styles ------------------- */ - -div#menu ul.sub li a.menu-disabled-link { - } - - div#menu ul.sub li a.menu-disabled-link:hover { - } - -/* -------------- child no-02 styles -------------- */ - -div#menu ul.sub li.normal ul.sub li a.menu-default { - -} - -/* -------------- child no-03 styles -------------- */ - -div#menu ul.sub li.normal ul.sub li.normal ul.sub li a.menu-default { -} - -/* ------------- footer styles -------------------- */ - -div#footer-div div.footer-content div.poweredby { - /*background-image: url(../images/powered-synapse.gif);*/ - background-position: right top; -} - -/* ---- login styles ----- */ - - -/* --------------- table styles -------------------- */ - -.tableOddRow{background-color: white;} -.tableEvenRow{background-color: #EFECF5;} - -.button:hover{ - /*background-image:url(../images/esb-button-bg-hover.gif); - border:solid 1px #8268A8;*/ -} - -/* =============================================================================================================== */ - - - -.cornerExpand { - position: relative; - top: 3px; - left: -12px; - cursor: pointer; -} - -.cornerCollapse { - position: relative; - top: 3px; - left: -12px; - cursor: pointer; -} - -/* chanaka */ - -.form-table td{ - padding-bottom:5px !important; - padding-left:5px !important; - padding-top:5px !important; - padding-right:10px !important; -} -.form-table td div.indented{ - padding-left:7px !important; - color:#595959 !important; -} -.form-table-left{ -width:100px; -} - -.longTextField{ -width:270px; -} -.rowAlone{ -padding-top:10px; -padding-bottom:10px; -} -.tabedBox{ -border:solid 1px #cccccc; -margin-left:10px; -padding:10px; -margin-bottom:10px; -} -/* chanaka end */ - -a.fact-selector-icon-link { - background-image: url( ../images/facts-selector.gif ); - background-repeat: no-repeat; - background-position: left top; - padding-left: 20px; - line-height: 17px; - height: 17px; - float: left; - position: relative; - margin-left: 10px; - margin-top: 5px; - margin-bottom: 3px; - white-space: nowrap; -} -table#main-table td#middle-content { -/*background-image: url(../images/menu-margin.gif);*/ -background-position: left top; -background-repeat: repeat-y; -background-color:#ffffff; -} -div#middle{ -background-color:#ffffff; -} - -/* new theme 01-07-2013 */ -table#main-table td.vertical-menu-container { background-color:#000; padding-left: 5px; border-top:0px;} -div.menu-panel-buttons { border-top-left-radius: 7px; border-bottom-left-radius: 7px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; padding: 15px 3px;} -div.selected span { font-weight:bold; color:#ffffff; background-color:#555555; } -div.menu-panel-buttons span { } -div.selected { border:0px; background-color:#555555; box-shadow:none; } -div#middle h2{color:#444;} -table#main-table td#footer{background:#444;} -div#menu ul.main li.menu-header img{ - background: none repeat scroll 0 0 #EFEFEF; - border-radius:15px; -} diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/1px.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/1px.gif deleted file mode 100644 index f866f1db..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/1px.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/back-repeat.png b/modules/broker/styles/product/src/main/resources/web/styles/images/back-repeat.png deleted file mode 100644 index 2e037e7d..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/back-repeat.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/cancel.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/cancel.gif deleted file mode 100644 index f74130eb..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/cancel.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/collapse.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/collapse.gif deleted file mode 100644 index 83d7fd23..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/collapse.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/debug.png b/modules/broker/styles/product/src/main/resources/web/styles/images/debug.png deleted file mode 100644 index 273fd49e..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/debug.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/edit.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/edit.gif deleted file mode 100644 index f44da7ba..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/edit.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/error.png b/modules/broker/styles/product/src/main/resources/web/styles/images/error.png deleted file mode 100644 index 84b465ad..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/error.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/expand.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/expand.gif deleted file mode 100644 index 116e1204..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/expand.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/facts-selector.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/facts-selector.gif deleted file mode 100644 index d6d8a397..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/facts-selector.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/fatal.png b/modules/broker/styles/product/src/main/resources/web/styles/images/fatal.png deleted file mode 100644 index 9a099668..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/fatal.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/help.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/help.gif deleted file mode 100644 index 3b050aac..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/help.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/information.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/information.gif deleted file mode 100644 index a9c63b17..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/information.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/magnifier.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/magnifier.gif deleted file mode 100644 index 86f81ed3..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/magnifier.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-bg.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-bg.gif deleted file mode 100644 index 74db8888..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-bg.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-bg.png b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-bg.png deleted file mode 100644 index 94804654..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-bg.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-logo.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-logo.gif deleted file mode 100644 index 7668f408..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-logo.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-region-bg.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-region-bg.gif deleted file mode 100644 index 33e37189..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-header-region-bg.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-home-bg.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-home-bg.gif deleted file mode 100644 index 81884920..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-home-bg.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-logo.png b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-logo.png deleted file mode 100644 index cb28217f..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-logo.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-mgt-logo.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-mgt-logo.gif deleted file mode 100644 index 9fb5e970..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-mgt-logo.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-server-menu-header.png b/modules/broker/styles/product/src/main/resources/web/styles/images/mb-server-menu-header.png deleted file mode 100644 index 5c6e3eb5..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/mb-server-menu-header.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu-icon.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu-icon.gif deleted file mode 100644 index 8ec11484..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu-icon.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_global_config.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_global_config.gif deleted file mode 100644 index af6f7ba9..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_global_config.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_header.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_header.gif deleted file mode 100644 index 3c8b5b16..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_header.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_header.png b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_header.png deleted file mode 100644 index a6ff1158..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_header.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_home.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_home.gif deleted file mode 100644 index c974d3df..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_home.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_keystore.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_keystore.gif deleted file mode 100644 index c57d3bd0..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_keystore.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_logging.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_logging.gif deleted file mode 100644 index f5e9cba3..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_logging.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_logs.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_logs.gif deleted file mode 100644 index dc4174a2..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_logs.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_manage.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_manage.gif deleted file mode 100644 index 626648f5..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_manage.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_monitor.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_monitor.gif deleted file mode 100644 index 86f81ed3..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_monitor.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_restart.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_restart.gif deleted file mode 100644 index 86d3b89c..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_restart.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_security.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_security.gif deleted file mode 100644 index 2b241f62..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_security.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_services.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_services.gif deleted file mode 100644 index 4923271c..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_services.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_stats.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_stats.gif deleted file mode 100644 index a54f8cec..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_stats.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_tracer.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_tracer.gif deleted file mode 100644 index 8f81401f..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_tracer.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_transports.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_transports.gif deleted file mode 100644 index 35f3445d..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_transports.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_user_groups.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_user_groups.gif deleted file mode 100644 index 65be44ce..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_user_groups.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_user_stores.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_user_stores.gif deleted file mode 100644 index 62ad3b98..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_user_stores.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_users.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/menu_users.gif deleted file mode 100644 index 61d1e009..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/menu_users.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/plugin_add.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/plugin_add.gif deleted file mode 100644 index ac22da98..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/plugin_add.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/plugin_delete.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/plugin_delete.gif deleted file mode 100644 index 4721397a..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/plugin_delete.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/right-links-bg.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/right-links-bg.gif deleted file mode 100644 index 677a421b..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/right-links-bg.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/rule-button-bg-hover.gif b/modules/broker/styles/product/src/main/resources/web/styles/images/rule-button-bg-hover.gif deleted file mode 100644 index c4e3ffbc..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/rule-button-bg-hover.gif and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/trace.png b/modules/broker/styles/product/src/main/resources/web/styles/images/trace.png deleted file mode 100644 index 64e74124..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/trace.png and /dev/null differ diff --git a/modules/broker/styles/product/src/main/resources/web/styles/images/warn.png b/modules/broker/styles/product/src/main/resources/web/styles/images/warn.png deleted file mode 100644 index d14823cd..00000000 Binary files a/modules/broker/styles/product/src/main/resources/web/styles/images/warn.png and /dev/null differ diff --git a/modules/broker/styles/service/feature.properties b/modules/broker/styles/service/feature.properties deleted file mode 100644 index 35179a69..00000000 --- a/modules/broker/styles/service/feature.properties +++ /dev/null @@ -1,217 +0,0 @@ -################################################################################ -# Copyright 2009 WSO2, Inc. (http://wso2.com) -# -# 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. -################################################################################ - -providerName=WSO2 Inc. - -########################## license properties ################################## -licenseURL=http://www.apache.org/licenses/LICENSE-2.0 - -license=\ - Apache License\n\ - Version 2.0, January 2004\n\ - http://www.apache.org/licenses/\n\ -\n\ - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\ -\n\ - 1. Definitions.\n\ -\n\ - "License" shall mean the terms and conditions for use, reproduction,\n\ - and distribution as defined by Sections 1 through 9 of this document.\n\ -\n\ - "Licensor" shall mean the copyright owner or entity authorized by\n\ - the copyright owner that is granting the License.\n\ -\n\ - "Legal Entity" shall mean the union of the acting entity and all\n\ - other entities that control, are controlled by, or are under common\n\ - control with that entity. For the purposes of this definition,\n\ - "control" means (i) the power, direct or indirect, to cause the\n\ - direction or management of such entity, whether by contract or\n\ - otherwise, or (ii) ownership of fifty percent (50%) or more of the\n\ - outstanding shares, or (iii) beneficial ownership of such entity.\n\ -\n\ - "You" (or "Your") shall mean an individual or Legal Entity\n\ - exercising permissions granted by this License.\n\ -\n\ - "Source" form shall mean the preferred form for making modifications,\n\ - including but not limited to software source code, documentation\n\ - source, and configuration files.\n\ -\n\ - "Object" form shall mean any form resulting from mechanical\n\ - transformation or translation of a Source form, including but\n\ - not limited to compiled object code, generated documentation,\n\ - and conversions to other media types.\n\ -\n\ - "Work" shall mean the work of authorship, whether in Source or\n\ - Object form, made available under the License, as indicated by a\n\ - copyright notice that is included in or attached to the work\n\ - (an example is provided in the Appendix below).\n\ -\n\ - "Derivative Works" shall mean any work, whether in Source or Object\n\ - form, that is based on (or derived from) the Work and for which the\n\ - editorial revisions, annotations, elaborations, or other modifications\n\ - represent, as a whole, an original work of authorship. For the purposes\n\ - of this License, Derivative Works shall not include works that remain\n\ - separable from, or merely link (or bind by name) to the interfaces of,\n\ - the Work and Derivative Works thereof.\n\ -\n\ - "Contribution" shall mean any work of authorship, including\n\ - the original version of the Work and any modifications or additions\n\ - to that Work or Derivative Works thereof, that is intentionally\n\ - submitted to Licensor for inclusion in the Work by the copyright owner\n\ - or by an individual or Legal Entity authorized to submit on behalf of\n\ - the copyright owner. For the purposes of this definition, "submitted"\n\ - means any form of electronic, verbal, or written communication sent\n\ - to the Licensor or its representatives, including but not limited to\n\ - communication on electronic mailing lists, source code control systems,\n\ - and issue tracking systems that are managed by, or on behalf of, the\n\ - Licensor for the purpose of discussing and improving the Work, but\n\ - excluding communication that is conspicuously marked or otherwise\n\ - designated in writing by the copyright owner as "Not a Contribution."\n\ -\n\ - "Contributor" shall mean Licensor and any individual or Legal Entity\n\ - on behalf of whom a Contribution has been received by Licensor and\n\ - subsequently incorporated within the Work.\n\ -\n\ - 2. Grant of Copyright License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - copyright license to reproduce, prepare Derivative Works of,\n\ - publicly display, publicly perform, sublicense, and distribute the\n\ - Work and such Derivative Works in Source or Object form.\n\ -\n\ - 3. Grant of Patent License. Subject to the terms and conditions of\n\ - this License, each Contributor hereby grants to You a perpetual,\n\ - worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n\ - (except as stated in this section) patent license to make, have made,\n\ - use, offer to sell, sell, import, and otherwise transfer the Work,\n\ - where such license applies only to those patent claims licensable\n\ - by such Contributor that are necessarily infringed by their\n\ - Contribution(s) alone or by combination of their Contribution(s)\n\ - with the Work to which such Contribution(s) was submitted. If You\n\ - institute patent litigation against any entity (including a\n\ - cross-claim or counterclaim in a lawsuit) alleging that the Work\n\ - or a Contribution incorporated within the Work constitutes direct\n\ - or contributory patent infringement, then any patent licenses\n\ - granted to You under this License for that Work shall terminate\n\ - as of the date such litigation is filed.\n\ -\n\ - 4. Redistribution. You may reproduce and distribute copies of the\n\ - Work or Derivative Works thereof in any medium, with or without\n\ - modifications, and in Source or Object form, provided that You\n\ - meet the following conditions:\n\ -\n\ - (a) You must give any other recipients of the Work or\n\ - Derivative Works a copy of this License; and\n\ -\n\ - (b) You must cause any modified files to carry prominent notices\n\ - stating that You changed the files; and\n\ -\n\ - (c) You must retain, in the Source form of any Derivative Works\n\ - that You distribute, all copyright, patent, trademark, and\n\ - attribution notices from the Source form of the Work,\n\ - excluding those notices that do not pertain to any part of\n\ - the Derivative Works; and\n\ -\n\ - (d) If the Work includes a "NOTICE" text file as part of its\n\ - distribution, then any Derivative Works that You distribute must\n\ - include a readable copy of the attribution notices contained\n\ - within such NOTICE file, excluding those notices that do not\n\ - pertain to any part of the Derivative Works, in at least one\n\ - of the following places: within a NOTICE text file distributed\n\ - as part of the Derivative Works; within the Source form or\n\ - documentation, if provided along with the Derivative Works; or,\n\ - within a display generated by the Derivative Works, if and\n\ - wherever such third-party notices normally appear. The contents\n\ - of the NOTICE file are for informational purposes only and\n\ - do not modify the License. You may add Your own attribution\n\ - notices within Derivative Works that You distribute, alongside\n\ - or as an addendum to the NOTICE text from the Work, provided\n\ - that such additional attribution notices cannot be construed\n\ - as modifying the License.\n\ -\n\ - You may add Your own copyright statement to Your modifications and\n\ - may provide additional or different license terms and conditions\n\ - for use, reproduction, or distribution of Your modifications, or\n\ - for any such Derivative Works as a whole, provided Your use,\n\ - reproduction, and distribution of the Work otherwise complies with\n\ - the conditions stated in this License.\n\ -\n\ - 5. Submission of Contributions. Unless You explicitly state otherwise,\n\ - any Contribution intentionally submitted for inclusion in the Work\n\ - by You to the Licensor shall be under the terms and conditions of\n\ - this License, without any additional terms or conditions.\n\ - Notwithstanding the above, nothing herein shall supersede or modify\n\ - the terms of any separate license agreement you may have executed\n\ - with Licensor regarding such Contributions.\n\ -\n\ - 6. Trademarks. This License does not grant permission to use the trade\n\ - names, trademarks, service marks, or product names of the Licensor,\n\ - except as required for reasonable and customary use in describing the\n\ - origin of the Work and reproducing the content of the NOTICE file.\n\ -\n\ - 7. Disclaimer of Warranty. Unless required by applicable law or\n\ - agreed to in writing, Licensor provides the Work (and each\n\ - Contributor provides its Contributions) on an "AS IS" BASIS,\n\ - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n\ - implied, including, without limitation, any warranties or conditions\n\ - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n\ - PARTICULAR PURPOSE. You are solely responsible for determining the\n\ - appropriateness of using or redistributing the Work and assume any\n\ - risks associated with Your exercise of permissions under this License.\n\ -\n\ - 8. Limitation of Liability. In no event and under no legal theory,\n\ - whether in tort (including negligence), contract, or otherwise,\n\ - unless required by applicable law (such as deliberate and grossly\n\ - negligent acts) or agreed to in writing, shall any Contributor be\n\ - liable to You for damages, including any direct, indirect, special,\n\ - incidental, or consequential damages of any character arising as a\n\ - result of this License or out of the use or inability to use the\n\ - Work (including but not limited to damages for loss of goodwill,\n\ - work stoppage, computer failure or malfunction, or any and all\n\ - other commercial damages or losses), even if such Contributor\n\ - has been advised of the possibility of such damages.\n\ -\n\ - 9. Accepting Warranty or Additional Liability. While redistributing\n\ - the Work or Derivative Works thereof, You may choose to offer,\n\ - and charge a fee for, acceptance of support, warranty, indemnity,\n\ - or other liability obligations and/or rights consistent with this\n\ - License. However, in accepting such obligations, You may act only\n\ - on Your own behalf and on Your sole responsibility, not on behalf\n\ - of any other Contributor, and only if You agree to indemnify,\n\ - defend, and hold each Contributor harmless for any liability\n\ - incurred by, or claims asserted against, such Contributor by reason\n\ - of your accepting any such warranty or additional liability.\n\ -\n\ - END OF TERMS AND CONDITIONS\n - -######################### copyright properties ################################# -copyrightURL=TODO - -copyright=\ -Copyright 2009 WSO2, Inc. (http://wso2.com)\n\ -\n\ -Licensed under the Apache License, Version 2.0 (the "License");\n\ -you may not use this file except in compliance with the License.\n\ -You may obtain a copy of the License at\n\ -\n\ -http://www.apache.org/licenses/LICENSE-2.0\n\ -\n\ -Unless required by applicable law or agreed to in writing, software\n\ -distributed under the License is distributed on an "AS IS" BASIS,\n\ -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\ -See the License for the specific language governing permissions and\n\ -limitations under the License.\n - diff --git a/modules/broker/styles/service/pom.xml b/modules/broker/styles/service/pom.xml deleted file mode 100644 index 915b3048..00000000 --- a/modules/broker/styles/service/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - org.wso2.iot - wso2iot-broker-styles-parent - 1.0.0-SNAPSHOT - ../pom.xml - - - 4.0.0 - org.wso2.stratos.mb.styles - bundle - WSO2 Stratos Message Broker - Styles - http://wso2.org - - - - - maven-eclipse-plugin - 2.6 - - - org.apache.felix - maven-bundle-plugin - - true - - - ${project.artifactId} - ${project.artifactId} - * - - org.osgi.framework, - org.osgi.service.http, - org.wso2.carbon.ui, - javax.servlet.*;version="2.4.0", - *;resolution:=optional - - UIBundle - org.wso2.carbon.ui - - - - - - - src/main/resources - - META-INF/product.xml - - true - - - src/main/resources - - META-INF/product.xml - - - - - - diff --git a/modules/broker/styles/service/src/main/resources/META-INF/product.xml b/modules/broker/styles/service/src/main/resources/META-INF/product.xml deleted file mode 100644 index 6e8eb71d..00000000 --- a/modules/broker/styles/service/src/main/resources/META-INF/product.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - http://stackoverflow.com/questions/tagged/wso2/ - https://docs.wso2.org/display/MB300/WSO2+Message+Broker+Documentation - http://wso2.org/mail - https://wso2.org/jira/browse/MB - - diff --git a/modules/broker/styles/service/src/main/resources/web/product/about.html b/modules/broker/styles/service/src/main/resources/web/product/about.html deleted file mode 100644 index 61facaee..00000000 --- a/modules/broker/styles/service/src/main/resources/web/product/about.html +++ /dev/null @@ -1,120 +0,0 @@ - - -WSO2 MB - About - - - - -

Version 3.0.0

-

About WSO2 Message Broker Server

-

WSO2 MB is a lightweight and easy-to-use Open Source Message Broker Server -(MB) available under the Apache Software License v2.0.

- - -

WSO2 MB 3.0.0 is developed on top of the revolutionary - Carbon platform -and is based on the OSGi framework to achieve the -better modularity for your SOA architecture. This also contains a lots of new -features and many other optional components to customize the behavior of the -server. Further, if you do not want any of the built in features, you can -uninstall those features without any trouble. In other words, this ES can be -customized to your SOA needs.

-

About WSO2 Carbon

-

WSO2 Carbon is a component based Enterprise SOA platform. The -design of -WSO2 Carbon focuses on separating the key functionality of the SOA -platform -into separate pluggable Carbon components that can be mixed and -matched, like -customizable building blocks. This allows you to add only the -functionality -you need to start up, and continue to add product capabilities -as your -requirements grow. This helps a business to quickly adapt to -changes.

-

OSGi is used as the underlying core modularization technology -to build the -Carbon platform. The Carbon framework is shipped with Eclipse Equinox -by -default, but can be supported on Spring dm Server, Felix or Knoplerfish -if -required. The OSGi technology even allows you to write your business -functionality as an OSGi component and deploy it in the existing Carbon -platform.

-

For a quick start on using the WSO2 Carbon -platform, the Carbon components are pre-assembled into the following -products:

- -

You can assemble your own products by combining -components and -deploying them in a preferred architecture.

-

The WSO2 Carbon platform gives maximum flexibility to adapt -the middleware -to your enterprise architecture, rather than adapt your architecture to -the -middleware.

- -

About WSO2

-

WSO2 is a Open Source technology company building Open Source -middleware -platforms for Web services and SOA. WSO2 delivers integrated middleware -stacks based on components developed at Apache, offering industry -leading -performance and convenience for customers.

-

Founded in August 2005 by pioneers in Web services and Open -Source, WSO2 -engineers contribute heavily to many key Apache Web services projects.

- -

Have you tried...

-

Registry

-

WSAS

-

ESB

-

BPS

-

BRS

-

Identity

-

DSS

-

BAM

-

GS

-

MS

-

Stay connected

-

Subscribe -to the WSO2 newsletter - project updates, events, articles, SOA news -and much -more.

- - diff --git a/modules/broker/styles/service/src/main/resources/web/styles/css/main.css b/modules/broker/styles/service/src/main/resources/web/styles/css/main.css deleted file mode 100644 index dd39635e..00000000 --- a/modules/broker/styles/service/src/main/resources/web/styles/css/main.css +++ /dev/null @@ -1,238 +0,0 @@ -/* ---------------- template styles ------------------------- */ - -table#main-table td#header { - background-color:#3B003D; - background-image:url(../images/back-repeat.png); - background-repeat:repeat-x; - height:70px; - border-bottom:solid 1px #000000; -} - -table#main-table td#menu-panel { - border-right: solid 1px #989898; - /*background-image: url(../images/mb-server-menu-panel-bg.gif);*/ - background-position: right top; - background-repeat: repeat-y; -} - - -/* ---------------- header styles ------------------ */ -div#header-div { - background-image: url( ../images/mb-header-bg.png); - height:70px; -} - -div#header-div div.left-logo { - background-image: url( ../images/mb-logo.png ); - margin-left:25px; - margin-top:22px; - position:absolute; -} - -div#header-div div.right-logo { - /*background-image:url("../images/right-logo-bg.gif"); - background-position:right top; - background-repeat:no-repeat;*/ - color:#9f9f9f; - height:32px; - margin-right:20px; - line-height: 30px; - margin-top:10px; - padding-right:0px; - padding-top:0px; -} -div#header-div div.header-links { - margin-top:0px; -} -div#header-div div.header-links div.right-links { - margin-right: 0px; - height: 27px; - padding-top: 0px; - color:#ffffff; -} - -div#header-div div.header-links div.right-links a { color:#fff; } -div#header-div div.header-links div.right-links ul { - background-image:none; - background-position:left top; - background-repeat:repeat-x; - padding-left: 25px; - padding-right: 15px; - padding-top: 4px; - padding-bottom: 4px; -} -/* ------------- menu styles ---------------------- */ -div#menu { -} - -div#menu ul.main { -} - -div#menu ul.main li { -} - -div#menu ul.main li.normal { -} - -div#menu ul.main li a.menu-home { -background-image:url(../images/menu_header.png); -height:28px; -color:#fff; -} - -div#menu ul.main li.menu-header { - background-image: url(../images/mb-server-menu-header.png); - background-position: left bottom; - background-repeat: repeat-x; - height: 32px; - line-height: 32px; - font-weight:600; - color:#444; -} - -div#menu ul.main li a.menu-default { -} - -div#menu ul.main li a.menu-default:hover { - background-color: #EFECF5; - border-bottom: solid 1px #C2B7D8; - border-top: solid 1px #C2B7D8; - color: #00447C; -} - -div#menu ul.sub { -} - -/* -------------- child no-01 styles -------------- */ - -div#menu ul.sub li.normal { - -} - -div#menu ul.sub li a.menu-default { -} - -/* ----------- child no-01 (disabled) styles ------------------- */ - -div#menu ul.sub li a.menu-disabled-link { - } - - div#menu ul.sub li a.menu-disabled-link:hover { - } - -/* -------------- child no-02 styles -------------- */ - -div#menu ul.sub li.normal ul.sub li a.menu-default { - -} - -/* -------------- child no-03 styles -------------- */ - -div#menu ul.sub li.normal ul.sub li.normal ul.sub li a.menu-default { -} - -/* ------------- footer styles -------------------- */ - -div#footer-div div.footer-content div.poweredby { - /*background-image: url(../images/powered-synapse.gif);*/ - background-position: right top; -} - -/* ---- login styles ----- */ - - -/* --------------- table styles -------------------- */ - -.tableOddRow{background-color: white;} -.tableEvenRow{background-color: #EFECF5;} - -.button:hover{ - /*background-image:url(../images/esb-button-bg-hover.gif); - border:solid 1px #8268A8;*/ -} - -/* =============================================================================================================== */ - - - -.cornerExpand { - position: relative; - top: 3px; - left: -12px; - cursor: pointer; -} - -.cornerCollapse { - position: relative; - top: 3px; - left: -12px; - cursor: pointer; -} - -/* chanaka */ - -.form-table td{ - padding-bottom:5px !important; - padding-left:5px !important; - padding-top:5px !important; - padding-right:10px !important; -} -.form-table td div.indented{ - padding-left:7px !important; - color:#595959 !important; -} -.form-table-left{ -width:100px; -} - -.longTextField{ -width:270px; -} -.rowAlone{ -padding-top:10px; -padding-bottom:10px; -} -.tabedBox{ -border:solid 1px #cccccc; -margin-left:10px; -padding:10px; -margin-bottom:10px; -} -/* chanaka end */ - -a.fact-selector-icon-link { - background-image: url( ../images/facts-selector.gif ); - background-repeat: no-repeat; - background-position: left top; - padding-left: 20px; - line-height: 17px; - height: 17px; - float: left; - position: relative; - margin-left: 10px; - margin-top: 5px; - margin-bottom: 3px; - white-space: nowrap; -} -table#main-table td#middle-content { -/*background-image: url(../images/menu-margin.gif);*/ -background-position: left top; -background-repeat: repeat-y; -background-color:#ffffff; -} -div#middle{ -background-color:#ffffff; -} - -/* new theme 01-07-2013 */ -table#main-table td.vertical-menu-container { background-color:#000; padding-left: 5px; border-top:0px;} -div.menu-panel-buttons { border-top-left-radius: 7px; border-bottom-left-radius: 7px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; padding: 15px 3px;} -div.selected span { font-weight:bold; color:#ffffff; background-color:#555555; } -div.menu-panel-buttons span { } -div.selected { border:0px; background-color:#555555; box-shadow:none; } -div#middle h2{color:#444;} -table#main-table td#footer{background:#444;} -div#menu ul.main li.menu-header img{ - background: none repeat scroll 0 0 #EFEFEF; - border-radius:15px; -} diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/1px.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/1px.gif deleted file mode 100644 index f866f1db..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/1px.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/back-repeat.png b/modules/broker/styles/service/src/main/resources/web/styles/images/back-repeat.png deleted file mode 100644 index 2e037e7d..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/back-repeat.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/cancel.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/cancel.gif deleted file mode 100644 index f74130eb..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/cancel.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/collapse.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/collapse.gif deleted file mode 100644 index 83d7fd23..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/collapse.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/debug.png b/modules/broker/styles/service/src/main/resources/web/styles/images/debug.png deleted file mode 100644 index 273fd49e..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/debug.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/edit.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/edit.gif deleted file mode 100644 index f44da7ba..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/edit.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/error.png b/modules/broker/styles/service/src/main/resources/web/styles/images/error.png deleted file mode 100644 index 84b465ad..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/error.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/expand.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/expand.gif deleted file mode 100644 index 116e1204..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/expand.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/facts-selector.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/facts-selector.gif deleted file mode 100644 index d6d8a397..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/facts-selector.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/fatal.png b/modules/broker/styles/service/src/main/resources/web/styles/images/fatal.png deleted file mode 100644 index 9a099668..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/fatal.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/help.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/help.gif deleted file mode 100644 index 3b050aac..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/help.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/information.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/information.gif deleted file mode 100644 index a9c63b17..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/information.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/magnifier.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/magnifier.gif deleted file mode 100644 index 86f81ed3..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/magnifier.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-bg.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-bg.gif deleted file mode 100644 index 74db8888..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-bg.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-bg.png b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-bg.png deleted file mode 100644 index 94804654..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-bg.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-logo.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-logo.gif deleted file mode 100644 index 7668f408..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-logo.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-region-bg.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-region-bg.gif deleted file mode 100644 index 33e37189..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-header-region-bg.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-home-bg.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-home-bg.gif deleted file mode 100644 index 81884920..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-home-bg.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-logo.png b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-logo.png deleted file mode 100644 index cb28217f..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-logo.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-mgt-logo.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-mgt-logo.gif deleted file mode 100644 index 9fb5e970..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-mgt-logo.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-server-menu-header.png b/modules/broker/styles/service/src/main/resources/web/styles/images/mb-server-menu-header.png deleted file mode 100644 index 5c6e3eb5..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/mb-server-menu-header.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu-icon.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu-icon.gif deleted file mode 100644 index 8ec11484..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu-icon.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_global_config.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_global_config.gif deleted file mode 100644 index af6f7ba9..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_global_config.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_header.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_header.gif deleted file mode 100644 index 3c8b5b16..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_header.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_header.png b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_header.png deleted file mode 100644 index a6ff1158..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_header.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_home.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_home.gif deleted file mode 100644 index c974d3df..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_home.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_keystore.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_keystore.gif deleted file mode 100644 index c57d3bd0..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_keystore.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_logging.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_logging.gif deleted file mode 100644 index f5e9cba3..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_logging.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_logs.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_logs.gif deleted file mode 100644 index dc4174a2..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_logs.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_manage.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_manage.gif deleted file mode 100644 index 626648f5..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_manage.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_monitor.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_monitor.gif deleted file mode 100644 index 86f81ed3..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_monitor.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_restart.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_restart.gif deleted file mode 100644 index 86d3b89c..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_restart.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_security.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_security.gif deleted file mode 100644 index 2b241f62..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_security.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_services.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_services.gif deleted file mode 100644 index 4923271c..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_services.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_stats.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_stats.gif deleted file mode 100644 index a54f8cec..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_stats.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_tracer.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_tracer.gif deleted file mode 100644 index 8f81401f..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_tracer.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_transports.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_transports.gif deleted file mode 100644 index 35f3445d..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_transports.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_user_groups.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_user_groups.gif deleted file mode 100644 index 65be44ce..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_user_groups.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_user_stores.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_user_stores.gif deleted file mode 100644 index 62ad3b98..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_user_stores.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_users.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/menu_users.gif deleted file mode 100644 index 61d1e009..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/menu_users.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/plugin_add.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/plugin_add.gif deleted file mode 100644 index ac22da98..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/plugin_add.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/plugin_delete.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/plugin_delete.gif deleted file mode 100644 index 4721397a..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/plugin_delete.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/powered.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/powered.gif deleted file mode 100644 index 2c0cf54b..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/powered.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/right-links-bg.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/right-links-bg.gif deleted file mode 100644 index 677a421b..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/right-links-bg.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/rule-button-bg-hover.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/rule-button-bg-hover.gif deleted file mode 100644 index c4e3ffbc..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/rule-button-bg-hover.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/t-right-logo.gif b/modules/broker/styles/service/src/main/resources/web/styles/images/t-right-logo.gif deleted file mode 100644 index 644f8413..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/t-right-logo.gif and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/trace.png b/modules/broker/styles/service/src/main/resources/web/styles/images/trace.png deleted file mode 100644 index 64e74124..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/trace.png and /dev/null differ diff --git a/modules/broker/styles/service/src/main/resources/web/styles/images/warn.png b/modules/broker/styles/service/src/main/resources/web/styles/images/warn.png deleted file mode 100644 index d14823cd..00000000 Binary files a/modules/broker/styles/service/src/main/resources/web/styles/images/warn.png and /dev/null differ diff --git a/modules/core/tools/pom.xml b/modules/core/tools/pom.xml index f6fd9628..27585f27 100644 --- a/modules/core/tools/pom.xml +++ b/modules/core/tools/pom.xml @@ -31,4 +31,8 @@ WSO2 IoT - Core - Tools http://maven.apache.org + + cdmf-devicetype-archetype + + diff --git a/pom.xml b/pom.xml index cabed3ba..8c8c9f40 100644 --- a/pom.xml +++ b/pom.xml @@ -1565,6 +1565,7 @@ 1.2.7 ${product.iot.version} 3.1.0 + 3.1.0 ${product.iot.version}