From 17dd1fedd2f7feb26cbeec67dbd0c50fe2dd8df3 Mon Sep 17 00:00:00 2001 From: AdecWatt Date: Mon, 18 Jun 2018 14:56:04 +0200 Subject: [PATCH] First git version --- .gitignore | 15 + README.md | 48 + ant/build.xml | 335 +++++ data/config/AdecWatt.xml | 76 ++ .../AdecWattUser_br_FR_breton.properties | 102 ++ .../AdecWattUser_br_FR_gallo.properties | 102 ++ data/config/AdecWattUser_en_US.properties | 53 + data/config/AdecWattUser_es_ES.properties | 122 ++ data/config/AdecWattUser_fr_FR.properties | 134 ++ data/config/AdecWatt_br_FR_breton.properties | 187 +++ data/config/AdecWatt_br_FR_gallo.properties | 190 +++ data/config/AdecWatt_en_US.properties | 197 +++ data/config/AdecWatt_es_ES.properties | 255 ++++ data/config/AdecWatt_fr_FR.properties | 197 +++ .../RemoteUpdate_br_FR_breton.properties | 36 + .../RemoteUpdate_br_FR_gallo.properties | 35 + data/config/RemoteUpdate_en_US.properties | 35 + data/config/RemoteUpdate_es_ES.properties | 36 + data/config/RemoteUpdate_fr_FR.properties | 36 + data/images/2017-festival-adec56.gif | Bin 0 -> 59070 bytes data/images/2017-festival-adec56.png | Bin 0 -> 67868 bytes data/images/adecWatt-anim-noel.gif | Bin 0 -> 331639 bytes data/images/adecWatt-anim.gif | Bin 0 -> 303777 bytes data/images/adecWatt.png | Bin 0 -> 658 bytes data/images/button/Add.png | Bin 0 -> 516 bytes data/images/button/AddPatch.png | Bin 0 -> 905 bytes data/images/button/AddPoster.png | Bin 0 -> 812 bytes data/images/button/AddProp.png | Bin 0 -> 516 bytes data/images/button/AddZone.png | Bin 0 -> 516 bytes data/images/button/Architect.png | Bin 0 -> 601 bytes data/images/button/ArchitectOff.png | Bin 0 -> 579 bytes data/images/button/ArchitectOn.png | Bin 0 -> 601 bytes data/images/button/BreakIcon.png | Bin 0 -> 1108 bytes data/images/button/ChangeRole.png | Bin 0 -> 539 bytes data/images/button/CircuitOff.png | Bin 0 -> 657 bytes data/images/button/CircuitOn.png | Bin 0 -> 837 bytes data/images/button/Close.png | Bin 0 -> 738 bytes data/images/button/CloseAll.png | Bin 0 -> 865 bytes data/images/button/Copy.png | Bin 0 -> 436 bytes data/images/button/Cut.png | Bin 0 -> 368 bytes data/images/button/DataManager.png | Bin 0 -> 912 bytes data/images/button/DataManagerOff.png | Bin 0 -> 821 bytes data/images/button/DataManagerOn.png | Bin 0 -> 912 bytes data/images/button/DataStructuresManager.png | Bin 0 -> 671 bytes .../button/DataStructuresManagerOff.png | Bin 0 -> 653 bytes .../images/button/DataStructuresManagerOn.png | Bin 0 -> 671 bytes data/images/button/Down.png | Bin 0 -> 414 bytes data/images/button/EmptyIcon.png | Bin 0 -> 1552 bytes data/images/button/Erase.png | Bin 0 -> 648 bytes data/images/button/EraseOff.png | Bin 0 -> 648 bytes data/images/button/EraseOn.png | Bin 0 -> 810 bytes data/images/button/Export.png | Bin 0 -> 565 bytes data/images/button/ExportPDF.png | Bin 0 -> 685 bytes data/images/button/Filter.png | Bin 0 -> 429 bytes data/images/button/FurnitureManager.png | Bin 0 -> 803 bytes data/images/button/FurnitureManagerOff.png | Bin 0 -> 757 bytes data/images/button/FurnitureManagerOn.png | Bin 0 -> 803 bytes data/images/button/HiddenOff.png | Bin 0 -> 895 bytes data/images/button/HiddenOn.png | Bin 0 -> 874 bytes data/images/button/HorizontalCenter.png | Bin 0 -> 385 bytes data/images/button/HorizontalDistrib.png | Bin 0 -> 566 bytes data/images/button/HorizontalLeft.png | Bin 0 -> 382 bytes data/images/button/HorizontalRight.png | Bin 0 -> 381 bytes data/images/button/HorizontalSpace.png | Bin 0 -> 706 bytes data/images/button/HorizontalSpin.png | Bin 0 -> 711 bytes data/images/button/HorizontalSpinOff.png | Bin 0 -> 712 bytes data/images/button/HorizontalSpinOn.png | Bin 0 -> 711 bytes data/images/button/Image.png | Bin 0 -> 628 bytes data/images/button/Import.png | Bin 0 -> 557 bytes data/images/button/Landscape.png | Bin 0 -> 551 bytes data/images/button/Linguist.png | Bin 0 -> 1050 bytes data/images/button/LinguistOff.png | Bin 0 -> 994 bytes data/images/button/LinguistOn.png | Bin 0 -> 1050 bytes data/images/button/LocalizedOff.png | Bin 0 -> 758 bytes data/images/button/LocalizedOn.png | Bin 0 -> 816 bytes data/images/button/LockOff.png | Bin 0 -> 512 bytes data/images/button/LockOn.png | Bin 0 -> 452 bytes data/images/button/MandatoryOff.png | Bin 0 -> 504 bytes data/images/button/MandatoryOn.png | Bin 0 -> 512 bytes data/images/button/Manual.png | Bin 0 -> 967 bytes data/images/button/MixIcon.png | Bin 0 -> 2565 bytes data/images/button/NewBuilding.png | Bin 0 -> 774 bytes data/images/button/NewLightPlot.png | Bin 0 -> 774 bytes data/images/button/NoFilter.png | Bin 0 -> 714 bytes data/images/button/NomouseOff.png | Bin 0 -> 861 bytes data/images/button/NomouseOn.png | Bin 0 -> 816 bytes data/images/button/PageSetup.png | Bin 0 -> 710 bytes data/images/button/Paste.png | Bin 0 -> 598 bytes data/images/button/Patch.png | Bin 0 -> 944 bytes data/images/button/PlotCity.png | Bin 0 -> 559 bytes data/images/button/Portrait.png | Bin 0 -> 683 bytes data/images/button/Print.png | Bin 0 -> 566 bytes data/images/button/Remove.png | Bin 0 -> 730 bytes data/images/button/RemoveZone.png | Bin 0 -> 730 bytes data/images/button/Restart.png | Bin 0 -> 802 bytes data/images/button/Save.png | Bin 0 -> 559 bytes data/images/button/SaveAll.png | Bin 0 -> 559 bytes data/images/button/Search.png | Bin 0 -> 559 bytes data/images/button/SelectAll.png | Bin 0 -> 614 bytes data/images/button/SetEnum.png | Bin 0 -> 236 bytes data/images/button/SetGeoPos.png | Bin 0 -> 606 bytes data/images/button/StageManager.png | Bin 0 -> 681 bytes data/images/button/StageManagerOff.png | Bin 0 -> 653 bytes data/images/button/StageManagerOn.png | Bin 0 -> 681 bytes data/images/button/Tag.png | Bin 0 -> 629 bytes data/images/button/Text.png | Bin 0 -> 451 bytes data/images/button/TurnLeft.png | Bin 0 -> 648 bytes data/images/button/TurnRight.png | Bin 0 -> 648 bytes data/images/button/Up.png | Bin 0 -> 415 bytes data/images/button/Validate.png | Bin 0 -> 575 bytes data/images/button/VerticalBottom.png | Bin 0 -> 412 bytes data/images/button/VerticalCenter.png | Bin 0 -> 428 bytes data/images/button/VerticalDistrib.png | Bin 0 -> 603 bytes data/images/button/VerticalSpace.png | Bin 0 -> 601 bytes data/images/button/VerticalSpin.png | Bin 0 -> 689 bytes data/images/button/VerticalSpinOff.png | Bin 0 -> 755 bytes data/images/button/VerticalSpinOn.png | Bin 0 -> 689 bytes data/images/button/VerticalTop.png | Bin 0 -> 370 bytes data/images/button/Visitor.png | Bin 0 -> 539 bytes data/images/button/VisitorOff.png | Bin 0 -> 622 bytes data/images/button/VisitorOn.png | Bin 0 -> 539 bytes data/images/button/Wizard.png | Bin 0 -> 661 bytes data/images/button/Yoda.png | Bin 0 -> 800 bytes data/images/button/YodaOff.png | Bin 0 -> 761 bytes data/images/button/YodaOn.png | Bin 0 -> 800 bytes data/images/button/develop.png | Bin 0 -> 194 bytes .../images/button/distribute-horizontal-x.png | Bin 0 -> 215 bytes data/images/button/distribute-vertical-y.png | Bin 0 -> 266 bytes data/images/button/handler.png | Bin 0 -> 271 bytes data/server/furniture/000-0052.lpt | 9 + data/texts/AboutAdecWatt.html | 31 + data/texts/AdecWattLicence.html | 44 + data/texts/ManualAdecWatt.html | 106 ++ soft/JMapViewer.jar | Bin 0 -> 140423 bytes soft/Misc.jar | Bin 0 -> 506462 bytes .../adecWatt/control/AdecWattController.java | 187 +++ .../adecWatt/control/AdecWattManager.java | 686 +++++++++++ src/java/adecWatt/control/LaunchAdecWatt.java | 77 ++ .../control/LaunchUpdatedAdecWatt.java | 22 + src/java/adecWatt/model/Acc.java | 198 +++ src/java/adecWatt/model/AdecWatt.java | 119 ++ src/java/adecWatt/model/Circuits.java | 171 +++ src/java/adecWatt/model/Comp.java | 121 ++ src/java/adecWatt/model/Editable.java | 1095 +++++++++++++++++ src/java/adecWatt/model/Embedded.java | 210 ++++ src/java/adecWatt/model/ImageDB.java | 431 +++++++ src/java/adecWatt/model/InseeDB.java | 87 ++ src/java/adecWatt/model/Item.java | 337 +++++ src/java/adecWatt/model/LPColor.java | 406 ++++++ src/java/adecWatt/model/Patch.java | 90 ++ src/java/adecWatt/model/Permanent.java | 162 +++ src/java/adecWatt/model/PermanentDB.java | 478 +++++++ src/java/adecWatt/model/PreviewCache.java | 111 ++ src/java/adecWatt/model/Prop.java | 432 +++++++ src/java/adecWatt/model/Segm.java | 159 +++ src/java/adecWatt/model/TagDB.java | 310 +++++ src/java/adecWatt/model/Unit.java | 374 ++++++ src/java/adecWatt/model/UnitNode.java | 54 + src/java/adecWatt/model/User.java | 187 +++ src/java/adecWatt/model/compile | 782 ++++++++++++ src/java/adecWatt/model/package-info.java | 27 + src/java/adecWatt/model/unit/Accessory.java | 10 + src/java/adecWatt/model/unit/Building.java | 28 + src/java/adecWatt/model/unit/Furniture.java | 10 + src/java/adecWatt/model/unit/Information.java | 10 + src/java/adecWatt/model/unit/Lightplot.java | 75 ++ src/java/adecWatt/model/unit/Line.java | 10 + .../adecWatt/model/unit/NonWorkspace.java | 29 + src/java/adecWatt/model/unit/Workspace.java | 857 +++++++++++++ src/java/adecWatt/model/xml/XmlAcc.java | 16 + src/java/adecWatt/model/xml/XmlComp.java | 16 + src/java/adecWatt/model/xml/XmlPermanent.java | 201 +++ src/java/adecWatt/model/xml/XmlProp.java | 19 + src/java/adecWatt/model/xml/XmlSegm.java | 16 + src/java/adecWatt/model/xml/XmlUnit.java | 26 + src/java/adecWatt/model/xml/package-info.java | 10 + src/java/adecWatt/view/JAcc.java | 123 ++ src/java/adecWatt/view/JAccPopup.java | 67 + src/java/adecWatt/view/JAdecWatt.java | 510 ++++++++ src/java/adecWatt/view/JAdecWattDialog.java | 255 ++++ src/java/adecWatt/view/JAdecWattMenuBar.java | 67 + .../adecWatt/view/JAdecWattSearchToolBar.java | 44 + src/java/adecWatt/view/JAdecWattToolBar.java | 64 + src/java/adecWatt/view/JBuildingView.java | 13 + src/java/adecWatt/view/JComp.java | 76 ++ src/java/adecWatt/view/JDefLabel.java | 41 + src/java/adecWatt/view/JDefPropTable.java | 409 ++++++ src/java/adecWatt/view/JDragUnit.java | 20 + src/java/adecWatt/view/JEditable.java | 354 ++++++ src/java/adecWatt/view/JItem.java | 172 +++ src/java/adecWatt/view/JItemHandler.java | 168 +++ src/java/adecWatt/view/JItemPopup.java | 80 ++ src/java/adecWatt/view/JLightplotView.java | 39 + src/java/adecWatt/view/JPatch.java | 98 ++ src/java/adecWatt/view/JPreviewImp.java | 242 ++++ src/java/adecWatt/view/JProp.java | 263 ++++ .../adecWatt/view/JScrollPaneWorkspace.java | 87 ++ src/java/adecWatt/view/JSegm.java | 28 + src/java/adecWatt/view/JStringSet.java | 137 +++ src/java/adecWatt/view/JTransform.java | 151 +++ src/java/adecWatt/view/JUnitPopup.java | 79 ++ src/java/adecWatt/view/JUser.java | 94 ++ .../view/JWorkspaceSlidersToolBar.java | 80 ++ src/java/adecWatt/view/JWorkspaceView.java | 926 ++++++++++++++ src/java/adecWatt/view/JZones.java | 613 +++++++++ src/java/adecWatt/view/PrintWorkspace.java | 150 +++ src/java/adecWatt/view/SpringUtilities.java | 225 ++++ .../adecWatt/view/jProp/JAutoComboBox.java | 72 ++ .../adecWatt/view/jProp/JFilePreview.java | 70 ++ src/java/adecWatt/view/jProp/JImagePopup.java | 655 ++++++++++ src/java/adecWatt/view/jProp/JPImage.java | 65 + src/java/adecWatt/view/jProp/JPLabel.java | 69 ++ .../adecWatt/view/jProp/JPMultiValues.java | 116 ++ .../adecWatt/view/jProp/JPropArticle.java | 58 + .../adecWatt/view/jProp/JPropBuilding.java | 96 ++ src/java/adecWatt/view/jProp/JPropCity.java | 79 ++ src/java/adecWatt/view/jProp/JPropCube.java | 12 + src/java/adecWatt/view/jProp/JPropEnum.java | 57 + src/java/adecWatt/view/jProp/JPropGeo.java | 120 ++ src/java/adecWatt/view/jProp/JPropIcon.java | 50 + src/java/adecWatt/view/jProp/JPropImage.java | 47 + src/java/adecWatt/view/jProp/JPropNumber.java | 12 + .../adecWatt/view/jProp/JPropPreview.java | 62 + src/java/adecWatt/view/jProp/JPropSquare.java | 12 + src/java/adecWatt/view/jProp/JPropText.java | 25 + .../adecWatt/view/jProp/package-info.java | 24 + src/java/adecWatt/view/package-info.java | 29 + src/java/misc/Config.java | 523 ++++++++ src/java/misc/RemoteUpdate.java | 736 +++++++++++ src/java/misc/Util.java | 927 ++++++++++++++ ws/launch-adecWatt.sh | 3 + 231 files changed, 20621 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 ant/build.xml create mode 100644 data/config/AdecWatt.xml create mode 100644 data/config/AdecWattUser_br_FR_breton.properties create mode 100644 data/config/AdecWattUser_br_FR_gallo.properties create mode 100644 data/config/AdecWattUser_en_US.properties create mode 100644 data/config/AdecWattUser_es_ES.properties create mode 100644 data/config/AdecWattUser_fr_FR.properties create mode 100644 data/config/AdecWatt_br_FR_breton.properties create mode 100644 data/config/AdecWatt_br_FR_gallo.properties create mode 100644 data/config/AdecWatt_en_US.properties create mode 100644 data/config/AdecWatt_es_ES.properties create mode 100644 data/config/AdecWatt_fr_FR.properties create mode 100644 data/config/RemoteUpdate_br_FR_breton.properties create mode 100644 data/config/RemoteUpdate_br_FR_gallo.properties create mode 100644 data/config/RemoteUpdate_en_US.properties create mode 100644 data/config/RemoteUpdate_es_ES.properties create mode 100644 data/config/RemoteUpdate_fr_FR.properties create mode 100644 data/images/2017-festival-adec56.gif create mode 100644 data/images/2017-festival-adec56.png create mode 100644 data/images/adecWatt-anim-noel.gif create mode 100644 data/images/adecWatt-anim.gif create mode 100644 data/images/adecWatt.png create mode 100644 data/images/button/Add.png create mode 100644 data/images/button/AddPatch.png create mode 100644 data/images/button/AddPoster.png create mode 100644 data/images/button/AddProp.png create mode 100644 data/images/button/AddZone.png create mode 100644 data/images/button/Architect.png create mode 100644 data/images/button/ArchitectOff.png create mode 100644 data/images/button/ArchitectOn.png create mode 100644 data/images/button/BreakIcon.png create mode 100644 data/images/button/ChangeRole.png create mode 100644 data/images/button/CircuitOff.png create mode 100644 data/images/button/CircuitOn.png create mode 100644 data/images/button/Close.png create mode 100644 data/images/button/CloseAll.png create mode 100644 data/images/button/Copy.png create mode 100644 data/images/button/Cut.png create mode 100644 data/images/button/DataManager.png create mode 100644 data/images/button/DataManagerOff.png create mode 100644 data/images/button/DataManagerOn.png create mode 100644 data/images/button/DataStructuresManager.png create mode 100644 data/images/button/DataStructuresManagerOff.png create mode 100644 data/images/button/DataStructuresManagerOn.png create mode 100644 data/images/button/Down.png create mode 100644 data/images/button/EmptyIcon.png create mode 100644 data/images/button/Erase.png create mode 100644 data/images/button/EraseOff.png create mode 100644 data/images/button/EraseOn.png create mode 100644 data/images/button/Export.png create mode 100644 data/images/button/ExportPDF.png create mode 100644 data/images/button/Filter.png create mode 100644 data/images/button/FurnitureManager.png create mode 100644 data/images/button/FurnitureManagerOff.png create mode 100644 data/images/button/FurnitureManagerOn.png create mode 100644 data/images/button/HiddenOff.png create mode 100644 data/images/button/HiddenOn.png create mode 100644 data/images/button/HorizontalCenter.png create mode 100644 data/images/button/HorizontalDistrib.png create mode 100644 data/images/button/HorizontalLeft.png create mode 100644 data/images/button/HorizontalRight.png create mode 100644 data/images/button/HorizontalSpace.png create mode 100644 data/images/button/HorizontalSpin.png create mode 100644 data/images/button/HorizontalSpinOff.png create mode 100644 data/images/button/HorizontalSpinOn.png create mode 100644 data/images/button/Image.png create mode 100644 data/images/button/Import.png create mode 100644 data/images/button/Landscape.png create mode 100644 data/images/button/Linguist.png create mode 100644 data/images/button/LinguistOff.png create mode 100644 data/images/button/LinguistOn.png create mode 100644 data/images/button/LocalizedOff.png create mode 100644 data/images/button/LocalizedOn.png create mode 100644 data/images/button/LockOff.png create mode 100644 data/images/button/LockOn.png create mode 100644 data/images/button/MandatoryOff.png create mode 100644 data/images/button/MandatoryOn.png create mode 100644 data/images/button/Manual.png create mode 100644 data/images/button/MixIcon.png create mode 100644 data/images/button/NewBuilding.png create mode 100644 data/images/button/NewLightPlot.png create mode 100644 data/images/button/NoFilter.png create mode 100644 data/images/button/NomouseOff.png create mode 100644 data/images/button/NomouseOn.png create mode 100644 data/images/button/PageSetup.png create mode 100644 data/images/button/Paste.png create mode 100644 data/images/button/Patch.png create mode 100644 data/images/button/PlotCity.png create mode 100644 data/images/button/Portrait.png create mode 100644 data/images/button/Print.png create mode 100644 data/images/button/Remove.png create mode 100644 data/images/button/RemoveZone.png create mode 100644 data/images/button/Restart.png create mode 100644 data/images/button/Save.png create mode 100644 data/images/button/SaveAll.png create mode 100644 data/images/button/Search.png create mode 100644 data/images/button/SelectAll.png create mode 100644 data/images/button/SetEnum.png create mode 100644 data/images/button/SetGeoPos.png create mode 100644 data/images/button/StageManager.png create mode 100644 data/images/button/StageManagerOff.png create mode 100644 data/images/button/StageManagerOn.png create mode 100644 data/images/button/Tag.png create mode 100644 data/images/button/Text.png create mode 100644 data/images/button/TurnLeft.png create mode 100644 data/images/button/TurnRight.png create mode 100644 data/images/button/Up.png create mode 100644 data/images/button/Validate.png create mode 100644 data/images/button/VerticalBottom.png create mode 100644 data/images/button/VerticalCenter.png create mode 100644 data/images/button/VerticalDistrib.png create mode 100644 data/images/button/VerticalSpace.png create mode 100644 data/images/button/VerticalSpin.png create mode 100644 data/images/button/VerticalSpinOff.png create mode 100644 data/images/button/VerticalSpinOn.png create mode 100644 data/images/button/VerticalTop.png create mode 100644 data/images/button/Visitor.png create mode 100644 data/images/button/VisitorOff.png create mode 100644 data/images/button/VisitorOn.png create mode 100644 data/images/button/Wizard.png create mode 100644 data/images/button/Yoda.png create mode 100644 data/images/button/YodaOff.png create mode 100644 data/images/button/YodaOn.png create mode 100644 data/images/button/develop.png create mode 100644 data/images/button/distribute-horizontal-x.png create mode 100644 data/images/button/distribute-vertical-y.png create mode 100644 data/images/button/handler.png create mode 100644 data/server/furniture/000-0052.lpt create mode 100644 data/texts/AboutAdecWatt.html create mode 100644 data/texts/AdecWattLicence.html create mode 100644 data/texts/ManualAdecWatt.html create mode 100644 soft/JMapViewer.jar create mode 100644 soft/Misc.jar create mode 100644 src/java/adecWatt/control/AdecWattController.java create mode 100644 src/java/adecWatt/control/AdecWattManager.java create mode 100644 src/java/adecWatt/control/LaunchAdecWatt.java create mode 100644 src/java/adecWatt/control/LaunchUpdatedAdecWatt.java create mode 100644 src/java/adecWatt/model/Acc.java create mode 100644 src/java/adecWatt/model/AdecWatt.java create mode 100644 src/java/adecWatt/model/Circuits.java create mode 100644 src/java/adecWatt/model/Comp.java create mode 100644 src/java/adecWatt/model/Editable.java create mode 100644 src/java/adecWatt/model/Embedded.java create mode 100644 src/java/adecWatt/model/ImageDB.java create mode 100644 src/java/adecWatt/model/InseeDB.java create mode 100644 src/java/adecWatt/model/Item.java create mode 100644 src/java/adecWatt/model/LPColor.java create mode 100644 src/java/adecWatt/model/Patch.java create mode 100644 src/java/adecWatt/model/Permanent.java create mode 100644 src/java/adecWatt/model/PermanentDB.java create mode 100644 src/java/adecWatt/model/PreviewCache.java create mode 100644 src/java/adecWatt/model/Prop.java create mode 100644 src/java/adecWatt/model/Segm.java create mode 100644 src/java/adecWatt/model/TagDB.java create mode 100644 src/java/adecWatt/model/Unit.java create mode 100644 src/java/adecWatt/model/UnitNode.java create mode 100644 src/java/adecWatt/model/User.java create mode 100644 src/java/adecWatt/model/compile create mode 100644 src/java/adecWatt/model/package-info.java create mode 100644 src/java/adecWatt/model/unit/Accessory.java create mode 100644 src/java/adecWatt/model/unit/Building.java create mode 100644 src/java/adecWatt/model/unit/Furniture.java create mode 100644 src/java/adecWatt/model/unit/Information.java create mode 100644 src/java/adecWatt/model/unit/Lightplot.java create mode 100644 src/java/adecWatt/model/unit/Line.java create mode 100644 src/java/adecWatt/model/unit/NonWorkspace.java create mode 100644 src/java/adecWatt/model/unit/Workspace.java create mode 100644 src/java/adecWatt/model/xml/XmlAcc.java create mode 100644 src/java/adecWatt/model/xml/XmlComp.java create mode 100644 src/java/adecWatt/model/xml/XmlPermanent.java create mode 100644 src/java/adecWatt/model/xml/XmlProp.java create mode 100644 src/java/adecWatt/model/xml/XmlSegm.java create mode 100644 src/java/adecWatt/model/xml/XmlUnit.java create mode 100644 src/java/adecWatt/model/xml/package-info.java create mode 100644 src/java/adecWatt/view/JAcc.java create mode 100644 src/java/adecWatt/view/JAccPopup.java create mode 100644 src/java/adecWatt/view/JAdecWatt.java create mode 100644 src/java/adecWatt/view/JAdecWattDialog.java create mode 100644 src/java/adecWatt/view/JAdecWattMenuBar.java create mode 100644 src/java/adecWatt/view/JAdecWattSearchToolBar.java create mode 100644 src/java/adecWatt/view/JAdecWattToolBar.java create mode 100644 src/java/adecWatt/view/JBuildingView.java create mode 100644 src/java/adecWatt/view/JComp.java create mode 100644 src/java/adecWatt/view/JDefLabel.java create mode 100644 src/java/adecWatt/view/JDefPropTable.java create mode 100644 src/java/adecWatt/view/JDragUnit.java create mode 100644 src/java/adecWatt/view/JEditable.java create mode 100644 src/java/adecWatt/view/JItem.java create mode 100644 src/java/adecWatt/view/JItemHandler.java create mode 100644 src/java/adecWatt/view/JItemPopup.java create mode 100644 src/java/adecWatt/view/JLightplotView.java create mode 100644 src/java/adecWatt/view/JPatch.java create mode 100644 src/java/adecWatt/view/JPreviewImp.java create mode 100644 src/java/adecWatt/view/JProp.java create mode 100644 src/java/adecWatt/view/JScrollPaneWorkspace.java create mode 100644 src/java/adecWatt/view/JSegm.java create mode 100644 src/java/adecWatt/view/JStringSet.java create mode 100644 src/java/adecWatt/view/JTransform.java create mode 100644 src/java/adecWatt/view/JUnitPopup.java create mode 100644 src/java/adecWatt/view/JUser.java create mode 100644 src/java/adecWatt/view/JWorkspaceSlidersToolBar.java create mode 100644 src/java/adecWatt/view/JWorkspaceView.java create mode 100644 src/java/adecWatt/view/JZones.java create mode 100644 src/java/adecWatt/view/PrintWorkspace.java create mode 100644 src/java/adecWatt/view/SpringUtilities.java create mode 100644 src/java/adecWatt/view/jProp/JAutoComboBox.java create mode 100644 src/java/adecWatt/view/jProp/JFilePreview.java create mode 100644 src/java/adecWatt/view/jProp/JImagePopup.java create mode 100644 src/java/adecWatt/view/jProp/JPImage.java create mode 100644 src/java/adecWatt/view/jProp/JPLabel.java create mode 100644 src/java/adecWatt/view/jProp/JPMultiValues.java create mode 100644 src/java/adecWatt/view/jProp/JPropArticle.java create mode 100644 src/java/adecWatt/view/jProp/JPropBuilding.java create mode 100644 src/java/adecWatt/view/jProp/JPropCity.java create mode 100644 src/java/adecWatt/view/jProp/JPropCube.java create mode 100644 src/java/adecWatt/view/jProp/JPropEnum.java create mode 100644 src/java/adecWatt/view/jProp/JPropGeo.java create mode 100644 src/java/adecWatt/view/jProp/JPropIcon.java create mode 100644 src/java/adecWatt/view/jProp/JPropImage.java create mode 100644 src/java/adecWatt/view/jProp/JPropNumber.java create mode 100644 src/java/adecWatt/view/jProp/JPropPreview.java create mode 100644 src/java/adecWatt/view/jProp/JPropSquare.java create mode 100644 src/java/adecWatt/view/jProp/JPropText.java create mode 100644 src/java/adecWatt/view/jProp/package-info.java create mode 100644 src/java/adecWatt/view/package-info.java create mode 100644 src/java/misc/Config.java create mode 100644 src/java/misc/RemoteUpdate.java create mode 100644 src/java/misc/Util.java create mode 100755 ws/launch-adecWatt.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9b03b3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +build +distrib +data/cache +data/export +data/local +data/log +data/server/ +!data/server/furniture/000-0052.lpt +texts/help-* +ws/ +!ws/launch-adecWatt.sh +*~ +#* +soft/UpdatedAdecWatt.jar +soft/AdecWatt.jar diff --git a/README.md b/README.md new file mode 100644 index 0000000..0ce78a9 --- /dev/null +++ b/README.md @@ -0,0 +1,48 @@ +AdecWatt +======= + +## Install + +git clone git@framagit.org:adecwatt/adecWatt.git +ant -f ant/build.xml + +## data server + +[adecwatt.parlenet.org](http://adecwatt.parlenet.org/) + +## Organization + +[ADEC 56](http://adec56.org/spip/index.php) + + +## Short MD documentation + +Two spaces at the end of a line +produces a line break. + +Text attributes _italic_, +**bold**, `monospace`. + +Horizontal rule: + +--- + +Bullet list: + + * apples + * oranges + * pears + +Numbered list: + + 1. wash + 2. rinse + 3. repeat + +A [link](http://example.com). + +![Image](Image_icon.png) + +> Markdown uses email-style > characters for blockquoting. + +Inline HTML is supported. diff --git a/ant/build.xml b/ant/build.xml new file mode 100644 index 0000000..9aaa37c --- /dev/null +++ b/ant/build.xml @@ -0,0 +1,335 @@ + + + + + + + + + + + + + Logiciel de plan de feu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AdecWatt source files]]> + http://adecwatt.parlenet.org/]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/config/AdecWatt.xml b/data/config/AdecWatt.xml new file mode 100644 index 0000000..d4eb3ff --- /dev/null +++ b/data/config/AdecWatt.xml @@ -0,0 +1,76 @@ + + + +This file is automaticaly generated by AdecWatt application at 6:18 PM on Jun 17, 2018. + +Day +North + +5 +0 + +4 +true +20180617 +1 +false +true + +false + +North + +true +[x=0,y=31] +North + +[x=0,y=31] + + +true +3 +data/log/ +[x=0,y=31] + + + +true +false +data/images/adecWatt.png + +true +false +/home/felix/perso/adecWatt56/data/export/CendresLampionsChapelleBleue.lpz +North +false + +false + + +false + +2 + + +false +true + +false + + + +true + +true + +North +[x=0,y=31] +North +true + + +true +false + +3128 + diff --git a/data/config/AdecWattUser_br_FR_breton.properties b/data/config/AdecWattUser_br_FR_breton.properties new file mode 100644 index 0000000..5447beb --- /dev/null +++ b/data/config/AdecWattUser_br_FR_breton.properties @@ -0,0 +1,102 @@ +#Produit automatiquement par BundleManager +#Mon Dec 14 15:11:27 CET 2015 +User_fluorescentTube3rgb=FR Tube fluorescent 3 RVB +User_public=FR Public +User_rightDoor=FR Porte droite +User_electrical=Tredan +User_fluorescentTube=FR Tube fluorescent +User_blueprintPos=FR Place du plan +User_pc=PC +User_insee=Kod-INSEE +User_length=Hirder +User_pcSpotFresnelLed=PC Fresnel \u00E0 Led +User_stroboscope=FR Stroboscope +User_par=PAR +User_doubleDoor=FR Porte double +User_performance=Abadenn +User_connectedTo=FR Branch\u00E9 \u00E0 +User_city=FR Commune +User_spot=FR Projecteur +User_powerSupply=FR Alimentation \u00E9lectrique +User_id=Anv implijer +User_building=Savadur +User_height=Sav +User_tubeFluorescent3rgb=FR Tuble fluorescent 3 RVB +User_comment=Displegadenn +User_oval=Ovalek +User_blueprint=Plan +User_dimmer=FR Gradateur +User_photo=Foto +User_rectangle=Reizhkogneg +User_image=Skeudenn +User_filter=FR Filtre +User_powerSocket=FR Prise de courant +User_blueprintVisibility=FR Voir le plan +User_width=Ledander +User_pcMartele=PC Martele +User_note=Notenn +User_accessory=Reizh +User_latitude=Ledenn +User_fogMachine=FR Machine fumig\u00E8ne +User_information=Titour +User_outside=FR Ext\u00E9rieur +User_btSpot=FR Basse tension +User_colorGel=Gelaenn Liv +User_blueprintSize=FR Taille du plan +User_leftDoor=FR Porte gauche +User_catwalk=FR Passerelle +User_powerPlug=FR Fiche \u00E9lectrique +User_lightplot=Plan goulo\u00F9 +User_line=FR Ligne +User_preview=FRAper\u00E7u +User_blueprintCut=Plan a-droc'h +User_pcFresnel=PC Fresnel +User_pcSpotMartele=PC Martele +User_weight=Pouez +User_hmiSpot=HMI +User_inside=FR Int\u00E9rieur +User_longitude=Hedenn +User_tubeFluorescent=FR Tube fluorescent +User_followSpot=FR Poursuite +User_decor=Dekor +User_parSpot=PAR +User_ledSpot=FR Projecteur \u00E0 LED +User_profileSpotS=FR D\u00E9coupe courte +User_simpleSocketPower=Lugell +User_pcSpotFresnel=PC Fresnel +User_pcLed=PC LED +User_profileSpotM=FR D\u00E9coupe moyenne +User_labelProp=Titour a-wel +User_profileSpotL=FR D\u00E9coupe longue +User_size=Stek +User_doublePowerSocket=FR Prise double +User_furniture=Pourviziono\u00F9 +User_color=Liv +User_horiziodeSpot=FR Horiziode +User_rot=Rotadur +User_geopos=Lec'hiadur +User_lowIcon=FR Au sol +User_simplePowerSocket=Lugell +User_shape=FR Forme +User_powerSocketFrame=FR Prise de courant +User_pos=Lec'hiadur +User_pcSpot=PC +User_door=Dor +User_ceilDoubleSocketPower=Lugell e-krec'h +User_type=Seurt +User_perch=Perchenn +User_regie=FR R\u00E9gie +User_scene=FR Sc\u00E8ne +User_address=Chomlec'h +User_profileSpot=FR D\u00E9coupe +User_video=FR Vid\u00E9o +User_poster=Skritell +User_support=Doug +User_ceilSimpleSocketPower=Lugell e-krec'h +User_name=Anv +User_zipCode=Kod-post +User_watt=Watt +User_connectedOn=FR Sur la prise +User_gelat=Gelaenn +User_horiziode=FR Horiziode +User_labelColor=Liv titour diff --git a/data/config/AdecWattUser_br_FR_gallo.properties b/data/config/AdecWattUser_br_FR_gallo.properties new file mode 100644 index 0000000..b00f8aa --- /dev/null +++ b/data/config/AdecWattUser_br_FR_gallo.properties @@ -0,0 +1,102 @@ +#Produit automatiquement par BundleManager +#Mon Dec 14 15:11:27 CET 2015 +User_fluorescentTube3rgb=FR Tube fluorescent 3 RVB +User_public=FR Public +User_rightDoor=FR Porte droite +User_electrical=Electriqe +User_fluorescentTube=FR Tube fluorescent +User_blueprintPos=FR Place du plan +User_pc=PC +User_insee=Code INSEE +User_length=Longhe\u00FBr +User_pcSpotFresnelLed=PC Fresnel \u00E0 Led +User_stroboscope=FR Stroboscope +User_par=PAR +User_doubleDoor=FR Porte double +User_performance=Perzent\u00E9zon +User_connectedTo=FR Branch\u00E9 \u00E0 +User_city=FR Commune +User_spot=Chandelle +User_powerSupply=FR Alimentation \u00E9lectrique +User_id=Identifiant +User_building=B\u00E2timents +User_height=Haote\u00FBr +User_tubeFluorescent3rgb=FR Tuble fluorescent 3 RVB +User_comment=Depllet +User_oval=Fao-rond +User_blueprint=Pllan +User_dimmer=FR Gradateur +User_photo=Foto +User_rectangle=Rectangl +User_image=imaije +User_filter=FR Filtre +User_powerSocket=FR Prise de courant +User_blueprintVisibility=FR Voir le plan +User_width=larje\u00FBr +User_pcMartele=PC Martele +User_note=Note +User_accessory=Afutiaos +User_latitude=Latitude +User_fogMachine=FR Machine fumig\u00E8ne +User_information=Ghiment +User_outside=FR Ext\u00E9rieur +User_btSpot=FR Basse tension +User_colorGel=Jelatine Coulour +User_blueprintSize=FR Taille du plan +User_leftDoor=FR Porte gauche +User_catwalk=FR Passerelle +User_powerPlug=FR Fiche \u00E9lectrique +User_lightplot=Gr\u00E9ment des chandelles +User_line=FR Ligne +User_preview=FR Aper\u00E7u +User_blueprintCut=Pllan de co\u00FBpe +User_pcFresnel=PC Fresnel +User_pcSpotMartele=PC Martele +User_weight=Pou\u00E9z +User_hmiSpot=HMI +User_inside=FR Int\u00E9rieur +User_longitude=longhe\u00FBr +User_tubeFluorescent=FR Tube fluorescent +User_followSpot=FR Poursuite +User_decor=Enterjiets +User_parSpot=PAR +User_ledSpot=FR Projecteur \u00E0 LED +User_profileSpotS=FR D\u00E9coupe courte +User_simpleSocketPower=Prinze de courant +User_pcSpotFresnel=PC Fresnel +User_pcLed=PC LED +User_profileSpotM=FR D\u00E9coupe moyenne +User_labelProp=Ghiment amontr\u00EB +User_profileSpotL=FR D\u00E9coupe longue +User_size=FR Taille +User_doublePowerSocket=FR Prise double +User_furniture=Fourniment +User_color=Coulour +User_horiziodeSpot=FR Horiziode +User_rot=Virement +User_geopos=J\u00E9yo pozition +User_lowIcon=FR Au sol +User_simplePowerSocket=Prinze de courant +User_shape=FR Forme +User_powerSocketFrame=FR Prise de courant +User_pos=Empllacement +User_pcSpot=PC +User_ceilDoubleSocketPower=Prinze de courant dan le doubl +User_door=Porte +User_type=Tipe +User_perch=Percho +User_regie=FR R\u00E9gie +User_scene=FR Sc\u00E8ne +User_address=Aderse +User_profileSpot=FR D\u00E9coupe +User_video=FR Vid\u00E9o +User_support=FR Support +User_poster=Pllacard +User_ceilSimpleSocketPower=Prinze de courant dan le doubl +User_name=Nomer +User_zipCode=Code de la post +User_watt=Watt +User_connectedOn=FR Sur la prise +User_gelat=Jelatine +User_labelColor=Coulour du ghiment +User_horiziode=FR Horiziode diff --git a/data/config/AdecWattUser_en_US.properties b/data/config/AdecWattUser_en_US.properties new file mode 100644 index 0000000..187c14f --- /dev/null +++ b/data/config/AdecWattUser_en_US.properties @@ -0,0 +1,53 @@ +#Produit automatiquement par BundleManager +#Mon Dec 14 15:11:27 CET 2015 +User_accessory=Accessory +User_address=Address +User_blueprint=Blueprint +User_blueprintCut=Blueprint cut +User_building=Building +User_catwalk=Catwalk +User_city=City +User_color=Color +User_colorGel= +User_comment=Comment +User_connectedOn=On +User_connectedTo=To +User_decor=Decor +User_dimmer=Dimmer +User_door=Door +User_doubleDoor= +User_electrical=Electrical +User_furniture=Furniture +User_gelat= +User_geopos=GeoPos +User_height=Height +User_image=Image +User_information=Information +User_insee=INSEE code +User_labelColor=Information color +User_labelProp=Showed information +User_latitude=Latitude +User_length=Length +User_lightplot=Lightplot +User_line=Line +User_longitude=Longitude +User_note=Note +User_oval=Oval +User_perch=Perche +User_performance=Performance +User_photo=Photo +User_pos=Position +User_poster=Poster +User_preview=Preview +User_rectangle=Rectangle +User_rot=Rotation +User_size=Size +User_slot=Slot +User_spot=Projector +User_support=Support +User_tubeFluorescent= +User_type=Type +User_watt=Watt +User_weight=Weight +User_width=Width +User_zipCode=Zip code diff --git a/data/config/AdecWattUser_es_ES.properties b/data/config/AdecWattUser_es_ES.properties new file mode 100644 index 0000000..4092cb7 --- /dev/null +++ b/data/config/AdecWattUser_es_ES.properties @@ -0,0 +1,122 @@ +#Produit automatiquement par BundleManager +#Sun Feb 04 17:02:12 CET 2018 +User_fluorescentTube3rgb=Tubo fluorescente 3 RVB +User_public=P\u00FAblico +User_rightDoor=Puerta a derecha +User_CendresLampionsCity=Cendres et Lampions City +User_electrical=el\u00E9ctrico +User_fluorescentTube=Tubo fluorescente +User_blueprintPos=Localizaci\u00F3n del plano +User_pc=PC +User_insee=C\u00F3digo INSEE +User_length=Largo +User_pcSpotFresnelLed=PC Fresnel LED +User_nezDeScene=Borde del escenario +User_stroboscope=Estroboscopio +User_par=PAR +User_tileSize=Escalabilidad +User_doubleDoor=Puerta dobla +User_accesQuai=Acceso al and\u00E9n +User_performance=Representaci\u00F3n +User_connectedTo=Enchufada +User_city=Municipio +User_spot=Proyector +User_powerSupply=Alimentaci\u00F3n el\u00C3\u00A9ctrica +User_id=Identificador +User_building=Inmobiliario +User_height=Altura +User_tubeFluorescent3rgb=Tubo fluorescente 3 RVB +User_comment=Comentario +User_oval=\u00D3valo +User_blueprint=Plano +User_dimmer=Graduator +User_photo=Foto +User_rectangle=Rect\u00E1ngulo +User_generalPowerSupply=Alimentaci\u00F3n general +User_image=Imagen +User_wall=Pared +User_filter=Filtro +User_powerSocket=Enchufe +User_quai=And\u00E9n +User_blueprintVisibility=Ver el plano +User_slot=Slot +User_width=Anchura +User_pcMartele=PC lentilla martelada +User_marker=Marca +User_note=Nota +User_accessory=Accesorio +User_latitude=Latitud +User_fogMachine=M\u00E1quina fum\u00EDgena +User_information=Informaci\u00F3n +User_outside=Exterior +User_milieuScene=Medio de la escenario +User_btSpot=Baja tensi\u00F3n +User_colorGel=Filtro +User_blueprintSize=Tama\u00F1o del plano +User_leftDoor=Puerta a izquierda +User_powerPlug=Enchufe +User_pendrillon=Cortina +User_catwalk=Pasarela +User_lightplot=Plano de luces +User_preview=Vistazo +User_line=L\u00EDnea +User_blueprintCut=Plano transversal +User_shower=Duchas +User_pcSpotMartele=PC lentilla martelada +User_pcFresnel=PC Fresnel +User_toilet=Ba\u00F1os +User_weight=Peso +User_hmiSpot=HMI +User_inside=Interior +User_longitude=Longitud +User_tubeFluorescent=Tubo fluorescente +User_followSpot=Foco +User_decor=Decoraci\u00F3n +User_parSpot=PAR +User_ledSpot=Proyector LED +User_profileSpotS=Foco corto +User_simpleSocketPower=Enchufe simple +User_pcSpotFresnel=PC Fresnel +User_profileSpotM=Foco medio +User_armchair=Butaca +User_pcLed=PC LED +User_profileSpotL=Foco largo +User_labelProp=Informaci\u00F3n fijada +User_size=Tama\u00F1o +User_step=Escal\u00F3n +User_doublePowerSocket=Enchufe doblo +User_furniture=Mobiliario +User_rot=Rotaci\u00F3n +User_people=Figurante +User_color=Color +User_horiziodeSpot=Horiziode +User_geopos=Geo-posici\u00F3n +User_accesLoges=Acceso a los camerinos +User_lowIcon=Al suelo +User_simplePowerSocket=Enchufe simple +User_shape=Forma +User_powerSocketFrame=Enchufe +User_pos=Posici\u00F3n +User_pcSpot=PC +User_loges=Camerinos +User_ceilDoubleSocketPower=Enchufe simple en el techo +User_door=Puerta +User_type=Tipo +User_perch=P\u00E9rtiga +User_regie=Sala de control +User_scene=Escenario +User_address=Direcci\u00F3n +User_profileSpot=Foco +User_video=Video +User_support=Soporte +User_poster=Cartel +User_ceilSimpleSocketPower=Enchufe simple en el techo +User_alluminiumBridge=Puente aluminio +User_name=Nombre +User_profileSpotXS=Mini Foco +User_zipCode=C\u00F3digo de \u00E1rea +User_watt=Watt +User_connectedOn=en el enchufe +User_gelat=Filtro +User_labelColor=Color del informaci\u00F3n +User_horiziode=horiziode diff --git a/data/config/AdecWattUser_fr_FR.properties b/data/config/AdecWattUser_fr_FR.properties new file mode 100644 index 0000000..a36d1cb --- /dev/null +++ b/data/config/AdecWattUser_fr_FR.properties @@ -0,0 +1,134 @@ +#Produit automatiquement par Bundle +#Tue Feb 13 16:40:00 CET 2018 +User_fluorescentTube3rgb=Tube fluorescent 3 RVB +User_style=Style +User_public=Public +User_rightDoor=Porte droite +User_CendresLampionsCity=Cendres et Lampions City +User_electrical=Electrique +User_fluorescentTube=Tube fluorescent +User_blueprintPos=Place du plan +User_pc=PC +User_mark=Marqueur +User_insee=Code INSEE +User_length=Longueur +User_pcSpotFresnelLed=PC Fresnel \u00E0 Led +User_nezDeScene=Nez de sc\u00E8ne +User_stroboscope=Stroboscope +User_par=PAR +User_tileSize=Tuillage +User_doubleDoor=Porte double +User_accesQuai=Acc\u00E8s quai +User_performance=Repr\u00E9sentation +User_connectedTo=Branch\u00E9 \u00E0 +User_city=Commune +User_spot=Projecteur +User_building=Immobilier +User_id=Identifiant +User_powerSupply=Alimentation \u00E9lectrique +User_height=Hauteur +User_tubeFluorescent3rgb=Tuble fluorescent 3 RVB +User_oval=Ovale +User_comment=Commentaire +User_blueprint=Plan +User_dimmer=Gradateur +User_photo=Photo +User_limite=Limite +User_rectangle=Rectangle +User_generalPowerSupply=Alimentation g\u00E9n\u00E9rale +User_image=Image +User_filter=Filtre +User_wall=Mur +User_powerSocket=Prise de courant +User_quai=Quai +User_blueprintVisibility=Voir le plan +User_width=Largeur +User_labelSize=Taille de police +User_default=Defaut +User_pcMartele=PC Martele +User_marker=Marqueur +User_note=Note +User_accessory=Accessoire +User_latitude=Latitude +User_fogMachine=Machine fumig\u00E8ne +User_information=Information +User_end=Fin +User_outside=Ext\u00E9rieur +User_milieuScene=Milieu sc\u00E8ne +User_colorGel=G\u00E9latine +User_btSpot=Basse tension +User_blueprintSize=Taille du plan +User_leftDoor=Porte gauche +User_powerPlug=Fiche \u00E9lectrique +User_catwalk=Passerelle +User_pendrillon=Pendrillon +User_lightplot=Plan de Feu +User_preview=Aper\u00E7u +User_line=Ligne +User_blueprintCut=Plan de coupe +User_shower=Douche +User_pcFresnel=PC Fresnel +User_pcSpotMartele=PC Martele +User_dimension=Cote +User_toilet=Toillet +User_weight=Poids +User_hmiSpot=HMI +User_inside=Int\u00E9rieur +User_longitude=Longitude +User_tubeFluorescent=Tube fluorescent +User_followSpot=Poursuite +User_decor=D\u00E9cor +User_parSpot=PAR +User_translation=Translation +User_ledSpot=Projecteur \u00E0 LED +User_profileSpotS=D\u00E9coupe courte +User_pcSpotFresnel=PC Fresnel +User_simpleSocketPower=Prise simple +User_angleDistance=Angle Distance +User_armchair=Fauteuil +User_pcLed=PC LED +User_profileSpotM=D\u00E9coupe moyenne +User_labelProp=Info affich\u00E9e +User_profileSpotL=D\u00E9coupe longue +User_size=Taille +User_step=Marche +User_doublePowerSocket=Prise double +User_furniture=Mobilier +User_people=Figurant +User_horiziodeSpot=Horiziode +User_color=Couleur +User_rot=Rotation +User_geopos=G\u00E9oPosition +User_accesLoges=Acc\u00E8s loges +User_lowIcon=Au sol +User_simplePowerSocket=Prise simple +User_shape=Forme +User_powerSocketFrame=Prise de courant +User_angle=Angle +User_pos=Position +User_loges=Loges +User_pcSpot=PC +User_begin=D\u00E9but +User_ceilDoubleSocketPower=Prise simple au plafond +User_door=Porte +User_type=Type +User_distance=Distance +User_perch=Perche +User_regie=R\u00E9gie +User_scene=Sc\u00E8ne +User_address=Adresse +User_profileSpot=D\u00E9coupe +User_video=Vid\u00E9o +User_support=Support +User_poster=Affiche +User_ceilSimpleSocketPower=Prise simple au plafond +User_alluminiumBridge=Pont aluminium +User_name=Nom +User_profileSpotXS=Mini D\u00E9coupe +User_zipCode=Code postal +User_watt=Watt +User_connectedOn=Sur la prise +User_arrow=Fl\u00E8che +User_gelat=Gelatine +User_labelColor=Couleur de l'info +User_horiziode=Horiziode diff --git a/data/config/AdecWatt_br_FR_breton.properties b/data/config/AdecWatt_br_FR_breton.properties new file mode 100644 index 0000000..055ce8d --- /dev/null +++ b/data/config/AdecWatt_br_FR_breton.properties @@ -0,0 +1,187 @@ +#Produit automatiquement par BundleManager +#Tue Jan 30 16:35:11 CET 2018 +LabelHelp-br_fr_breton=FR Aide en Breton +ActionTag=FR Etiquette +ActionFurnitureManager=FR Concepteur de mobilier +ActionCut=Troc\u2019ha\u00F1 +LabelHelp-br_fr_gallo=FR Aide en Gallo +LabelData=Dataenno\u00F9 +StoryAddSpinProp=Lakaat un adsked ouzhpenn +EditTitle=\ Edita\u00F1 +ActionShowItem=FR Montre +ActionRemove=Dilemel +StoryChangeBuilding=Che\u00F1ch savadur +ActionRemoveItem=Dilemel +ActionNewUnit=Nevez +EnumPropTypeEnumBuilding=Savadur +ActionSelectAll=Choaz holl +ActionCopyUnit=Duplika\u00F1 +ActionStageManager=FR R\u00E9gisseur +LabelWatt=Watt +EnumPropTypeEnumSquare=Gorread +LabelProperty=Perzh +ActionChangeRole=FR Changer de r\u00F4le... +ActionHorizontalRight=Steuda\u00F1 a-zehou +ActionVerticalDistrib=Ingali\u00F1 (a-serzh) +StoryRemoveLabels=FR Supprime \u00E9tiquette +MessageQuitJAdecWatt=Dilezel ar c\u2019hemmo\u00F9 ? +ActionLinguist=FR Linguiste +ChangeRoleTitle=\ Ra vo an Nerzh ganit \! +EnumPropTypeEnumGeo=Lec\u2019hia\u00F1 +ActionDataManager=FR Gardien du serveur +LabelLine=FR Ligne +YodaTitle=\ Yoda +MessageGiveSpace=FR Distance (homog\u00E8ne par d\u00E9faut) +ActionCircuit=FR Affiche les circuits +ActionExportPDF=FR Exporte en PDF +ActionPatch=FR "Patch" Ligne/Circuit +ActionMandatory=Ranket +MessageConnectionSucceeded=FR Connexion r\u00E9ussie +StoryPasteItem=Pega\u00F1 elfenn +LabelHelp-fr_fr=FR Aide en fran\u00E7ais +LabelSoft=Poellad +ActionHorizontalLeft=Steuda\u00F1 a-gleiz +LabelCircuit=FR Circuit +MessageChangeRole=Dont da merer +LabelDST=Editor +ActionYoda=Yoda +ActionVerticalBottom=Steuda\u00F1 an trao\u00F1 +ManualTitle=\ Ar dornlevr AdecWatt +ActionExport=FR Exporter... +StoryResizeComp=FR Dimensionne composant +LabelIcons=FR Icons +ActionTransformItem=Troi\u00F1 +LabelPassword=FR Mot de passe +StoryTransform=Treuzfurmadur +ActionAddPatch=FR Ajoute le "Patch" Ligne/Circuit +ActionModifyAcc=Kemma\u00F1 +StoryChangeLabels=Che\u00F1ch tikedenn +ActionPaste=Pega\u00F1 +ActionHidden=Kuzhet +StoryRemoveAcc=FR Supprime acc\u00E9ssoire +ActionErase=Disfasa\u00F1 +EnumPropTypeEnumIcon=Ikon +ActionRemoveUnit=Dilemel +ActionNoFilter=Ignore +ActionSetEnum=Fiksa\u00F1 ar choazio\u00F9 +ActionRemoveAcc=Dilemel +TransformTitle=\ Treuzfurmadur +LabelId=FR Identifiant +ActionFilter=Filtre +ActionImport=Emporzhia\u00F1... +EnumPropTypeEnumEnum=Choazio\u00F9 +LabelShortcut=FR Court-circuit +MessageWelcome=Degemer mat \!\nBremanaat ar poellad. +LabelHelp-en_us=FR Aide en anglais +EnumPropTypeEnumNumber=Niver +ActionAdd=Lakaat ouzhpenn +ActionLandscape=FR Paysage +ActionCopy=Kopia\u00F1 +ActionConnection=FR Connexion +LabelCircuitless=FR Sans circuit +ActionDataStructuresManager=FR Concepteur de donn\u00E9es +LabelTest=FR Test +StoryMoveItem=Diblasamant +StoryRemoveProp=Dilemel tikedenn +ActionWizard=FR Tu ne veux pas savoir \! +ActionClose=Serri\u00F1 +ActionModifyItem=Kemma\u00F1 +ActionPageSetup=Reolia\u00F1 ar moullerez... +ActionLock=Morailh +ActionDisplayItem=Diskouez +StoryLinkItem=FR Lie composant +StoryConnectAcc=FR Connecte acc\u00E9ssoire +SelectImageTitle=\ Choaz ur skeudenn +LabelLogin=FR Nom de connexion +SliderTitle=\ FR Echelle & Fondu +ActionPrint=FR Imprimer... +ActionLocalized=Etrebroadel +ActionServerName=FR Nom du server +StoryAddAcc=FR Ajoute acc\u00E9ssoire +ActionCrossfades=FR Fondu +StoryAddProp=Ajout propri\u00E9t\u00E9 +ActionTurnLeft=FR Tourne \u00E0 gauche +EnumPropTypeEnumCity=FR Commune +EnumPropTypeEnumArticle=FR Article +LabelType=Seurt +LabelImages=FR Images +LayoutTitle=FR Mise en page +ActionRemoveZone=FR Supprime la zone +LabelExportFilter=Document (.lpz) +StoryOrderedProp=FR R\u00E9organisation +ActionTransformUnit=Troi\u00F1 +ActionRemoveImage=Dilemel +ActionAddZone=FR ajoute une zone +StoryChangeSpin=Che\u00F1ch adsked +StoryLinkAcc=FR Lie acc\u00E9ssoire +StorySelectItem=FR Selectionne composant +ActionAddPoster=FR Ajoute l\u2019affiche +StoryChangeParent=FR Change de mod\u00E8le +StoryChangeEnum=Che\u00F1ch niveridigezh +ActionValidate=FR Pr\u00E9pare au t\u00E9l\u00E9verssement +StoryRemoveEnum=FR Supprime \u00E9num\u00E9ration +MessageConnectionFailed=FR Echecs de connexion +ActionRenameUnit=FR Renomer +ActionRestart=Adkregi\u00F1 +ActionNomouse=FR Modification sans souris +ActionHorizontalCenter=Steuda\u00F1 e kreiz +ActionCloseAll=Serri\u00F1 holl +ActionSearch=FR Recherche +ActionScale=FR Echelle +ActionManual=Dornlevr implij... +StoryChangeType=Che\u00F1ch seurt +EnumPropTypeEnumImage=Skeudenn +ActionTurnRight=FR Tourne \u00E0 droite +LabelHelp-images=FR Images d\u2019aide +PlacementTitle=\ Arenkamant +LabelSRC=FR Mod\u00E8le +ActionTestedServer=FR version de test +StoryClearProp=Dilemel perzh +ActionCopyItem=Duplika\u00F1 +ActionUnchange=FR Pas de changement +StoryRemoveItem=FR Supprime composant +EnumPropTypeEnumPreview=FR Aper\u00E7u +ActionArchitect=FR Architecte +ActionVisitor=FR Visiteur +LabelHelp-es_es=FR Aide en espagnol +StoryLinkEmb=FR Lie composant/acc\u00E9ssoire +StoryRotItem=Troi\u00F1 +ActionModifyUnit=Kemma\u00F1 +ActionRemoveWorkspace=Dilemel +MessagePromoteConfirmation=FR Voulez-vous pr\u00E9parer le t\u00E9l\u00E9versement de l\u2019\u00E9l\u00E9ment \: {0} ({1}) ? +ActionVerticalTop=Steuda\u00F1 e-krec\u2019h +ActionAddProp=Lakaat ur perzh ouzhpenn +ActionVerticalCenter=Steuda\u00F1 e kreiz +ActionDisplayUnit=Diskouez +LabelHelpOSM=FR D\u00E9placement \: click droit | Zoom \: double click gauche ou molette +LabelUnplug=FR Non connect\u00E9 +StoryCloneItem=FR Clone composant +StoryAddItem=Lakaat ur komponant ouzhpenn +ActionTransformAcc=Troi\u00F1 +MessageMixName=FR plusieurs noms +ActionHorizontalSpace=Lakaat spas (a-led) +StoryChangeModifiers=Che\u00F1ch perzhegezh +LabelUnits=FR Composants +ActionPortrait=FR Portrait +ActionDisplayAcc=Diskouez +ActionHttpServer=FR Protocole HTTP +ActionLocalServer=FR Server web local +AdecWattStillRunningTitle=\ Kemmo\u00F9 nann-enrollet +StoryChangeName=Che\u00F1ch anv +AdecWattTitle=\ AdecWatt (Stalier \: {0} / Orjalenn \: {1}) +MessageMixId=FR plusieurs ref\u00E9rences +SearchTitle=\ FR Recherche +ActionHorizontalDistrib=Ingali\u00F1 (a-led) +StoryChangeValue=Disfasa\u00F1 ar talvoud +ActionHorizontalSpin=Eilpenn horizontalek +ActionChangeImage=Kemm +ActionVerticalSpace=Lakaat spas (a-serzh) +StoryEdit=Che\u00F1ch +MessageRemoveConfirmation=Dilemel an elfenn \: {0} ({1}) ? +MessageGiveName=Anv nevez \: +LabelImageFilter=Skeudenn (.gif .jpg .jpeg .png .tif .tiff .bmp) +ActionPromoteUnit=FR Pr\u00EAt au t\u00E9l\u00E9versement +EnumPropTypeEnumCube=Volum +ActionPlotCity=FR Place le centre ville +EnumPropTypeEnumText=FR Texte +ActionHideItem=FR Cache diff --git a/data/config/AdecWatt_br_FR_gallo.properties b/data/config/AdecWatt_br_FR_gallo.properties new file mode 100644 index 0000000..388ffbe --- /dev/null +++ b/data/config/AdecWatt_br_FR_gallo.properties @@ -0,0 +1,190 @@ +#Produit automatiquement par BundleManager +#Tue Jan 30 16:35:11 CET 2018 +LabelHelp-br_fr_breton=FR Aide en Breton +ActionTag=FR Etiquette +ActionFurnitureManager=FR Concepteur de mobilier +ActionCut=Cae\u00FBper +LabelHelp-br_fr_gallo=FR Aide en Gallo +LabelData=Don\u00E9es +StoryAddSpinProp=Revoure +EditTitle=\ Bani +ActionShowItem=FR Montre +ActionRemove=Aboli +StoryChangeBuilding=Chanjerie b\u00E2timents +ActionRemoveItem=Aboli +ActionNewUnit=Nouviao +EnumPropTypeEnumBuilding=B\u00E2timents +ActionSelectAll=Tout prendr +ActionCopyUnit=Fere des aotants +ActionStageManager=FR R\u00E9gisseur +LabelWatt=Watt +EnumPropTypeEnumSquare=Grandou +LabelProperty=Merche +ActionChangeRole=FR Changer de r\u00F4le... +ActionHorizontalRight=Enligner de la drete +ActionVerticalDistrib=D\u00E9roler +StoryRemoveLabels=Tirer l\u2019etiqhette +MessageQuitJAdecWatt=Voul\u2019ous mettr a bas tous les chanjements +ActionLinguist=FR Linguiste +ChangeRoleTitle=\ Qe la force seije qant\u00EB tai +EnumPropTypeEnumGeo=Empllacement +ActionDataManager=FR Gardien du serveur +LabelLine=FR Ligne +LabelHelp-gallo=FR Aide en Gallo +YodaTitle=\ Yoda +MessageGiveSpace=FR Distance (homog\u00E8ne par d\u00E9faut) +ActionCircuit=FR Affiche les circuits +ActionExportPDF=FR Exporte en PDF +ActionPatch=FR "Patch" Ligne/Circuit +ActionMandatory=Oblij\u00EB +MessageConnectionSucceeded=FR Connexion r\u00E9ussie +StoryPasteItem=Paisse amare +LabelSoft=Lojici\u00EB +ActionHorizontalLeft=Enligner de la gaoche +LabelCircuit=FR Circuit +MessageChangeRole=Deveni menou +LabelDST=Banissou +ActionYoda=Yoda +ActionVerticalBottom=Enligner d\u2019abas +ManualTitle=\ Ghide du gr\u00E9ment des chandelles +ActionExport=FR Exporter... +StoryResizeComp=FR Dimensionne composant +LabelIcons=FR Icons +ActionTransformItem=Amorfozer +LabelPassword=FR Mot de passe +StoryTransform=Amorfoze +ActionAddPatch=FR Ajoute le "Patch" Ligne/Circuit +ActionModifyAcc=Chanjer +StoryChangeLabels=Chanjerie etiqhette +ActionPaste=Paisser +ActionHidden=Qhut\u00EB +StoryRemoveAcc=FR Supprime acc\u00E9ssoire +LabelCircuiless= +ActionErase=Aboli +EnumPropTypeEnumIcon=Icon +ActionRemoveUnit=Aboli +ActionNoFilter=Ignore +ActionSetEnum=Fet les chou\u00E8z +ActionRemoveAcc=Aboli +TransformTitle=\ Amorfoze +LabelId=FR Identifiant +ActionFilter=Filtre +ActionImport=Mettr a veni +EnumPropTypeEnumEnum=Chou\u00E8z +LabelShortcut=FR Court-circuit +MessageWelcome=Bonevenue Cmencer par abuter le lojici\u00EB\n +EnumPropTypeEnumNumber=Nombr +ActionAdd=Met ao bout +ActionLandscape=FR Paysage +ActionCopy=Fere un doubl +ActionConnection=FR Connexion +LabelCircuitless=FR Sans circuit +ActionDataStructuresManager=FR Concepteur de donn\u00E9es +LabelTest=FR Test +StoryMoveItem=Depllacer +StoryRemoveProp=Tirer une merche +ActionWizard=FR Tu ne veux pas savoir \! +ActionClose=Cllore +ActionModifyItem=Chanjer +ActionPageSetup=Param\u00E8trer la moulou\u00E8re +ActionLock=Crouille +LabelHelp-fr=FR Aide en fran\u00E7ais +ActionDisplayItem=Amontr\u00EB +StoryLinkItem=FR Lie composant +StoryConnectAcc=FR Connecte acc\u00E9ssoire +SelectImageTitle=\ Elouter une imaije +LabelLogin=FR Nom de connexion +SliderTitle=\ FR Echelle & Fondu +ActionPrint=FR Imprimer... +ActionLocalized=Langaije +ActionServerName=FR Nom du server +StoryAddAcc=FR Ajouter accessoire +ActionCrossfades=FR Fondu +StoryAddProp=Ajouter une merche +ActionTurnLeft=FR Tourne \u00E0 gauche +EnumPropTypeEnumCity=FR Commune +EnumPropTypeEnumArticle=FR Article +LabelType=Tipe +LabelImages=FR Images +LayoutTitle=FR Mise en page +ActionRemoveZone=FR Supprime la zone +LabelExportFilter=FR Document (.lpz) +StoryOrderedProp=FR R\u00E9organisation +LabelHelp-en= +ActionTransformUnit=Amorfozer +ActionRemoveImage=Aboli +ActionAddZone=FR ajoute une zone +StoryChangeSpin=Chanjerie revoure +StoryLinkAcc=FR Lie acc\u00E9ssoire +StorySelectItem=FR Selectionne composant +ActionAddPoster=FR Ajoute l\u2019affiche +StoryChangeParent=FR Change de mod\u00E8le +StoryChangeEnum=Chanjerie d\u00E9bornement +ActionValidate=FR Pr\u00E9pare au t\u00E9l\u00E9verssement +StoryRemoveEnum=FR Supprime \u00E9num\u00E9ration +MessageConnectionFailed=FR Echecs de connexion +ActionRenameUnit=FR Renomer +ActionRestart=Erpaisser tout +ActionNomouse=FR Modification sans souris +ActionHorizontalCenter=Enligner du mitan +ActionCloseAll=Cllore tout +ActionSearch=FR Recherche +ActionScale=FR Echelle +ActionManual=Ghide d\u2019uzaije... +StoryChangeType=Chanje de tipe +EnumPropTypeEnumImage=Imaije +ActionTurnRight=FR Tourne \u00E0 droite +LabelHelp-images=FR Images d\u2019aide +PlacementTitle=\ Pllacement +LabelSRC=FR Mod\u00E8le +ActionTestedServer=FR version de test +StoryClearProp=Aboli une merche +ActionCopyItem=Fere des aotants +ActionUnchange=FR Pas de changement +StoryRemoveItem=FR Supprime composant +EnumPropTypeEnumPreview=FR Aper\u00E7u +ActionVisitor=FR Visiteur +ActionArchitect=FR Architecte +LabelHelp-es_es=FR Aide en espagnol +StoryLinkEmb=FR Lie composant/acc\u00E9ssoire +StoryRotItem=Vire +ActionModifyUnit=Chanjer +ActionRemoveWorkspace=Aboli +MessagePromoteConfirmation=FR Voulez-vous pr\u00E9parer le t\u00E9l\u00E9versement de l\u2019\u00E9l\u00E9ment \: {0} ({1}) ? +ActionVerticalTop=Enligner du haot +ActionAddProp=Mettr en pus une merche +ActionVerticalCenter=Enligner du mitan +ActionDisplayUnit=Amontr\u00EB +LabelHelpOSM=Depllacement \: clic de drete par de\u00FBz fais |\u00A0Zoum\u00A0\: (double) clic\u00A0ou ben rouellette +LabelUnplug=FR Non connect\u00E9 +StoryCloneItem=FR Clone composant +StoryAddItem=Ajouter un morc\u00E8 +ActionTransformAcc=Amorfozer +MessageMixName=FR plusieurs noms +ActionHorizontalSpace=Eg\u00E2iller +StoryChangeModifiers=Chanjerie qalification +LabelUnits=FR Composants +ActionPortrait=FR Portrait +ActionDisplayAcc=Amontr\u00EB +ActionHttpServer=FR Protocole HTTP +ActionLocalServer=FR Server web local +AdecWattStillRunningTitle=\ Chanjements pas encrouill\u00EBs +StoryChangeName=Chanjerie de nom +AdecWattTitle=Gr\u00E9ment des chandelles (Atelier \: {0} / Fil \: {1}) +MessageMixId=FR plusieurs ref\u00E9rences +SearchTitle=\ FR Recherche +ActionHorizontalDistrib=D\u00E9roler +StoryChangeValue=Change de valeur +ActionHorizontalSpin=D\u00E9tourner orizonta +ActionChangeImage=Chanjer +ActionVerticalSpace=Eg\u00E2iller +StoryEdit=Chanjements +MessageRemoveConfirmation=Voul\u2019ous mettr a bas l\u2019element \: {0} ({1}) ? +MessageGiveName=Ernomer \: +LabelImageFilter=Imaije (.gif .jpg .jpeg .png .tif .tiff .bmp) +ActionPromoteUnit=FR Pr\u00EAt au t\u00E9l\u00E9versement +LabelHelp-breton= +EnumPropTypeEnumCube=Qhubaije +ActionPlotCity=FR Place le centre ville +EnumPropTypeEnumText=FR Texte +ActionHideItem=FR Cache diff --git a/data/config/AdecWatt_en_US.properties b/data/config/AdecWatt_en_US.properties new file mode 100644 index 0000000..e7114ca --- /dev/null +++ b/data/config/AdecWatt_en_US.properties @@ -0,0 +1,197 @@ +#Produit automatiquement par BundleManager +#Tue Jan 30 16:35:11 CET 2018 +LabelHelp-br_fr_breton=Breton Help +ActionTag=Tag +ActionFurnitureManager=Funiture manager +ActionCut=Cut +LabelHelp-br_fr_gallo=Gallo Help +LabelData=Data +StoryAddSpinProp=Add spin +EditTitle=\ Edit +ActionShowItem=Show +ActionRemove=Remove +StoryChangeBuilding=Change building +ActionRemoveItem=Remove +ActionNewUnit=New +EnumPropTypeEnumBuilding=Building +ActionSelectAll=Select all +ActionCopyUnit=Duplicated +ActionStageManager=Stage manager +LabelWatt=Watt +EnumPropTypeEnumSquare=Square +LabelProperty=Property +ActionChangeRole=Change role... +ActionHorizontalRight=Right align +ActionVerticalDistrib=Distribute (vertical) +StoryRemoveLabels=Remove label +MessageQuitJAdecWatt=Forget all changes? +ActionLinguist=Linguist +ChangeRoleTitle=\ The force will be with you\! +EnumPropTypeEnumGeo=Localization +ActionDataManager=Data manager +LabelLine=Line +YodaTitle=\ Yoda +MessageGiveSpace=Distance (default homogeneous) +ActionCircuit=Show the circuits +ActionExportPDF=PDF Export +ActionPatch=Patch Line/Circuit +ActionMandatory=Mandatory +MessageConnectionSucceeded=Connection succeeded +StoryPasteItem=Paste componant +LabelHelp-fr_fr=French Help +LabelSoft=Software +ActionHorizontalLeft=Left align +LabelCircuit=Circuit +MessageChangeRole="Power comes with responsability."\n\nAre-you ready? +LabelDST=Editor +ActionYoda=Yoda +ActionVerticalBottom=Bottom align +ManualTitle=\ The AdecWatt manual +ActionExport=Export... +StoryResizeComp=Resize composant +LabelIcons=Icons +ActionTransformItem=Transform +LabelPassword=Password +StoryTransform=Transform +ActionAddPatch=Add patch +ActionModifyAcc=Modify +StoryChangeLabels=Change label +ActionPaste=Paste +ActionHidden=Hidden +StoryRemoveAcc=Remove accessory +ActionErase=Erase +EnumPropTypeEnumIcon=Icon +ActionRemoveUnit=Remove +ActionNoFilter=Ignore +ActionSetEnum=Set choice +ActionRemoveAcc=Remove +TransformTitle=\ Transforme +LabelId=Identifier +ActionFilter=Filter +ActionImport=Import... +EnumPropTypeEnumEnum=Choice +LabelShortcut=Shortcut +MessageWelcome=Welcome\!\nStart with software update procedure\n +LabelHelp-en_us=Help +EnumPropTypeEnumNumber=Number +ActionAdd=Add +ActionLandscape=Landscape +ActionCopy=Copy +ActionConnection=Connection +LabelCircuitless=Ciruitless +ActionDataStructuresManager=Data structures manager +LabelTest=Test +StoryMoveItem=Move componant +StoryRemoveProp=Remove property +ActionWizard=You do want to not know\! +ActionClose=Close +ActionModifyItem=Modify +ActionPageSetup=Page setup... +ActionLock=Lock +ActionDisplayItem=Display +StoryLinkItem=Link componant +StoryConnectAcc=Connect accessory +SelectImageTitle=\ Select an image +LabelLogin=Login +SliderTitle=\ Scale & Crossfades +ActionPrint=Print... +ActionLocalized=Localization +ActionServerName=Server name +StoryAddAcc=Add accessory +ActionCrossfades=Crossfades +StoryAddProp=Add propri\u00E9t\u00E9 +ActionTurnLeft=Turn left +EnumPropTypeEnumCity=City +EnumPropTypeEnumArticle=Article +LabelType=Type +LabelImages=Images +LayoutTitle=Layout +ActionRemoveZone=Remove zone +LabelExportFilter=Document (.lpz) +StoryOrderedProp=Ordered +ActionTransformUnit=Transform +ActionRemoveImage=Remove +ActionAddZone=Add zone +StoryChangeSpin=Change spin +StoryLinkAcc=Link accessory +StorySelectItem=Select composant +ActionAddPoster=Add poster +StoryChangeParent=change parent +StoryChangeEnum=Change enum +ActionValidate=Ready to upload +StoryRemoveEnum=Remove enum +MessageConnectionFailed=Connection failed +ActionRenameUnit=Rename +ActionRestart=Restart all +ActionNomouse=Change without mouse +ActionHorizontalCenter=Center align +ActionCloseAll=Close all +ActionSearch=Search +ActionScale=Scale +ActionManual=User guide... +StoryChangeType=CHange type +EnumPropTypeEnumImage=Image +ActionTurnRight=Turn right +LabelHelp-images=Help Images +PlacementTitle=\ Placement +LabelSRC=Template +ActionTestedServer=tested version +StoryClearProp=Clear value +ActionCopyItem=Duplicated +ActionUnchange=No modification +StoryRemoveItem=Remove componant +EnumPropTypeEnumPreview=Preview +ActionArchitect=Architect +ActionVisitor=Visitor +LabelHelp-es_es=Spain Help +StoryLinkEmb=Link componant/accessory +StoryRotItem=Rotation +ActionModifyUnit=Modify +ActionRemoveWorkspace=Remove +MessagePromoteConfirmation=Do-you want to prepared uploading of element\: {0} (in {1})? +ActionVerticalTop=Top align +ActionAddProp=Add property +ActionVerticalCenter=Middle align +ActionDisplayUnit=Display +LabelHelpOSM=Move\: right mouse button | Zoom\: left double click or mouse wheel +LabelUnplug=Unplug +StoryCloneItem=Clone componant +StoryAddItem=Add componant +ActionTransformAcc=Transform +MessageMixName=mix name +ActionHorizontalSpace=Space (horizontal) +StoryChangeModifiers=Change modifier +LabelUnits=Components +ActionPortrait=Portrait +ActionDisplayAcc=Display +ActionHttpServer=Http protocol +ActionLocalServer=Local web server +AdecWattStillRunningTitle=\ Unrecorded changes +StoryChangeName=Change name +AdecWattTitle=\ AdecWatt (Workspace \: {0} / Thread \: {1}) +MessageMixId=mix id +SearchTitle=\ Search +ActionHorizontalDistrib=Distribute (horizontal) +StoryChangeValue=Change value +ActionHorizontalSpin=Horizontal spin +ActionChangeImage=Change +ActionVerticalSpace=Space (vertical) +StoryEdit=Edit +MessageRemoveConfirmation=Do-you want to remove the element\: {0} (in {1})? +MessageGiveName=New name\: +LabelImageFilter=Image (.gif .jpg .jpeg .png .tif .tiff .bmp) +ActionPromoteUnit=Ready for upload +EnumPropTypeEnumCube=Volume +ActionPlotCity=Move to city +EnumPropTypeEnumText=Text +ActionHideItem=Hide +ActionBoundGlue=Bounding glue +ActionGridGlue=Grid glue +ActionHandleGlue=Handler glue +ActionMagnetPolicies=Magnet Policies... +LabelBoundGlue=Bounding glue +LabelGridGlue=Grid glue +LabelHandleGlue=Handler glue +MagnetPoliciesTitle=\ Magnet Policies +LabelInSegmentGlue=Only border (no lines) +ActionInSegmentGlue=Only border (no lines) diff --git a/data/config/AdecWatt_es_ES.properties b/data/config/AdecWatt_es_ES.properties new file mode 100644 index 0000000..d4f3b10 --- /dev/null +++ b/data/config/AdecWatt_es_ES.properties @@ -0,0 +1,255 @@ +#Produit automatiquement par BundleManager +#Sun Feb 04 16:52:03 CET 2018 +AboutTitle=A prop\u00F3sito de +ActionAbout=A prop\u00F3sito de +ActionAdd=A\u00F1ade +ActionAddPatch=A\u00F1ade el "Patch" L\u00EDn\u00E9a/circuito +ActionAddPoster=A\u00F1ade el cartel +ActionAddProp=A\u00F1ade una propiedad +ActionAddZone=A\u00F1ade una \u00E1rea +ActionArchitect=Arquitecto +ActionBugReport=Depuraci\u00F3n +ActionChangeImage=Cambiar +ActionChangeRole=Cambiar de funci\u00F3n +ActionCircuit=Muestra los circuitos +ActionClear=Borrar +ActionClose=Cerrar +ActionCloseAll=Cerrar todos +ActionConnection=Conexi\u00F3n +ActionCopy=Copiar +ActionCopyItem=Duplicar +ActionCopyUnit=Duplicar +ActionCrossfades=Mezclar +ActionCut=Cortar +ActionDataManager=Guardi\u00E1n de los datos +ActionDataStructuresManager=Dise\u00F1ador de los datos +ActionDetails=Detalles +ActionDisplayAcc=Fijar +ActionDisplayItem=Fijar +ActionDisplayUnit=Fijar +ActionDown=Abajo +ActionDownload=Descarga +ActionEmpty=Nuevo +ActionErase=Borrar +ActionExport=Exportar +ActionExportPDF=Exporta en PDF +ActionFilter=Filtra +ActionForcePack=Ajusta la ventana +ActionFurnitureManager=Dise\u00F1ador de mobiliario +ActionHidden=Escondido +ActionHideItem=Esconde +ActionHorizontalCenter=Alinear en el centro +ActionHorizontalDistrib=Repartir (horizontal) +ActionHorizontalLeft=Alinear a la izquierda +ActionHorizontalRight=Alinear a la derecha +ActionHorizontalSpace=Espaciar (horizontal) +ActionHorizontalSpin=Volteada horizontalmente +ActionHttpServer=Protocolo HTTP +ActionImport=Importar +ActionJConsole=Consola +ActionLandscape=Orientaci\u00F3n de p\u00E1gina horizontal +ActionLicence=Licencia +ActionLinguist=Ling\u00FCista +ActionLoadMessage=Carga el mensaje \u2026 +ActionLocalRemove=Limpiar los archives locales +ActionLocalServer=Servidor Web Local +ActionLocale=Idioma +ActionLocalized=Internacionalizaci\u00F3n +ActionLock=Cerrojo +ActionMandatory=Obligatorio +ActionManual=Manual de utilizaci\u00F3n +ActionManualConfigProxy=especificar manualmente las opciones del proxy +ActionModifyAcc=Modificar +ActionModifyItem=Modificar +ActionModifyUnit=Modificar +ActionNewUnit=Nuevo +ActionNoFilter=Ignora +ActionNoProxy=No utilizar proxy +ActionNomouse=Modificaci\u00F3n sin el rat\u00F3n +ActionOnline=Puesta en l\u00EDnea +ActionOpen=Abrir +ActionPageSetup=Definir par\u00E1metros la impresora +ActionPaste=Pegar +ActionPatch="Patch" L\u00EDnea / Circuito +ActionPlotCity=Se sit\u00FAa sobre el centro ciudad +ActionPortrait=Orientaci\u00F3n de p\u00E1gina vertical +ActionPrint=Imprimir +ActionPromoteUnit=De pr\u00E9stamo a la carga +ActionQuit=Dejar +ActionRedo=Repetir +ActionRemoteRemove=Limpiar los archivos remotos +ActionRemove=Suprimir +ActionRemoveAcc=Suprimir +ActionRemoveImage=Suprimir +ActionRemoveItem=Suprimir +ActionRemoveUnit=Suprimir +ActionRemoveWorkspace=Suprimir +ActionRemoveZone=Suprime la \u00E1rea +ActionRenameUnit=Renombrar +ActionRestart=Comenzar de nuevo +ActionSave=Salveguardar +ActionSaveAll=Salveguardar todo +ActionSaveAs=Salveguardar como +ActionScale=Escala +ActionSearch=B\u00FAsqueda +ActionSelectAll=Seleccionar todo +ActionServerName=Nombre del servidor +ActionSetEnum=Establece las opciones +ActionSetProxy=Configuraci\u00F3n de red +ActionShowItem=Muestra +ActionStageManager=Administrador +ActionSystemConfigProxy=Utilizar la configuraci\u00F3n Java VM del proxy +ActionTag=Etiqueta +ActionTestedServer=versi\u00F3n de prueba +ActionToolBarProfil=Gesti\u00F3n de las barras de herramientas... +ActionTransformAcc=Transformar +ActionTransformItem=Transformar +ActionTransformUnit=Transformar +ActionTurnLeft=Gira a la izquierda +ActionTurnRight=Gira a la derecha +ActionUnchange=no modificaci\u00F3n +ActionUndo=Deshacer +ActionUp=Arriba +ActionUpdate=Actualizaci\u00F3n +ActionUpload=Cargar +ActionValidate=De ppr\u00E9stamo a la carga +ActionVerticalBottom=Alinear abajo +ActionVerticalCenter=Alinear al centro +ActionVerticalDistrib=Repartir (vertical) +ActionVerticalSpace=Espaciar (vertical) +ActionVerticalTop=Alinear arriba +ActionVisitor=Visitante +ActionWizard=No quieres saber\! +ActionYoda=Yoda +AdecWattStillRunningTitle=\ Cambios sin guardar +AdecWattTitle=\ AdecWatt (Esudio \: {0} /Hilo\: {1}) +AlreadyRegistredTool=Barra de herramientas {0} ya registrada en {1} \! +ChangeLocaleTitle=\ Cambio de idioma +ChangeRoleTitle=\ Qu\u00E9 la fuerza sea contigo\! +DetailsTitle=Detalles +DownloadTitle=Descarga de las actualizaciones +DumpTitle=Elecci\u00F3n de un archivo dump +EditTitle=Editar +EnumCheckPeriodDay=D\u00EDa +EnumCheckPeriodMonth=Mes +EnumCheckPeriodNoCheck=Nunca +EnumCheckPeriodWeek=Semana +EnumCheckPeriodYear=A\u00F1o +EnumPropTypeEnumArticle=Art\u00CDculo +EnumPropTypeEnumBuilding=Inmobiliario +EnumPropTypeEnumCity=Municipio +EnumPropTypeEnumCube=Volumen +EnumPropTypeEnumEnum=Selecci\u00F3n +EnumPropTypeEnumGeo=Localizaci\u00F3n +EnumPropTypeEnumIcon=Icono +EnumPropTypeEnumImage=Imagen +EnumPropTypeEnumNumber=N\u00FAmero +EnumPropTypeEnumPreview=Vistazo +EnumPropTypeEnumSquare=Superficie +EnumPropTypeEnumText=Texto +FileTitle=Archivo +HelpTitle=Ayuda +JConsoleTitle=Consola Java +LabelCheckingPeriod=Veriverificaci\u00F3n de las actualizaciones +LabelCircuit=Circuito +LabelCircuitless=Sin circuito +LabelDST=Editor +LabelData=Datos +LabelDownload=Descargado +LabelDumpFilter=Archivo Log +LabelExportFilter=Documento (.lpz) +LabelFileName=Archivo +LabelHelp-br_fr_breton=Ayuda en Bret\u00F3n +LabelHelp-br_fr_gallo=Ayuda en Gallo +LabelHelp-en_us=Ayuda en Ingl\u00E9s +LabelHelp-fr_fr=Ayuda en Franc\u00E9s +LabelHelp-images=Imagenes de la Ayuda +LabelHelpOSM=Desplazamiento\: clic derecho | Zoom\: Dobla clic izquierdo o rueda del rat\u00C3\u00B3n +LabelHost=Servidor proxy +LabelIcons=Iconos +LabelId=Identificar +LabelImageFilter=Imagen (.gif .jpg .jpeg .png .tif .tiff .bmp) +LabelImages=Imagenes +LabelLine=L\u00EDnea +LabelLocal=Local +LabelLocalDate=Data local +LabelLocalSize=Tama\u00F1o local +LabelLogin=Nombre de conexi\u00F3n +LabelPassword=Contrase\u00F1a +LabelPort=Puerto de proxy +LabelProperty=Propiedad +LabelRemote=Remoto +LabelRemoteDate=Data Remoto +LabelRemoteSize=Tama\u00F1o Remoto +LabelRemove=Borrado +LabelSRC=M\u00F3dulo +LabelShortcut=Cortocircuito +LabelSoft=Software +LabelTest=Test +LabelToolBarNamed=Barra de herramientas +LabelToolBarShowed=Ense\u00F1a +LabelType=Tipo +LabelUnits=Componente +LabelUnplug=No conectado +LabelUpload=Cargado +LabelWatt=Watt +LayoutTitle=\ Dise\u00F1o +LicenceTitle=\ Licencia +LocalizedTitle=\ Internacionalizaci\u00F3n +ManualTitle=\ Manual AdecWatt +MessageChangeRole="Los grandes poderes imponen una gran sabidur\u00EDa."\\n\\n "\u00BF Est\u00E1s listo?" +MessageChooseLocale=Selecciona unidioma +MessageConnectionFailed=Inicio de sesi\u00F3n fallido +MessageConnectionSucceeded=cconexi\u00F3n exitosa +MessageDownload=Descarga +MessageGiveName=Nuevo nombre\u00A0\: +MessageGiveSpace=Distancia (hohomog\u00E9neo por defecto) +MessageMixId=Varias referencias +MessageMixName=varios nombres +MessagePromoteConfirmation=\u00BF Quiere preparar la carga del elemento\: {0} (in {1})? +MessageQuitJAdecWatt=\u00BF Quiere abandonar todas las modificaciones? +MessageRemoveConfirmation=\u00BF Quiere suprimir el elemento\: {0} (in {1})? +MessageUpload=Carga +MessageUploadCompleted={0,choice,0\# Ningunacarga|0< {0} archivos cargados} +MessageWelcome=\u00A1 Bienvenida\! Comience con la actualizaci\u00F3n del software Para realizar modificaciones, habr\u00E1 que cambiar de funci\u00F3n. +NotCardinalPoint=\u00A1 {0} no es un punto cardinal \! +PlacementTitle=Disposici\u00F3n +ProxyTitle=Configuraci\u00F3n de red (Proxy) +SearchTitle=\ Busqueda +SelectImageTitle=\ Seleccionar una imagen +SliderTitle=\ Escala y mezclar +StoryAddAcc=A\u00F1ade accesorio +StoryAddItem=A\u00F1ade componente +StoryAddProp=A\u00F1ade propiedad +StoryAddSpinProp=A\u00F1ade reflejo +StoryChangeBuilding=Cambiar inmobiliario +StoryChangeEnum=Cambiar enumeraci\u00F3n +StoryChangeLabels=Cambiar etiqueta +StoryChangeModifiers=Cambiar modificar +StoryChangeName=Cambiar nombre +StoryChangeParent=Cambiar padre +StoryChangeSpin=Cambiar reflejo +StoryChangeType=Cambiar tipo +StoryChangeValue=Cambiar valor +StoryClearProp=Borra la valor +StoryCloneItem=Clonar componente +StoryConnectAcc=Conectar accesorio +StoryEdit=Modificaci\u00F3n +StoryLinkAcc=Ata accesorio +StoryLinkEmb=Ata componenteaccesorio +StoryLinkItem=Ata componente +StoryMoveItem=Desplazamiento +StoryOrderedProp=reorganisaci\u00F3n +StoryPasteItem=Pega componente +StoryRemoveAcc=Suprime accesorio +StoryRemoveEnum=Suprime enumeraci\u00F3n +StoryRemoveItem=Suprime componente +StoryRemoveLabels=Suprime etiqueta +StoryRemoveProp=Suprime propiedad +StoryResizeComp=Dimensiona componente +StoryRotItem=Rotaci\u00F3n +StorySelectItem=Selecciona componente +StoryTransform=Transformaci\u00C3\u00B3n +TransformTitle=\ Transforma +UploadTitle=Carga +YodaTitle=\ Yoda diff --git a/data/config/AdecWatt_fr_FR.properties b/data/config/AdecWatt_fr_FR.properties new file mode 100644 index 0000000..40f0e5f --- /dev/null +++ b/data/config/AdecWatt_fr_FR.properties @@ -0,0 +1,197 @@ +#Produit automatiquement par BundleManager +#Tue Jan 30 16:35:11 CET 2018 +LabelHelp-br_fr_breton=Aide en Breton +ActionTag=Etiquette +ActionFurnitureManager=Concepteur de mobilier +ActionCut=Couper +LabelHelp-br_fr_gallo=Aide en Gallo +LabelData=Donn\u00E9es +StoryAddSpinProp=Ajout reflet +EditTitle=\ Editer +ActionShowItem=Montre +ActionRemove=Supprime +StoryChangeBuilding=Change immobilier +ActionRemoveItem=Supprimer +ActionNewUnit=Nouveau +EnumPropTypeEnumBuilding=Immobilier +ActionSelectAll=Tout s\u00E9lectionner +ActionCopyUnit=Dupliquer +ActionStageManager=R\u00E9gisseur +LabelWatt=Watt +EnumPropTypeEnumSquare=Surface +LabelProperty=Propri\u00E9t\u00E9 +ActionChangeRole=Changer de r\u00F4le... +ActionHorizontalRight=Aligner \u00E0 droite +ActionVerticalDistrib=R\u00E9partir (vertical) +StoryRemoveLabels=Supprime \u00E9tiquette +MessageQuitJAdecWatt=Voulez-vous abandonner toutes les modifications ? +ActionLinguist=Linguiste +ChangeRoleTitle=\ Que la force soit avec toi \! +EnumPropTypeEnumGeo=G\u00E9olocalis\u00E9 +ActionDataManager=Gardien du serveur +LabelLine=Ligne +YodaTitle=\ Yoda +MessageGiveSpace=Distance (homog\u00E8ne par d\u00E9faut) +ActionCircuit=Affiche les circuits +ActionExportPDF=Exporte en PDF +ActionPatch="Patch" Ligne/Circuit +ActionMandatory=Obligatoire +MessageConnectionSucceeded=Connexion r\u00E9ussie +StoryPasteItem=Colle composant +LabelHelp-fr_fr=Aide en fran\u00E7ais +LabelSoft=Logiciel +ActionHorizontalLeft=Aligner \u00E0 gauche +LabelCircuit=Circuit +MessageChangeRole="De grands pouvoirs imposent une grande sagesse."\n\nEs-tu pr\u00EAt ?\n +LabelDST=\u00C9diteur +ActionYoda=Yoda +ActionVerticalBottom=Aligner en bas +ManualTitle=\ Le manuel AdecWatt +ActionExport=Exporter... +StoryResizeComp=Dimensionne composant +LabelIcons=Icons +ActionTransformItem=Transformer +LabelPassword=Mot de passe +StoryTransform=M\u00E9tamorphose +ActionAddPatch=Ajoute le "Patch" Ligne/Circuit +ActionModifyAcc=Modifier +StoryChangeLabels=Change \u00E9tiquette +ActionPaste=Coller +ActionHidden=Cach\u00E9 +StoryRemoveAcc=Supprime acc\u00E9ssoire +ActionErase=Efface +EnumPropTypeEnumIcon=Icon +ActionRemoveUnit=Supprimer +ActionNoFilter=Ignore +ActionSetEnum=fixe les choix +ActionRemoveAcc=Supprimer +TransformTitle=\ Transforme +LabelId=Identifiant +ActionFilter=Filtre +ActionImport=Importer... +EnumPropTypeEnumEnum=Choix +LabelShortcut=Court-circuit +MessageWelcome=Bienvenue \!\nCommencez par la mise \u00E0 jour du logiciel.\nPour r\u00E9aliser des modifications, il faudra changer de r\u00F4le. +LabelHelp-en_us=Aide en anglais +EnumPropTypeEnumNumber=Nombre +ActionAdd=Ajoute +ActionLandscape=Paysage +ActionCopy=Copier +ActionConnection=Connexion +LabelCircuitless=Sans circuit +ActionDataStructuresManager=Concepteur de donn\u00E9es +LabelTest=Test +StoryMoveItem=D\u00E9placement +StoryRemoveProp=Supprime propri\u00E9t\u00E9 +ActionWizard=Tu ne veux pas savoir \! +ActionClose=Fermer +ActionModifyItem=Modifier +ActionPageSetup=Param\u00E8trer l\u2019imprimante... +ActionLock=Verrou +ActionDisplayItem=Afficher +StoryLinkItem=Lie composant +StoryConnectAcc=Connecte acc\u00E9ssoire +SelectImageTitle=\ S\u00E9lectionnez une image +LabelLogin=Nom de connexion +SliderTitle=\ Echelle & Fondu +ActionPrint=Imprimer... +ActionLocalized=Internationalisation +ActionServerName=Nom du server +StoryAddAcc=Ajoute acc\u00E9ssoire +ActionCrossfades=Fondu +StoryAddProp=Ajout propri\u00E9t\u00E9 +ActionTurnLeft=Tourne \u00E0 gauche +EnumPropTypeEnumCity=Commune +EnumPropTypeEnumArticle=Article +LabelType=Type +LabelImages=Images +LayoutTitle=\ Mise en page +ActionRemoveZone=Supprime la zone +LabelExportFilter=Document (.lpz) +StoryOrderedProp=R\u00E9organisation +ActionTransformUnit=Transformer +ActionRemoveImage=Supprimer +ActionAddZone=Ajoute une zone +StoryChangeSpin=Change de reflet +StoryLinkAcc=Lie acc\u00E9ssoire +StorySelectItem=Selectionne composant +ActionAddPoster=Ajoute l\u2019affiche +StoryChangeParent=Change de mod\u00E8le +StoryChangeEnum=Change \u00E9num\u00E9ration +ActionValidate=Pr\u00E9pare au t\u00E9l\u00E9verssement +StoryRemoveEnum=Supprime \u00E9num\u00E9ration +MessageConnectionFailed=Echecs de connexion +ActionRenameUnit=Renomer +ActionRestart=Tout recommencer +ActionNomouse=Modification sans souris +ActionHorizontalCenter=Aligner au centre +ActionCloseAll=Tous fermer +ActionSearch=Recherche +ActionScale=Echelle +ActionManual=Manuel d\u2019utilisation... +StoryChangeType=Change de type +EnumPropTypeEnumImage=Image +ActionTurnRight=Tourne \u00E0 droite +LabelHelp-images=Images d\u2019aide +PlacementTitle=\ Disposition +LabelSRC=Mod\u00E8le +ActionTestedServer=version de test +StoryClearProp=Efface la valeur +ActionCopyItem=Dupliquer +ActionUnchange=Pas de changement +StoryRemoveItem=Supprime composant +EnumPropTypeEnumPreview=Aper\u00E7u +ActionArchitect=Architecte +ActionVisitor=Visiteur +LabelHelp-es_es=Aide en espagnol +StoryLinkEmb=Lie composant/acc\u00E9ssoire +StoryRotItem=Tourne +ActionModifyUnit=Modifier +ActionRemoveWorkspace=Supprimer +MessagePromoteConfirmation=Voulez-vous pr\u00E9parer le t\u00E9l\u00E9versement de l\u2019\u00E9l\u00E9ment \: {0} ({1}) ? +ActionVerticalTop=Aligner en haut +ActionAddProp=Ajouter une propri\u00E9t\u00E9 +ActionVerticalCenter=Aligner au milieu +ActionDisplayUnit=Afficher +LabelHelpOSM=D\u00E9placement \: click droit | Zoom \: double click gauche ou molette +LabelUnplug=Non connect\u00E9 +StoryCloneItem=Clone composant +StoryAddItem=Ajout composant +ActionTransformAcc=Transformer +MessageMixName=plusieurs noms +ActionHorizontalSpace=Espacer (horizontal) +StoryChangeModifiers=Change de qualification +LabelUnits=Composants +ActionPortrait=Portrait +ActionDisplayAcc=Afficher +ActionHttpServer=Protocole HTTP +ActionLocalServer=Server web local +AdecWattStillRunningTitle=\ Modifications non enregistr\u00E9s +StoryChangeName=Change de nom +AdecWattTitle=\ AdecWatt (Atelier \: {0} / Fil \: {1}) +MessageMixId=plusieurs ref\u00E9rences +SearchTitle=\ Recherche +ActionHorizontalDistrib=R\u00E9partir (horizontal) +StoryChangeValue=Change de valeur +ActionHorizontalSpin=Retournement horizontal +ActionChangeImage=Changer +ActionVerticalSpace=Espacer (vertical) +StoryEdit=Modification +MessageRemoveConfirmation=Voulez-vous supprimer l\u2019\u00E9l\u00E9ment \: {0} ({1}) ? +MessageGiveName=Nouveau nom \: +LabelImageFilter=Image (.gif .jpg .jpeg .png .tif .tiff .bmp) +ActionPromoteUnit=Pr\u00EAt au t\u00E9l\u00E9versement +EnumPropTypeEnumCube=Volume +ActionPlotCity=Place le centre ville +EnumPropTypeEnumText=Texte +ActionHideItem=Cache +ActionBoundGlue=Bordures aimant\u00E9es +ActionGridGlue=Grille aimant\u00E9es +ActionHandleGlue=Poign\u00E9es aimant\u00E9es +ActionMagnetPolicies=Strat\u00E9gies d\u0027aimantation... +LabelBoundGlue=Bordures aimant\u00E9es +LabelGridGlue=Grille aimant\u00E9e +LabelHandleGlue=Poign\u00E9es aimant\u00E9es +MagnetPoliciesTitle=\ Strat\u00E9gies d\u0027aimantation +LabelInSegmentGlue=Bordures uniquement (pas les lignes) +ActionInSegmentGlue=Bordures uniquement (pas les lignes) diff --git a/data/config/RemoteUpdate_br_FR_breton.properties b/data/config/RemoteUpdate_br_FR_breton.properties new file mode 100644 index 0000000..638269a --- /dev/null +++ b/data/config/RemoteUpdate_br_FR_breton.properties @@ -0,0 +1,36 @@ +#Produit automatiquement par BundleManager +#Sat Feb 03 16:17:07 CET 2018 +ActionUpload=FR T\u00E9l\u00E9versement +LabelLocalDate=FR Date local +EnumCheckPeriodMonth=Miz +EnumCheckPeriodYear=Bloavezh +LabelRemove=FR Supprim\u00E9 +ActionOnline=FR Mise en ligne\u2026 +ActionLocalRemove=FR Nettoyer fichiers locaux +MessageUploadCompleted=FR {0,choice,0\# Aucun t\u00E9l\u00E9verssement|0< {0} fichiers t\u00E9l\u00E9vers\u00E9s.} +LabelLocal=FR Local +EnumCheckPeriodWeek=Sizhun +LabelFileName=FR Fichier +EnumCheckPeriodDay=Deiz +UpdateSoftTitle=FR Mise \u00E0 jour +LabelRemoteSize=FR Taille distante +MessageDownloadInfo={0} \: {1,choice,0\# (FR pas de serveur)|0< '{2,choice,0\# 0 fichenn|1\# 1 fichenn|1< {2,number,integer} fichenno\u00F9}' ({3}o)} +LabelRemote=FR Distant +ActionDetails=FR D\u00E9tails\u2026 +DownloadTitle=\ Pellgarga\u00F1 bremanaduro\u00F9 +MessageUpload=FR T\u00E9l\u00E9versement +LabelDownload=FR T\u00E9l\u00E9charg\u00E9 +ActionUpdate=Bremanadur\u2026 +MessageDownloadCompleted={0,choice,0\# ebet pellgarga\u00F1|0< {0} fichenno\u00F9 pellgarget. Kuitaat hag adla\u00F1sa\u00F1 ar poellad.} +MessageLocalRemove=FR Nettoyage local +LabelRemoteDate=FR Date distante +ActionDownload=FR T\u00E9l\u00E9chargement +MessageUpdateSoft=FR Relancer la nouvelle version +EnumCheckPeriodNoCheck=Gwech ebet +LabelLocalSize=FR Taille local +DetailsTitle=FR D\u00E9tails +ActionRemoteRemove=FR Nettoyer fichiers distants +LabelCheckingPeriod=Gwiria\u00F1 bremanadurio\u00F9 \: +MessageDownload=Pellgarga\u00F1 +UploadTitle=FR T\u00E9l\u00E9versement +LabelUpload=FR T\u00E9l\u00E9vers\u00E9 diff --git a/data/config/RemoteUpdate_br_FR_gallo.properties b/data/config/RemoteUpdate_br_FR_gallo.properties new file mode 100644 index 0000000..0528aa6 --- /dev/null +++ b/data/config/RemoteUpdate_br_FR_gallo.properties @@ -0,0 +1,35 @@ +#Produit automatiquement par BundleManager +#Sat Feb 03 16:17:07 CET 2018 +ActionUpload=FR T\u00E9l\u00E9versement +LabelLocalDate=FR Date local +EnumCheckPeriodMonth=Mou\u00E9z +EnumCheckPeriodYear=An\u00E9e +LabelRemove=FR Supprim\u00E9 +ActionOnline=FR Mise en ligne\u2026 +ActionLocalRemove=FR Nettoyer fichiers locaux +MessageUploadCompleted=FR {0,choice,0\# Aucun t\u00E9l\u00E9verssement|0< {0} fichiers t\u00E9l\u00E9vers\u00E9s.} +LabelLocal=FR Local +EnumCheckPeriodWeek=Smaine +LabelFileName=FR Fichier +EnumCheckPeriodDay=Jou +UpdateSoftTitle=FR Mise \u00E0 jour +LabelRemoteSize=FR Taille distante +MessageDownloadInfo=FR {0} \: {1,choice,0\# pas de serveur|0< '{2,choice,0\# pas de fichier|1\# 1 fichier|1< {2,number,integer} fichiers}' ({3}o) +LabelRemote=FR Distant +DownloadTitle=\ Telecharjer les abuteries +MessageUpload=FR T\u00E9l\u00E9versement +MessageDownloadCompleted=FR {0,choice,0\# Aucun t\u00E9l\u00E9chargement|0< {0} fichiers t\u00E9l\u00E9charg\u00E9s.\n Vous devez quitter et relancer le logiciel.} +LabelDownload=FR T\u00E9l\u00E9charg\u00E9 +ActionUpdate=Abuter\u2026 +MessageLocalRemove=FR Nettoyage local +LabelRemoteDate=FR Date distante +ActionDownload=FR T\u00E9l\u00E9chargement +MessageUpdateSoft=FR Relancer la nouvelle version +EnumCheckPeriodNoCheck=Pas jam\u00E9s +LabelLocalSize=FR Taille local +DetailsTitle=FR D\u00E9tails +ActionRemoteRemove=FR Nettoyer fichiers distants +LabelCheckingPeriod=Ergarder \u00E9s abuteries \: +UploadTitle=FR T\u00E9l\u00E9versement +MessageDownload=T\u00E9l\u00E9charjer +LabelUpload=FR T\u00E9l\u00E9vers\u00E9 diff --git a/data/config/RemoteUpdate_en_US.properties b/data/config/RemoteUpdate_en_US.properties new file mode 100644 index 0000000..86739ec --- /dev/null +++ b/data/config/RemoteUpdate_en_US.properties @@ -0,0 +1,35 @@ +#Produit automatiquement par BundleManager +#Sat Feb 03 16:17:07 CET 2018 +ActionUpload=Upload +LabelLocalDate=Local date +LabelRemove=Removed +EnumCheckPeriodMonth=Month +EnumCheckPeriodYear=Year +ActionOnline=Online\u2026 +ActionLocalRemove=Clean local files +MessageUploadCompleted={0,choice,0\# No upload|0< {0} files to upload}. +LabelLocal=Local +EnumCheckPeriodWeek=Week +LabelFileName=File +EnumCheckPeriodDay=Day +UpdateSoftTitle=Update soft needed +LabelRemoteSize=Remote size +MessageDownloadInfo={0}\: {1,choice,0\#Server not responding|0< '{2,choice,0\# no file|1\# 1 file|1< {2,number,integer} files}' ({3}B)} +LabelRemote=Remote +ActionDetails=Details\u2026 +DownloadTitle=Download update +MessageUpload=Upload +MessageDownloadCompleted={0,choice,0\# No upload|0< {0} files uploaded.} +ActionUpdate=Update\u2026 +LabelDownload=Downloaded +LabelRemoteDate=Remote date +ActionDownload=Download +MessageUpdateSoft=Restart now +LabelLocalSize=Local size +DetailsTitle=Details +EnumCheckPeriodNoCheck=Never +ActionRemoteRemove=Clean remote files +LabelCheckingPeriod=Cheking update\: +UploadTitle=\ Upload +MessageDownload=Download +LabelUpload=Uploaded diff --git a/data/config/RemoteUpdate_es_ES.properties b/data/config/RemoteUpdate_es_ES.properties new file mode 100644 index 0000000..1697afa --- /dev/null +++ b/data/config/RemoteUpdate_es_ES.properties @@ -0,0 +1,36 @@ +!#Produit automatiquement par BundleManager +#Sun Feb 04 16:11:51 CET 2018 +ActionUpload=Cargar +LabelLocalDate=Data local +LabelRemove=Borrado +EnumCheckPeriodMonth=Mes +EnumCheckPeriodYear=A\u00F1o +ActionOnline=Puesta en l\u00EDnea\u2026 +ActionLocalRemove=Limpiar los archives locales +MessageUploadCompleted={0,choice,0\# Ningunacarga|0< {0} archivos cargados} +LabelLocal=Local +EnumCheckPeriodWeek=Semana +LabelFileName=Archivo +EnumCheckPeriodDay=D\u00EDa +UpdateSoftTitle=UpdateSoftTitle +LabelRemoteSize=Tama\u00F1o Remoto +MessageDownloadInfo={0}\: {1,choice,0\#Server not responding|0< '{2,choice,0\# no file|1\# 1 file|1< {2,number,integer} files}' ({3}B)} +LabelRemote=Remoto +ActionDetails=Detalles\u2026 +DownloadTitle=Descarga de las actualizaciones +MessageUpload=Carga +MessageDownloadCompleted={0,choice,0\# No upload|0< {0} files uploaded.} +ActionUpdate=Actualizaci\u00F3n\u2026 +LabelDownload=Descargado +MessageLocalRemove=MessageLocalRemove +LabelRemoteDate=Data Remoto +ActionDownload=Descarga +MessageUpdateSoft=MessageUpdateSoft +LabelLocalSize=Tama\u00F1o local +DetailsTitle=Detalles +EnumCheckPeriodNoCheck=Nunca +ActionRemoteRemove=Limpiar los archivos remotos +LabelCheckingPeriod=Verificaci\u00F3n de las actualizaciones \: +UploadTitle=Carga +MessageDownload=Descarga +LabelUpload=Cargado diff --git a/data/config/RemoteUpdate_fr_FR.properties b/data/config/RemoteUpdate_fr_FR.properties new file mode 100644 index 0000000..d0b4aca --- /dev/null +++ b/data/config/RemoteUpdate_fr_FR.properties @@ -0,0 +1,36 @@ +#Produit automatiquement par BundleManager +#Sat Feb 03 16:17:07 CET 2018 +ActionUpload=T\u00E9l\u00E9versement +LabelLocalDate=Date local +LabelRemove=Supprim\u00E9 +EnumCheckPeriodMonth=Mois +EnumCheckPeriodYear=Ann\u00E9e +ActionOnline=Mise en ligne\u2026 +ActionLocalRemove=Nettoyer fichiers locaux +MessageUploadCompleted={0,choice,0\# Aucun t\u00E9l\u00E9verssement|0< {0} fichiers t\u00E9l\u00E9vers\u00E9s}. +LabelLocal=Local +EnumCheckPeriodWeek=Semaine +LabelFileName=Fichier +EnumCheckPeriodDay=Jour +UpdateSoftTitle=Mise \u00E0 jour +LabelRemoteSize=Taille distante +MessageDownloadInfo={0} \: {1,choice,0\# Le serveur ne r\u00E9pond pas|0< '{2,choice,0\# pas de fichier|1\# 1 fichier|1< {2,number,integer} fichiers}' ({3}o)} +LabelRemote=Distant +ActionDetails=D\u00E9tails\u2026 +DownloadTitle=T\u00E9l\u00E9chargement des mises \u00E0 jour +MessageUpload=T\u00E9l\u00E9versement +MessageDownloadCompleted={0,choice,0\# Aucun t\u00E9l\u00E9chargement|0< {0} fichiers t\u00E9l\u00E9charg\u00E9s.\n Vous devez quitter et relancer le logiciel.} +ActionUpdate=Mise \u00E0 jour\u2026 +LabelDownload=T\u00E9l\u00E9charg\u00E9 +MessageLocalRemove=Nettoyage local +LabelRemoteDate=Date distante +ActionDownload=T\u00E9l\u00E9chargement +MessageUpdateSoft=Relancer la nouvelle version ? \n (si ce message revient lancez UpdatedAdecWatt.jar) +LabelLocalSize=Taille local +DetailsTitle=D\u00E9tails +EnumCheckPeriodNoCheck=Jamais +ActionRemoteRemove=Nettoyer fichiers distants +LabelCheckingPeriod=V\u00E9rification des mises \u00E0 jour \: +UploadTitle=\ T\u00E9l\u00E9versement +MessageDownload=T\u00E9l\u00E9chargement +LabelUpload=T\u00E9l\u00E9vers\u00E9 diff --git a/data/images/2017-festival-adec56.gif b/data/images/2017-festival-adec56.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e7a88d50eaabcc8b4222e1e3e0a9aeeb7f8c987 GIT binary patch literal 59070 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 literal 0 HcmV?d00001 diff --git a/data/images/2017-festival-adec56.png b/data/images/2017-festival-adec56.png new file mode 100644 index 0000000000000000000000000000000000000000..864926f5ab8f5cc97162f17bee72f13788edf341 GIT binary patch literal 67868 zcmV){Kz+Z7P)sp0D00006VoOIv0PX

e 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J6*wN>DQwZtTONT4l>Z}&4==ld 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

FQK*-2QdEUi`L@g2k9iI9AYVwd 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

?}XgTzwSsXKa-z&3cwmJu$rsU99!tNZkBTIY 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 U{PeF#AT0bp0Y$2`1={w%0Hm);c>n+a literal 0 HcmV?d00001 diff --git a/data/images/adecWatt-anim.gif b/data/images/adecWatt-anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..542aeb96c3512afcbf689ff0e2deefaf21d35562 GIT binary patch literal 303777 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 z

>bYTz(OE@U4*sZY-Oh8$i|32x3Bc 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 z z1|rKxYRsC5c{<0gFPowDUwEdTtx{xti9a z8yUXZdbPj4VcUKpw)DU73$^Y8|JXB{x!g2G-@o=u;ub9%^4K4HhGCq@0J-G5CcHc# z$xqWV`+!!vWJ86->ek+&%jW<3GiBScCneHMVcW9Z%m4LfMvuijx;9c=wekwbDruz@ zVdrLWz^XkGBZamN&wvbzkG@FO?-OzHC~^fUtw(x=9BE}a%sMnk-vC6`U(6U~3b(hM zg|Xp3a$Q4;x4)L1G63gANQw2nHj|i9_a^TSIM~+-Rqj?!4} zha`o{l`C=K0Pc8{J|1OLe=uV*_hQs=t>555a(EpV=QIbfkxfK9ho9X9ter%4%NRzn z^s^q~HAx@|kCY-8^-gtfJm1MZR0M7NL(u@8>q@i59FA1&DWGNd-L#_UO-ub~(44PF zW(l!ri2k@7Pvilm6S)9+AQA-97|9g%Ej(vWhV8<%>AYc`_a+SJg9&gye6CT@>xfRt z8k)4mEA7o^_mdAFN5Q#MvJc0?MJ}BAx;E1I0Ib)f*yx^a;*cly;u$1M*ed`Vug2)A zFaXL+1LUTd04CT&;uAr@NH6x#yRT%HrX6FkcOoyB^ZTtjZ)$Qi;t~^W-{__ zno0C+#+E$g@c#ovVkXT2| zvb8z7Z4Z1Y7u5Kf6G+PUC*&wnfEsGS_8@E2`2^BX$NjXV@D?`{E*uZPOXLAmb)`v& zXdNS2aLv58Kw>*OHJDV2mq|=uXj_sL?2$U|Z>?sCUU4DaJ~3Ef`gFa+#Zf1yjrX?} znXyIPS%eZQxRUwKT{RJ--*GkMw)72 z5{Z|$1~1i9zpFIUa;U#6+lr;_of_=Rr5lM7ZO9Ic%`+kl&)gQ%X8^I;*kL1=U%V3x zeV31a|IVZg;>*&){hVWa#9KIX_(RDyw7f4z!i+lkQMuUJjO$16`=)tZAVlgo~+ zbWPgO>bp(R9(7T27dsn)XKzCUihM?nQIP3wcVA8pD@I{_*^u-5TFGi=tw^Ad6o`3yefZx?7Rh} zFuQdR&Zf_w$YHakQ{ITwLRu0JDqUwA8}^tmqCOXe5YY;8fNsQj9^rlzgrltU>hlAj zq|bZtS7m+P42x6=%)8ord>M(>tZL%~y|+ZoSpPLq2`0F4bSzq%k5ip4#~;&ne@N4Z zF{u?i|G8AUJ_25aOs!1Pglw@)T4@!2Fs1228QJ+Byia2?qwm>Zuh)&N5mVDKUq<`< zdwtRn*RFo&JmRJsuf z6k&MC>gJB>g2-js6nixZ<G9qw?32yZzwUFOk>Ke?FDidGdsi(EE{ z$oEK`{f=RE{^P6GCs$TP|N8OtV_DPXvf-ozJ=X=CSHHx0>G86Cg|1cA{zV%*`${10 z^V&~<(Z@%-$=MqkBn!0llrE&q%!x-ukRJMhW(B8qC0z+Ek;Ol7(KI{T-k-Y!KoL^E zKYplBH!6FhB@)QR?yO0%t=+ojDKzdnzH5dV!!ir|ZD?r#r2a=eekD{`6?(nT8;B_4TB1p;N)trNGf z#f}d;nS7h>e6`I2b_)zrd;|Im)pHj)z0qe!Z~#K20AS#5k}HdMiRx$EU6H!lg8$i_ ztq-_cMjdO{*9^dg{?3FX&U zNca|Oa#bMeZPw5GaMq>H63fR z<*hEBtp*_9I1}7{MqM}{CcJ6SNUipFL@`8=FO*?rPjxCPA;$gE2K$GkI^q!#Q9Wt= zq{lRW`g}#y^hb>>EtK+1QG3Sj`J(jJsKW8dPRrTb9kJI1()8<;=8wee{2 z+k_|Dbm+7W86@ZUp?!9rWcsf{u*zK#)zlt~Zf?ORT@sH^U%UNPkU&TWN(iz@~$k7mdU8aQxw!Pq>VXNLoEVN zYHlAdj`q@%{_tk(YNq(yyX7z4(9@1Fh(XPg$*CBYHu>@w5<;k9+~u)Hx(7UC^BE|V z=3U`|F#Ui1ne3<6#%R#uKmJU1;B3|Rdl$yV)E1NsE-2|c(ZDNlYQ23nE45?q(XU6g`L2L5+hkQ@kyW>?#$a`u9!{6SH z!w{oM3fDHRL2_FJ8AVpZ2e<=tOJt*MPdgY{y$O6A0ct2!s*s%UQEK%x?!vq3;$+%| z`4KXncKZ}D<8=*nKoLEJA_HDlUmaU)9bPadA7bp`{rKrF504?BC%7ZM_;P`Vy?lJ! zkzq=#7wpX)h^M4VEIsj9=h_j#ZCTM>9U<(NFPd1J8t3+e)6Mi5s4zbel1>2CT}mNV zS00DHUF($ma^P|zTun=0l+8-kZ#Qay3wh|h&JT?6I_P86lN6C_Ss}PMBc|P8XX4Uc zelY^jSaZm}&LjyOXwM>V3QP5Pb^aLf$uIeLDLFhZdj zId<_eIlmYD#d`YT+=FXN^|8r#wW%pV8+AR@MTc|XjD`jP!D_TggK9wCyW}D3m>zQJ zB+u?J%n4HNnJ81D25oF8Ez&;Buh_%xGRa)~fcBnWU%{u{t2_p(8`CG9=+}8?TF+;^ z2O4Uy3F-@bw}v)GaVqx%vYR^7$jWGT%gg%XQcQsZnvLP%y(3^xWMk2>DDLi0b~n%i z?h*7zKOLa^ud0o-(4?W`jN6i=hc57SQaU}ckqj_*VUlBa{kBsA%h)-4oRK^s2DSH@ zUiPG-GL|<2hV|qcO8G$#k}OaTTo^t4z>{H=fT`vH+Miz*WuWCvQ=cyzAC<-U1H9!@ zj?yVp8@A_;flHI(&oqEHViNf0KFsL|FL2D!%P*yZ6_X4nPO;hFD4`KqPKW}$jUSz3 z0(M@20h&iRc_{Sx%6+fBU3w%s0Y1=>PpjLCxc#ta3-upW+sll63|r!a7ZH0!%Va(r z*oTzkql3&ZiX^agh4{mFQN46So0wRV(jCDlWB&RQ zq#Q2l@X8f05%65t&!lT5aj(@oNj1<{lzT6i=2KzlmTTz|548{h=2!88M%SW zJJ4T^0A8CG9nocwpE^oRd4L~75ol0Vf2lLWY^EPH&pr@RQue(caN7@)hdP`Y9nNlK zvzDh!#qKR@TZD zUt+5Mk1hkjCDQREiEBJ$Plst9k~g*3d>Mi=Xu`R^2neb}djyNqd`So|lS-op?`7Ic z&f0Xbp6OqWHv)=)oOvlI^=-2TIEpoZzbo()i$Y-Xi{B^r~ged%9T4wu`KeUXj zj6$X^SzQy;Ml-kZt8n&z&X?P^#8S7@HjI0>vZ1wXpIKRu>ob;Xw$h6eiL^D1&_1M2 z*pb0I1MDugS)O&E&tbfDoGZcCvfS%=93(bYCdnjA$WcD_pS%OU4GEPp52TPn^phfh zFzG#er+AZdTk1m6(cN@gtAAnz;i9hWO zkSctfD;Bx+l}P(E_iY@M7=>@xFEM6PjEMq%3@D8z&G#*aN;^dhv;^r6aH?Y;3$6Nf z&S2)5`2PWB@Hw(~;kE_w{|A_XX6}fXH59usI`O~2jF;sMM%B8NU0a?%S%1Wca7`~x zZSb~47Iv-6mE>2REShC6G5G(+j7qzuGPd>B?&!|re~g(S%Q+KWC#Duzj^9U&na%1# z*WUi>Fnwbk9zX-J0dTIgkDFSyNC?djnJ~_P-FYYG6e&*`%%C4n$fxixaGvm1v$0oe zLk%U0E$le}&vxe%cQlkdvmH@@t{VHe!9a4g=xn8?18wZHw!a-e{le)BZRY#3tniNK z#V~mIP>PFjh?WR9acSF+)pW&l3=1u^j_&0x{Z+3dECeizzta{+sH|z15oPlA@O;PwAXGeC{Ao88j@xqu0Gg5&pmeGC zi>CRz(UmNr=*~E128n0><=u`T-n=NK*J?>YQvvV?o`HP-z%$BB1fHRnC{VCp=nS7n zuhK6k-dJ= z|Mp^V$Ltm$(pL3y(BUde^3&u+*>QI0^4E5L#0iuz)YAIug}0^~`Ob6+S&d3ek~ot( z{zsjO0)Q{54bGKSFADMT68U#;20JvT)iIRU#%czZIcU}xTU7yuYn`5zfBbL|-3&+O z^Z7wW3<2lv#6coLF5zLJU9Ga>ulxENck2yspoU-FeOQY!bM{$tNXDPJ5pIhWIp z8u0N9X}fX&uxO~;6mIQO>w;fjIn!u4G~0AZNneKdv6OC8fFZeJ*>NR`2XKbxBVaGW z&*U6K_?dF|%JZ+gR>gOCw7{!#D;X6(5$agHb( zj0(5An()5_&DgRr52{Oq6GG5*46dd|oR~WVUE4&ap?Or2(iE9Y$G@t)y>1o&<1X4= ztz_BXX}WyaXi0J-#-M5B8pVv=;Y=TQt~dl-R5+76T;y%sc<;FeQ0DJ}@z=S-Q{JpL zl(Hlyf4Y%@PM4_*i;*rs{QITje#_9Xfe*h=?d^&do%{#l$X$abVZb(;;RSxX{?u7` zmVr1lswu9C^4q@-4L)I=E$aM6{*`Fh;9a^g=c(z1v+kXur^D(SW}N>xG#cdDPQTjq z^wM|lk9QG>1}slNAR5Tg$TIL)vP+UwOA|>w{JL_sI^c@aKfLuS;WjH*-TAuc>Oov;ywQ+8QoTS)PcT8==6X-@k$}r|JJ<)1VC5QOo0FWc zojQqO`|xou+!f#ow=;-FGxFVg5u(w+PD+=Re>562!;EUS!FdIMJ3;V;T*Kb(b~5{i z16j>d8pHg#5r7jN@~-Sq4PQ*lJL!P*G;yir=W-nLHP7EvE?Shju zpVRxxlY>5f8yQzCJ(BAxW1nwaSDvw+I++>zaYo>h@4}V5K#M)DYLq<}3B3c%I{`Xo zIcdCWzQIwG)Pv6QW3dfgZV~w=ihV+o2Fh1^uf43SwujzuwN?GSTEaFi`vT>sXHXDK z$m+=bDJ}?Bfw~!+;~R4ZO%Y+;gXJ^e`YJn zPtH|+ddcJ^?W**s@Ie9jS zY;v7ien2YzBcoaO_gNty9V-t0B)O3+=VdfL_b$6x%{>~26d`&A)hJK;kvn>fl2~-)s64JkXKIhfDo7G;E zx?m@V0v*M0LL`fvqFF{Mb`*K9gx40pq0<{m%YR$fsAecEO#(0@2ycq3mK9?Lpufr?9)OO!<>~Rz_miqWXUOj;7yJdoJv8#3~ zFe!eh5$Bi)TTlSQH=vyOf}@z?EYDwo_BP@amOaYF9r3nTzc+=~H*MU|8lo>w=X-3^ zrp?;)OevYW?RjbF1p#vfA$mA7bi?4=#WF!R&5`b5Pj$vU%${<=$q!xYG4tXEmyul3 zw%vT^w{0Q_y;~3wA>!?bM1K+u!xl;B>ijCkPE`M+Kb1-sLv~8PY^#^%XA>t-MMFb& z<@nXa!eV6~3wyxG;q~KLxAgq);I3D+b&A_$Cflb3BI4wTK$}#gR@yVYI53{3qjG|Y zW1et6)Nl?5$L9#T%h`jp5%GFJt_2en5n}*3mzN=m1$q`bFiWSj6xSV*pmPbA_D+kV z%mGqCW=*BU$)RGUK(yX$ThT@0CZF!Ac%!~|4H)}AKW22+t#)yA(@JGUbZ0NtYjsm~ zcW;zEx6b1U?X$daIO|wYejK0i(^DJozhrYR4>n2q@#`UIx0V0FO++)9I0}@tG4?M? zzP|o2K-&>F@t}&?CVo%K7ciq2Mko*Bj704in|y)cy3$P}ST>C`lYr&pfB7XHDr%A2 z=|-t{`|8Z_N~F+I0y0+VwkYM&s~6v^#b9`SbrrVxT0i7a+jze4HlUE3u1ktncQ;=5 z?v}6{4`{)uC@xWPd27iadLE$2bMmSPoS?~Cci)xhtvDNWUoR^|uQJuvY+v98BhF3Q z^U7xB=KPJ7buUG|#tVj{)GcxmQ8;@VIqhi@Xo4OnEnzEN zJZEzlmmQTwX~lMa2(cbA@Q8WV z{=*7gE^khz%Nb_1B|rpVCnWAutH#oC&Fem5iAb^kxj)rXdDpp@e|1;#$$;|y8l!(o z%jigjJ5Ygj?-|Nn^Ci|qVf_5{9#P)wf1sk)={(2M4kEG-iXN$Wvbl7_^;|CqjI>$q zlvRB=Cdneyn~44!t2Yzf$z$Eoz!)F$ZrDY@ATwkgkAR_DyBMe0x-C*CIvR6!u8O+# zUw`K6Kl#R+t}v(pb!GMf!LE`g;VxhFwCe5cjC(`wcs`5E!5&UpwdIE&nIq4S6U%JF z0=qHxm*giK-kQ%JE5sEEfthZwQ}p+dD0X65b*CS`h~poBidM>ca>q&2T2wanq@2C* zY{5g?F}zkY;7|9dn02+r)4sbf^;ZcU2FerhczEXg)QUfEca5bb1TtcSd#*vF} zx-O$EM*)6zA%>fH|IYSzc_1&@>Gu=Z!2#G~6cW4UV!-{a>oWp&5bB&{p#RH%;^8nDPnY4Zq_GDcv;*7w|F70BpScwm+e1sz|S=!>mZ&eWQu*>~z3jvE}NX z`Hhr4I6?J}q$K zmVbNuvMg==-uEl&PY1c6lrM1ua@q~#VzX78_d8Mv`A3ID3Ed3Zqkp&nDg}CD%>5P~ z_t2&zuMDldM(n~Xn#x8Lj>^7VY<7h_I^}MIvAFJTJr1BpfKJ#hqNev$qU#f3nm z+xbma(a67@dHfLJGO39di01Q+*Eh=yKe|9M=W-e^U)oB7zpWs;7WK;0vrKi}jxD|O zBQv314~XY{Kv`7GoO#Wqk&a0&%=N%>PsE%BNHq4;ujloFXXbRG&P7u>=^k|@$m()D zZJ^>IQ5 zL*gwxr4rwiX1-qqgNS+&q;W>ZA|1ZA?7#6qboI9e%?Qv~R}`WPLo|8ZiNXxII6$gc zpUt4nj*o8F+XT)d^HDeCMQsRxxyJq&mZLcbsbV_>5a8y9 z37B7EL6w_7wP&~QbskM|eEpV>Jz*~~Kkqe}v)-0v#gP1qEKEGt?DdF$ZgOumts z4*l-GKJlu3c0L*j_y#a>H_p~R?D>l&?j6muslkedu=Uye;@HCgWTzUNzZEXtvHv+c z#d>o<{0|~&gY5R&Q>KUQh@5zI4Kvbr?Ti#9nZpnkj3a5M1RaJD&&K+`Sm&nOH%!)2 zyD_^tcTxVaRh#lU7oOQ%1S*6#>A$<^r;@%gy6N@&nk>>JY2n;K33IUHNdOSx-8M9t z|M-Cqx?Y5Cwjek0d)TLv>qkt=MnE3?Wnk<~ll|+^dTAR~@%K0kn$}s!Q~>_& z763Xiy$kVc>wQUkKE2RJM-w)Zf>#|Zv^C*jkRwD!qAh*#;d?Kg>;dDge8r?z{s+q{ zM+5$dw4xDJ<)Y+(xl3Q zhV5cq^+gvkliBc-vSVnn3T?!^DBEL_$pku6*$-7|L)lq^qmtnD4u=7Q83FTYKl;ZzeIRRvms5YJjiWo-+-pGu>2+z1~JipvVCg zwP6JKcI;$`)M`QA0k}Q4_PCuvVt|^lV2{X1DW^&)yK_1lo6+nDo$R_Plhfx+w%n&J zObyD;+uRfrl)8YhJH~js!_w|h(xQcX2FF}<)HqC_+@)EIL@&t7Lx z1x5*=y(83}B1mQ_W*-B&7^o-KCHeuRTsD3vQNU z$4*(UDz&vGlyJk`9fSV=bvKGQZc0y!?6dFUSV7nLw!kqma*E zm!^Bdk$hc*{%~{A@Dw3Q&Im-2eOP2M?4kktHocrL;O&1=19Fp|--hEWMo^mHBM}^) zo8>4<4y5?LlrmdN6138PbKv2rp z4v8Ba%b1(`%HbpkF3e1R@yWrDx8z|WrRSB_syLGXL7I|7*Iqd1gJM3#5LBrM9F_O$ zW2k8rA^OyN9ft9CQF#yno67gQpN1ahozhw&{?Um2vS-$)s?|dV-My1JRzFIqPZQ4RjsCY@uV(17j`mXoc^1QG?hy+#1gBy2$ zmDU~(*PU~IQ(={QjbLxorB7bxtK*uM26g(*UDU9d4ATxX*W5ZcPkZ6{g8MWsGL{wW zaa`+)U^H20e!O%xZDxk9?gf4ycr}qlL5Z|}j|h#8wD%KZ7kNV{5!Y#Q-=}KV-TUv< zuwt@fG5)8v0QaDKBrMEw;eN9T23%4eLYjJBp32w7F~q-P#C+4=IbJG9w@%8+eoH3? ze&=U)$%gE?D!PucqJk;afE$MkU!H28syJ0VdHTWnq?xi2a~X3t{*IGekG&JOXDH0{ zPL5rd@9MM#ajCD?40xP>_E=upxYPY6uv7Wi24oFggWujz{MQF1cl79-H@`yHX z9Y)L~9b7_Wt71%P?28U$0sr!+Q9>VI=*3HF334kOHzz4s$52UgtqSV^b7vDa&u5`;Li!V^R*8mPslYwV+5IOr z39O4+F1Mavo!M{y?2b>cZ;)%b>!d(mYC^F`@mCD_^gBCVSljX*>;LoAQo3;io zd4vYVBRC~^Ud4SK@)nGg??pP{W-x?5>E>cp{um|+M&va%#1G1+CNvkQ+RH!>YKDVZ z#o#&~p4|gYj(BDnsYq4^vaSlfUdW>fo8{i7v)7ESntO0Tg5?(S*AMQxx~0R#4TXWw)>56%-$-V_5eWKQ&(bkD}Mgn z@Ssl@r(b-ra}dzQZExF;$x%Nxwd7DqD$`FFcS6h2WC6${&Sl+R1nft%;p(kzr;Tf9 zT)~b_uXZkE5H%HYImOfE=cZ+I-JIy17%PvD=vU?iOr4rHe;w|O5XdV%LM9@4z7{5l zx@T$OJ?@qkWdJX4vfAJE0Te|Fh#L*?TWe^>+qZ2CdM*Ps{>B}2Tv@GuZIcq-G_ztj zAj8JdxN{-(3Ts?y>TuQ7m+Rs%QNSFWTzjW&rOdl zzX;wIY&Ce(yljptDv5etfD1Fo*^@19Wo+dHE%_3^$|G+>ljFFw&-gUOv_rpDk{E=4 z9aT&>-om75E!<--{jO>z%us4Q9zBwfWps~hxVC>xd4V9m|{!%^x6Z*Q_XhSvFiT;2I!%=`a8{^xU^vo=dJty4{z7VXQl znh4KnFQF2W%Cu_3lp^XJ&zY%ds)t&sFmORi=)IoQH5SPb?6_CGKfv<*$p$|hC9O2?|Ee2&+}@S zy`!GL2lbWw@E?xS(oVr__ZLJ!*xhThgL6iP*IXmPnaWZjn!wi%u<4vWq2(wyE#jJp zuW4EE-JJDiXE2WpE5+PG|1J+K$(xnIWerEFZ^#1X8~hoJGPY;#_A&Eu?(=ZfW3D_N zm2!!{Gg9UZ&5A(3<`)0I`8@8O4e*I5DPXNUT57S zrNH);k;{6ZChkdXEGQaA`34uCiXb+9S8(hP{=rNmdPF(Q6uV;6@Z>d!KHpWv4icGK z_GKL0#WDzf=wmh2Y+YG9SE1B$_WCej6ba&t^Ofi&#PtLDg4(P`>HP>MtmN!+XtC~_ z-x$>qYCjODw#5fF9(It3+LWBQo2sD&ZrE{L0NGk$S>kpPKoA2gTXTABUum>&O?-y; zAEenz8=u>(Ypjax%TRB;`UtvyT4K2=5?pk!A^1-Q$!XX?f~V1irRbX5Ouo+RcpiU_ zYw;}YpV6)N9r4ue?BA+%t<>X@KWA;rL zGFB%6m(ZCllPbykLMPQqD+(%$reW6k`x$V&fnXE zsJSv?Ywhsos|&Ucpr6Lxt7{oh60jxukoj{`*nyH0H{nl70g=$tSt%` zwXq5*)EdPlB{rVPGkRPP)FhP)s1Yki8zmUrW{1$Hhg_wuV<@6TUr1|0ERIG*BKEa< znl}dh9!zmD>dowj?|z1M9pzx%&r6vL?5|ox_6=_3ea~I^zI#YJ(2pY2k|EvBD$_nb zK&%&{#+_sMw$3&X;VY88=BEYEBy>5lHnH;(wGt;k$Ue02#9!G&TJWCRr*@JC_h_e-@G8KnZpq(VUj}Q8tnt`%*27n>F z!WKRh=-S_6>*Z^6oLXwsC~d+dZnCWE=AT{tb)lr*pkLqA2Vp%ZC%TO*+&4Veai+gt zA8IWcvtmi~$6tilia`$)x5`s77XQM7WN<4a6jJvBHUSYQ#LBu&E5JBdsf6DtzzP>9 zgLNZ;Z#}{m286<7NQI$2lQ|PuDXSAg1s{G#I?~ueWBoW0+U66W-^nx`0uZY^XL^kg z^$gDyI*SgR)c9SRdQL`PUBs&6mv*Uwc5#~SnQxDhc=7;<#X@(tI`kQw9U})m2qbHZ z5Pok+WQv%vul6$WQ?Cqjg27<}k))7XB`}e7cVUkI5@%+*_k~T+)wv@ z5f70S2pF{RNK{q0&`yQmBi9IHma9aPjwBjNnH5vLqFKKcAYbb2GqPcwS`cl(%Z}+` z7^y2W(A`uzyJt}Q)n^_UMjp`C7n8XPJ3oZH!oJV#xrs03JA@9M11`$hY&}~`MfOCR zOc|ZTrqOQCffueU>zlO6Ykuuo=&M-l88BQPnuXCIf?1Eamsza==IDgJ_zuxLiUzGb z`ff7Fq;vC~iwn6JJ0QRfO)M?X;jA;33O-0*Nbs^;GiU!DkTe%8Rwz%$PtUxW(`!VV zw8Aqo8}4dZ-JugkRL*1sIADB3{(~@foor zB2Uo=E!%+*T^dM1Tk}wy3?<5je);q1oi-iX4J!9?g3Wp3+15GG#c@1<;+{l+e2!K< z)~8d{^h>@b-o5|JPF&Umx%Th#2#R7cqiU}ROtNO z-y$u8PpHqR+2Y)z)1wOV=}0Pl8=6i#^TE-yB?9BviwK}7oq3jrMO%=?sed&RWF(y{ z#O5HK6;ceUjRpYumWC;Vz#;DW zp61T+SC2lWFQ4~94?XWk558fd+xPew$v8)8WKc9{Wy8d{S}{phFw17ZF^7H(L>Cu| zCOcWy+cv|*Tt+RlIm*t3cN9BY)B442oZ7X~Fq}N=Nf2E!B!Lo2I9PUo2T+b>!`hO? zkt_AjtBm@7rnvORlClGN9`C=TCl2&0eFRMhc;j;(yWj;B8B*G)={CP&AK+*~jiN_X z=mcD^nCjHSo+Wmx&+i6#^ zpEX+G$q0<0Yh!MdV0>9d7x#DRjxCwFp=-4`+Am)4ALdZX(=vySOz0?NFz*1P{{_wX z1wfR0#!Lax>nY2u^@~}B7iAdiCt!Uf$yoLebjY&RLWd92EjH!TbY+kumuwuV>j+>t z3XssZ>6(g^ukw@rVKaAXNo^?@iHR|8qGj%15noS>vp4bL8e~V#VS%U~6_G~8u4?wM z-)^6xhhxJ0HP4{alV~TUp%WLQ#}rui|HnF%^!#HT%00E#p-4N!r}-B<G5e${|EO!|cT7&N4k+-I>a4gbJy01NI_8=Ae%n}oGZ*^NVc2~U> zdwk7{Gv=8Abt?nR*9{qb#_sGAU^bcQFAdtQ*Cv}(~+@ADo7^2>EMHDTs`FPpa<*{Nnx zR4P}c7{oDgNAt)l)PU5=K)Y;~!V~`@57mG`O-h|5_z!s~b1$4g%{WtVVT#ldh)G?I z8ZKS4J7e*Jo}iZY|B{C)$<}aekE$?B7IJ0?H3l1Q`G&ZJ=ikwB^OgHW4;if;Gm1HB z6yt6feu$n!D}ZL&UM{y1)j8cnDF32|3@P&$ddS0GfC+9|^bjVP8t4EDB86%EWAie7 z1x5fIz3~^rUj+=vpssG>F%jm`Nzz4`PIzp3mYkeL2i05{2V)a>V5bSX;S6ai6w|PO zPO8e{KF{)+PV1IetREVK;h0pJp?=dTqaHc^ZMCnxe{=u6 z<7Ya_F--h@xz&zR(3*+6Wngf%168X6<{IL)-eDLIgWe6Fp!F4O#-ew zVO|C^LmQB+4zE6?L}DeI|p8N^$78m>G(d8(nZG-5>1`d^?m@M|Y1r{P~r6&T_pcl`@$cGZ|VLSu=l#CNx3&^FV0_ zsvW@e7y17Z4`sx2RPqfXbdQM<8BmyVGS!oi)`NX3JL$r+(xQhe4Z#0F53d|4pMxg{ zdQkGO{(~MeF(_r-)x%DYnT8Y-irgJF-wD)f#l$GGp78Ac2R-cHwD_<5SlVc6G;_8n zjPfKha9D;Jlbyw>ESof3;N3m50VerOtJ5blQZyAB@HNo(0o@}>rX47r{EyY2H#`T( zH+bY|CT-*jm>T)Vfb^Gl2+~Q%4r6;G^{M*cFYl1maY=TP!>d&CX5-pX4CycL@V?aO zlT*?5V(Zlp0>snm|nigWF^>!&l3ztB)s_vsm`+Wdqy}CY@8Mi@4%N<@$M&R?3O5O?xr04`19#cuVNyPthsPW)0dG#>uU&Y;lYjphAx$;s3P`r90klNBb-oKJai; za`C8=+86r6Adp-H?J&KF#jWO%@hnQ&_fwS&s7pZ{WJS8WtXw%nHagN@T!b8iolMUGzk`kT7f2qy){*j5;e&o9~ma1}nHXQ`JD9O3}l> zHBa6=y71!94(s`^vH!si)cz&sP2G1uNtVEq0j2 zz&9~5_ta)Dbujy0>CXj7=po*vAGMKG6cR$USnK~wJVbtphfPy@J<{vGlh{55CbmfT zEv&z+NjdX2X`a{3FOxFq^|m1YhUD^*opoyOw^BPQ-kOV=0Du>29YzgW+E`sWJ2E_3 zZL}idQ+xiZpZO;nI(FT1T4Z?(N~=6?h1bA${+c4MVDYr#VU{z-V4pY{BEs`{~F@iIC60`1QM>M52j zRkYo5vBB)eNXM53@|RhpUheQB<@w`#p_>3EY?53-CHHHe_G?~v8Ie3A^z4rB;{6e1 z*G}q{FB+Z#o&(0`nUvb55Itner@O?u-^rh-ILf4jZ{)5;l5HC|J+h9!8(`3$#=)MQ zyzIZ{xwi|dopRRZKKXPnj>#lPZ)}~q?=*Gj_JE>G{((+NHIotJ^kjX_JK#-YmZodX zM-`iUHS!O)=SAvu9kXgfX+>&RD*6nFxgYs%<`6AKc0k*Qqw%ax>M;i1&ZBclJpKi{ zH=S0K76}AmJmQE~VK_{(*;&(pQPi|Oet`)(`fj-%3Z>=h->*SGnmqn8?$*giC|M=t z3bWY${MA3#R--K3)(j!00%L2bv2|n}MNM7?lhl!!qcC~vVsebS?->`fjI}q63BpBY ztR!GSvH61gpOf8Aw{xxbuSLI5k^N;*xx{cT%b=D^^lT5>Ub-|H4V|Y#Zf2m9bPipP zI*a^W9`&?R0rtr-94WnoLYZl(Q~wHeky~LF#}4VXCR?LwCSRu~nwOuXYcwpBH9{Fe zbQ`2-ipuHFpJXH7Ew-QPHhwr|9eF*5sTgb_gQQiXEK1!Mqa6vEeE@abNcwc9t3SG+ z3yU7(aRX&=Q+MVq?+A1!ccRXPcqezIoN;rc`1Qx5mF0Gtn0L|lZa!O3@4o7ZN*=n^ zk04@2mct^5wu@6rnHe|S8cy$R`L0AZt<4u#cT2ub|G82Gv?S*f+Nr;(u3nddHrC; zjzqkb;;No-kz~!apVeQ_NJzWVZn8H7R&Dlr$s1@zYTAKi8Z;Vuz;n-4!}icX;j<^D zg(hbumFwA|AFHGn_77>^KE2!15^s1tXJIQyWEjhCUfO2&I1jZe*UY+u)sZn^ntYy= zUwcv9b9x<9_H5cTVx=2lFCEk^9%1g^l_o1k(9~txVd2#WMzANhy~{ed>ue`mK~8mL z3w7tAEk*9zY#9fed5ffKP+t}+VxWOoZq2sSzH9a$&&#l-?>N1wJY;8EJykgrPE0p3 zJTNg6VTp5@l*j&jD^X&5?!o=Tv;DWyGp7-MEct5XS`1ZS4d7X!B!`q%2bK&K#6d!!1c>5d2Nid+tey@D*8rj@00Oy8i_k zU5U1Io#+N}`8Mul+kVn4jU8h0#k!7M0sy*n=fb9$t=}%|^!i=RcIOIby2s9#V_IeH ztVXKQS&c(ud>Z0;(3loHJaK$$9smm2DX8ZyhB9U!*^nBWBruH3J+*SfwWG@VH6(SA z8EJ3qc)5|4s{i5|z#D;}z=@2I#C}4cB6+f~W7ir{Im{ru3BYwQf>YZ}k_+7hLRwy@ zjP5j@L5dX}LxRz3B>1!vC|_NwHIAj-$jX+l_GMc{Gim0RE<{C)Y^%HH6*~?;`QV!Q zlTfC!j0!9GG>fdUeTn&9nveaLNU>)UepeI>nRsWd?2#IdX8iT$16P$^k4{>llzMa3 zOo8gVS$Zk72;Yn3Y_RFvX{a5_GYuMH-A>{$ayV2+TgHcUQrU<6vJ^jF5+!san(&k> z8!I(t+k0|$11PDLXbU`zTe_c|;GDrdc}eeebIaG~$8RG)z7BH_fJqH>XS{+jE0z*; zCBE?<_AXa01J~?8?x|;cv#qdb;|aRi=697Ifu{4%lrw9;?2WY)(AlO3cf!k5E2|QN zZAR)9zDy-%miS&2$I0MO3O(^{MyQE?pnU`ruiIu#U$1(s*bQ#2cqY)n$|PpVk!P32 zCRqdMa_@qg5_eZ0O)Iu0{v}74o2{!8$5E!sCe3Md z;Qa9}8|n%jk!QckkwkAUT2Nd5V=I~nDG+?10(R?AR;LHTsO$_5^J6IuO@@pro(S9z z04Um<{-m+kUY&kfmAQF3GN8g51V#0KSArjw^n;OiATb zowkIjYlZY)q>oj|Z%;z@n+QgN**@*0#cRWBR4NfZkR`#MmM^aevz#6JM@2TH2V+}^ z1X{@|(>n-a_mhI5icpch1jI(zq%X+QazO*H35#QU^u@|U426IwAoezXzte@+NOR4C zWear7MgQUV0+#Rouq_0eLLX%-@dw8EsU$8%Rmhm>-dCAea$I`1GuY^yCAk-Vntnd@ z;cM|2sj|@nt7O5%P6a$gof%$w4_`yOG|pd44HAy zMELT)GJYh<5tmtls5;D=ZKqZ~Eo@$<$Ij&|$5T0*hA?&l3>9h*1t0Up2<3zUr^g#rM)FGICzb(&G3+ zfBWB6f+YtdqvMDrrX5XW^Oya(_eT26tH=0B*OTa~`nQGUmZ9XXCY#lheT<(YaE!a8 zz;}}2Ci+0u39lt`xB;xaOziF{iLd+dw5+!mF;LQ0_LiiqJoD_)SL!g)L0w*Pej+IOk>Y}3C>OJ$Hg(X7 z3y?y&q^9Xc{`v3{!wx34N;6FB^EymqGnfQp1&)rLywg`=z_99naVTD0xjr_Df>f=m z(cPa^?9&72l1m6ibAW%yDlQnM zNSau|jtf7>YOyDkPy>xHr}vsLsLVOGJ5=%7Y91uj2gE@^r4x>J?&6^# z216>^LbZ(8wC>8M4E09Sel?-!{ojv&P#|)KVqu_KKwPAXP{$?R@~kS{WPwD~T-HwS zARKb2j4YjcLUuy>Auc}wkJ^lp*y(#Tj7iRvEJ3ACVCLQ*2u&$@0{GhX0h={jPe$um zn>|%UQv6uD$w-q)u}#-coARc3MRuC4I)GrMr7;^%iRrIr_jOx@n179W`1{|XjDd^3 z1+OP&9LW?JbWp)yo218fQvd4D?G87eBf5_>0&9(FI$EQOi5D1&p`SV^eW@^*&Nszl zaP}~Y0ozZP!LsIjzQ9P0U(FK0VzY*iK39+WeL%oOdKtI#%>L1HTJg?2xBiQX(3_4m zI>+K==vWo{d5e*a*Z6oD%BBXe7bB>mGh3*Yh7RS7$+-qc#Pv0T#a~@r0AY56&5y&~ zpWU$+rR|4{Dv7Tdt6B2%uRJ{$oc+GwZ0x5C)mM+d(UINWbY3Iv2d$+jy@^s#1>XLK zU1Ps>tJ-i$lUpWm3^%6U-ga@W~rCK-?kDWF!{4WEmNeWKC_XoA*`&( z&DsxfoxtKE{YgWm;osaHDo>B=JFt4|lf?6!GsHFkD^`l49kFS#J{D#bP;_(O#;3EB z5vIYB?)B)?eaNhfnI5(Nh7QtFjJov67+@`{Q-wEe>txLngStt(=&I7hkK(&eg-hi) zh#R=;nvr0vl+t?yPp@Y10$Z&Fb|X5P$l{t5$3qtJ2kj=$VN^4AS)XUzXP0~{TXFOf zjtS<;+zOa{L!cIhfj6&wGwi!h76N`!9IFt^&cbSksy_)Z57%q$JCp@k-s$N1tbh&IE)uRB-=db0?_+<_cda2jmB<`L zkQdF3PQs?E5u8FWy8qAPi0H>Bgclk5)!j7fULe%z5Hp0K@u;6Tr6t!wU$W2*+4VUB zz8y=8-T^;o{4G*IJdI1iUm?E6)xUF+i5bGUGvY*a-1eYJX4p@rir+#@qh0R|K`k-G)liU-sp0D-LZ&xYsT3C%Z=lM z9tRGP|Hl1-?=tu_wE*coJ#WhS7koF3(ZYAG^+yOV&vIqZJnajXs+BMtG7tmb<{Iw| zh=f4BIoh%}Xd~pqg%SOJ6*Muh-5T6>{~QDZjzAk85%|y{Qs|jMNYH1k8+$%<0**F}#W#cKguw5k(3tTl>dga@`8+swyU;AGJZ=`a<6nhL^ zHo*|(*|TIT?Ko$TOFzXfC;>+3JOlb~eERF}J zvLSOi2+8WYo*L#i+su=qbg3nA-6376HaJ8`#N$Y8FgDxcXckDSw~B3bFYv&wWD3$N zRJ7p%2G9|`|CfU|P<(I;bM8tK;NNDXhoJNqmIKo05h1kmD435&oP%15R?_^~Wxni| zSBw)Yihx;@Kx&alYI-71JXo~e|6c&_vW^33)0xyiczKE&C%vOW^?%v&)7~!i4}a z7Fb;fVH^ewV}%eN$t`r&lVWU&5Pbk}_`_|D*^E7YSe*O>cPW)!2zXNsS)F$x94*6M z9)s{@Ydb}ch==w3TW+);$UbIcDm12Yp+9}#-6A+HHRwp^4UzMpK5?W)3#`UySl zAt(|;lLQ?ZqTC5gKX+Dseuz0=)YvX42*u7~1NJN|Ka6ytc>zvQ=E_E3cC}m|oxuaF zr!isVGFE@JIoRPXYxW&uexQ}uss5CDSJ>g96!Es3!^FK1)Gm^t+7X%Xba&W_Am09((VNRewbsTfGoAB*%Mv9O z>YB2z_rO;G@ZMd+3PRzf2V~5k5aa-fzid22?9+d5k0H1k2B6kI>;QhY^bvr^v=#!N z7{J>f2en`&CMJCRq`<81xeA|3}Ef<~)3g z8LRi41YDR;KO8&ox_H$u95A$Ch5C2$`!T`Q~+ou8V&~87ivT&O>o5TWI=@SBG zkc&6(ZW=y5ak^WtyMANJEc-|5Rd5+D15A;LYO>nr?}nDMvGLDK-(}C5H-XA#y3YGy zZJt?iXJDjT&v;L1ums@VzYo{XeqGp7-%_>PGgnv!JZm@KgZo`@wwGf}5Dv27IlgsqN`S-T{rL zONpT(=g_M0ojGvEEyJH5*yP*x&4WqZ%Vh| zOJO`J1Hml0+Oyj)n!OcgPVS_{&Hi3nWGfAbw zLLyh>Onn0u4*dSJd*tAOX8G6OzvP6!@?CN0kS|`eeqy}F z7Rn3VOMBLL{D6=Fl&uXdJy$$@YRZ?Ki1SnE#M-kG7hB^duj@zIZEh9x4jX#AH>Gk%q2yF+4!r5X{D&&P?Sl`UEJDr z;lR?l`Agk?n>%mQ@Vd;SekKlkAg2jb6k)j&6Aban-5LDss;kI_{!Mdyc;AQJ(5lE1 zP5fpOCO_l3n|q!jLvnnUD%Vh z0@F|tAQS0zVhvgQOkvTS--}(X!DI6gk3-l*)|;<)-4g*ZYdHUdWB-B@aU#fOuL_ zDjWBV0U5^(yRhVxZ!aT3o#c<}!Vfl*_v^T1cpiZSK}(`~V07}p?xdE0>l}9n`l1q- zS8XOI5?$EnELu{=(qu5s&$3P zU2$_JC#6gB(vi;`^)Xla#nUfOtneB2$ut_?Q7J1-bi4iM^{yJ5#rtj7^o2|>nTT!f znXsuEtK4O3TO1(3_x8_{#QG1pBVKn4qalMN+NT>!vC$ZqTKQeyD6#jPjdH$T?9c*A zFwK*K%J$=f#<3kubcy@bdOGPIngyWZh5@0aUVaVPyU*F6-&8O56oMa~${PR!sZl~V zqguGi+m0*m11~tURGeL5@^1X4oWmM2$BKzu(qT}Ai0>;ygWaxRNgnL(&$@Zg)%sG} z;HI;&rv`%yy;K-$*=L{Yp6BQ_3*8)B42Cw_TrpVgdVc(?EhjbW)`E5OcEnIOxeVnS zMhyVoAx6gb$pSN*sgIJSJ>OGeqO91wDxy4hg2WCqwD(7^qU^uc))CAc0GmQpmG~e_ zG3=?Kp2Qk>#ucrRSjX28-R|;0Nb7V)U9ZK{PombkGN3rZT?JpMvzT5TM*ykOJ*M9F z{>NKx(SIlT-HSN=q?@Aj;_+Q2 z@?O2>VaX{3qh;|lxvmmDo1uKU#EZn%jQb^ZeD#I~V|yYFU5oHExty4bw#1W91aTm& z`{n$nB0^jsa5O9kvy|emv{~P0MSBj{t+ajVPdeK-`9yN7hpA9PO@XmXmk!2TgCsio zqt)r({{FGeQW^h=gu?qNQtFzXp2)F(!4L0`1e{dM)nVQ)g_Bc z(cUGWuBDxw@+T9F>~s795UD#H`iK(G3&fo^e%FX^ z9$oV~a{0lZ`1^qk0j%E8r|_3v>aFt-CG^v8+&j881I_2>e%p?By60uE^zUatpNWOc zvm1%MHK3V_x`9MRm}CKE^2q+o?O95lH~wdi(1qxRF_^VE%1PVUhP>e^Qz1RTS^k#*-bBe=I1|PCKt3ZWw5AVb< z@q9YRXv2C7j}HP<00|(gCQV+AyP6qE7d8H_EHfY34{}mteDbPo5@Qjr^UB0)F=v2S z=l3&|c&zs$o>9SgcU5*#3gz63^Q)b$aj0B{#d*uBBxi(iep20%sAqB8+sPh>g0v2c zkcJ>|OjB6Lk?wuqcT`2RSkczFw3Ze6birdWa_WcxSvRb$K!_D5sD_Asy-0&KJ=c#4ke;WA}#z()ldoNg{zO!{*5^2gQ7Jv&TnN^jsIs zelk@BGnkAE>{xoH_3ov^GLlDXm|K4>@lg~G_&5U2a8-ks4yTq4%VA0>6(FMjkBuiR z;#mD_=!-t^I9G|@`^kKV^k5}%S<2nVU*O!GuEtkW__iD_O=dmXD@ zVB3k*I{y)XmOq&hiC2VoXE;oKUSxbl8yIzBja~OIBwV-jP6Ys6;@fVxW{har z$)&KZLRbo#kT=fEd#Vcd2~4AY=@^gdD(Lg+=6m9#LT$>fVt%_yuGi~qyu*rc2({ke z_{CjxF(a zZU+E334;S*jhE=~+1oBmU+aDhL2|P76CG+AF2~M`fJN9?(MHMcU_uFZTMF|jouY)4 z^|_#5FF<<6K4Fl|MJK01;8y?sh@WFMHPa=w`GxoDPA8RcxqKZtRSE2_#sJRn$+bJ~ zg)+*cXxBM-V-_DBD%(1p``)Fjn7LxV^Gz4XS)ePcOWZq=xnk)=VdT-w6|S=zBt(|A$-@b(r&x2H zqb)fN!bd>Mq6d}DTiTcgZe8P^{WJvEdd8%$^){fQsu!;N1FK{1 zgEs-7^#(nDL#peh7VzjxXEkcLxLfD(^vJcd5FJ~_0Rog+cfDLmV{5b^ZiUHDlX2{u>NMzYu zp=nsa<37^C?LmT*Esiw9=Dn7v7nw@4Yf_Y<5vz=z-(%Wyu34h&_t7-69*oTwPmivR zKDw7$=Grq+%D>vcy4?PkZ3YFQv6y@#bZ~U^M8Go5Nib(p`0Td^0M}N%VWR{IQFdHc z_`=#LY{A9_o4v7H*BnkBQQdh1z*YB)tGM_G+Qrsj(<&O7n!iN!yjAS}DyWi%|7?6@ z|6t#pL~_wq1(0Yn`+d6$T6d)9?Uzni7q*v5` z)NY#W-gI4m-{hhOr1$F^%C5r*1}P!h$9#Df7xZSE53AA0k1^rfQ&%10#@33G+wmDD zE#&~9dNkiF;PsH!L{NYS2yBI(|2V>+^4~w)ZfQfaj@JlZOLokScx=K@WJ?zOL*5B? zsDN4~G?W0~Vrm%ih_CZDR{#cjIpo4Y!(C(EseH7vKeZ61f2LdxrI^8ZYSZEt7WdD8 zy}QUVs`IuLn-ph2Ca_tNzC+=OMu@Q-5)&R?SZ=rift#v7Wn51Us#CW0@_JVVQEP3Z zdw?nP_tJZ||K;wqm))>5eCc?J&O8QAs_uh@EmF$c<2Gz zjien1;yC>Q`#tQ{Dr%3vL$jt5^%AfB*S+K5=W>iY_hABs&4yRB#9hNb?%lJ-U+!I7 zlhTT+;jm_E;X8wDXJ~b=YTjurd?zd$DmVVJ^%EDZh41Rs{MENdpx{0Kz;`h8ANVeY zz<{ha2j?tUE~ z<&n>)bm%2FMg5}hc)@K6%{MO%;)mfQ=OPHp0(}fLLXcquq>g`_@+SZYj@6@isc(IA z%&SdX>tm!I8xORy^6)yyabGOIXY;)@gp+Z-BCKv?Pn6}dU}J+GcRa_Fg80yTSk6M7 ze2@IwrkVD?e{{na&*m+g~Ui1Lt4vAYV zxVn+^$$hbLe1J%z*!~RlNjBjPgC+Je-=DLeGU%~oC`U}l4PPvQlUPN70Hx(gKF2EY5ya#oxUQ`BgKh`$FI8$8jj z8Ku{O)TJVK8=-eE7?5aZyVv#~6AvbRpK01uZTQtc@)wE6`IM?9@dB!UTX~AY^+;9D zcYZ-C;Awi`t>SMw-kuR?Xd4O^bxK?7=+-95V}biT+`9Yc*^2OY@~M6ps)xN;(DCQ5{Hu*TCo`Z%kUlKLOm@46mitP^@9lNb zkXO{?9kum%7G82|e&gkz=`vd#utu+bSbQLRGlGjaU`z%Un+X4b@%XFd!)tFd{dd+qL(%Y~xLnF`1Q`VFSaTCsWbROaZ_o-+SOzWMa+tY15(i5z5Rqvi> zTJ+49uQDoxr<1MD7}WwA=$ma1O9FYKtEs)~zMHauET{VxG40C&M=r&Fxm_>u)m^-S zv-9lHdEQ6CZ4wMSdp#R+QwSgh2uyNFvBBqll}xQsL#-qiwBW1H}s! zf#*AcD=rX$(W|7!#N~qdSa8cb0XIW|R`jFm;aScn+zcM08OU7uez!m&p+gC=8#ybC zjs29rc)X7H?twk?RSHneIh>pA5h#S5yCH*sS~Z8WN!!N9PU$EIyT>tw5ViwuGc{;G zEqU*+0kM*Bp|~&3Wl>2@jwCm&of`lL-YHAM!tS zz0OLgDL-&ZhY7HH9#q+QvIInt>pw)^yT!xYec$f6{Z25F?<9IyyV0NaA5%15&HorL zB-B4+i=zTr0;8*sW<_#{yf^zl;w5yH$@dnw#sD%MMS4ST*rZkR;K3C=S(ty3JOImf z-@fS|B#*Hy#WrB5OF-#3g;Rs~pSzkd-sXinwSM&nGPIpDU^R0WmR}J~LWC^JMqcNyEE!Zl}6WoN9L- zMR9*wd6N8#1)vGZ(w`C6_d~de3|-mtD5gJrITitj5s$tSpWy{2(s&lNKOKj>wx#;A zUhU5U$TRx%BkM0m_>&`mH0H9z6wog?W0tHAhYaWs!-*R~4`i&S6$z0VS$r4VxC4h! zuMb)+d#O;$-gwVG;fa-VR$ff?pJCt`*poiH5u;YlO-beqy_v0W@WzAl*o%#WPJj2v zo@E1Nx-33@IK=hb2DfwCH4~w`LCB)8_I~ zJbt0usBA$e6V;(G?SSc>A;X^upzeuo?Ew8AlQ_N7c-=ASr5U!0gb;Gw|mbpJ;MIaCsBx?;>yDZDjUGmqA56@NE8pzpM2%S@Uu!uXO@WrkG z;lS<2=u2&ZT}7bcnm>4mo%gq&l|h(-WxsK|V(%LcACx~^nWfMl_eiD-%&tH6X#iq& z7VTWMy2elO^X(h=X-$0R$m6_<&vS$AJu?m$6mV{tA~>}Cy;Z=iv!{xzr`!-Bbq1uY zUDjb_PQ8P8GbRTQuD|(l(5)ANh8MWG!HH)IIiFU|3SId3kwN$AZqcjMH09gyW3{1? zW$2%kM^+*sc6t3XRJ6;c0)YXyiU7jj#hYZVf(Wgk(oJ&?@Kpzv=WkxX6!PbyWx4k0vKwXh2Tg3$T2` z;fg<;>3TRnUIRZ*DWvRB%mUSlx}4L{oG)~n;aPWS z|5@`n8{AiTB+T6I%}!st+m%Q(A{i!wnb8MAT<|ab^IBcAZnZ9b`|;>qFW@2CW5EWJ zX7QCRQ3YwYw81@Y=-A+r*WTJ^a!1~+ib4@g#1hWulmE8+Yv1YBM3f)C_vnfE#2#ud z>l~>LpD3W!DyiathAj=V4&484lAkfOKSZDZp=9bg?rt&R1Aq}V;V$~cPV^1-?lyJx zi%)&dzot)*H_d;YXGz48^xir|ESnQUHk?=EKIiwfXsk8a-_aoN&2lQKqSJbg$k_%- zHQt`_7gE*~09Y@Go8*oowb+!T?SbkkE5Ow%b6&9IgTg{~{cD;1q4@A4txeJj`GHC) zCm1g~*c4uZah)!!PH7|ZS~1s$FhPm!W6$=j?k6ZpVA0F8<4LM-l|gH`HddN?R?gId zb_G??(#XG{IV*@LVjxYCsT1!DQ>b$?ezX9M~y(m zUBI@+Nq~FHV@4sMDD%LuNmCn`TP3Q?4I{_PnTfU|NLQTIvxr~QY*)566kw_hE#%yR8iG$z)+dg5?UR4VT! z3>}x66m7q9uq0=%1IMC>-jv>&vw4ho(*D#vpHSLy!VA#Zs&MDd3(vBA0Ky&obDojm z-cb!_%xIu3BBO zvIG?tTss<^za?g9OPmUv&vUY=t2BwaNDDYy?r^Wh?bsMak{_W(4QY$d`#u<0(J^E#C|M=lZbYMI){`u|@ct=;M*E z*`S!DNVLNFD3hL%oEqvSGljvj(2r8xXXFC^g7UYvf|H-$&u6F;?{Z5 z{d5<$Uuh~UU}{*gi-Hn}EZXGaTX=m7wG^$Sbk%j&=~$CK^|DyjWb|k=TQL#0MY;zB zlu_0Vn{$p49;sk~@kUT9qR~dO<`Al+-{4^G8XoXJ8&Acwn~-r*?DJU zYxN#410=-FrEpQg+rHjb${BSZ@8s?ct4KsHclX?sw@GdnX!y==#UGy9;1*^;LvpcaZr~XULE%CkhdL<6`4xhSjnf21+Jd3w>X`KQL%dfD|g>0#TRQZ`G0=n zoctMQ84-hifqx1&Txu!BA#A}8z0%i_Y(OJ#Ck+%mzIB;dY{a;jR-m|q! zehB+|Y8V3NM{o3(M)6frwwG>oWNVhLloalBh^3aY|9V#c_#2%<+?#V1B(O$2vm4@$ z%$peNQa^aL<9RRJ?wb8`jgsfzz(ZBnF29SY&9m(n$E^qSZXvYuGm}=Q^RQ87E7)L3 z7t9I^x$a}<7wl;nA$6&@4Lp2r=ivckts)q>MVPKy(`KAe{hDTzYf#o!P`QuV4ao;C z#k8$~(A8}9Z=*}X9yH^ZEY!2HAw#wrLFADlEY_Bc%p3ect6YB%!T2~G*LR^7_~fJ& zTP1pxcUs>4F(ag9|MPu*3+C7k>K?;RL_2l1OhLdM(*x!ToXE<>F8te4W@ph#j>&<1 z^bO+~JrzT77BL#B)eX*32|(k+E6(p~D|I+klp06YI|^pjfZqm1)ZjVLMoz4b9LCcacd+yyPHB>jbsyLfQx zM%W)1S+x&~npTz@PD!GOG4;WlOS)->a^4W{A6)~NGMe+AP-^71%g^fVTp(4yJ=v3K z=@K9_JMWg+f-zaGBP#iDu({0>#@dm=9U{F)fUW_u{J!ghAm^u|Ge+IIdCK&!gKIR7 zM(d@mKOQ-na($_des{y;r(2fEGRk9S6u~deHHz&R6k^&U_p?@2LF@f>ll30(1s&QGyBjB-F_;#>Q+_+YD)QyST=!arudLdtT>(zW5*aN7kt! za&W1e$&biAhA-OL=*~IchEA{OZ+QPv)4!#5K2IHwM))JkFzx0$PQQR&wduag+3Ngc zXkTY#!7>V)`h-nwdds^%@oH0m6$Kt9G77?`hVI3EdBRqXm)y|!XK@1;?LKfba^{uA z>Dxq+ZUa}_YkV?jn`2Hb&QZQt0T}^v^3^xDI7lq@^2S}+C~P|TvmpgNDre0VB~G2i zzIX$PLK6J@e(s&5j(V@Hxa16tgZbjJ>)gxb3c`!nQ9^p5i`@?D}@P&KVP55#MagFe%=;(Bn3*~)tNj{pZu zh_UJWRdEwV3LRsyPnhA&+Exbod0h=injgn&xLW1^6~v z8khnG7A=2Am8mLj%ql0N*iAWfu+r>Z~g-W%d`zaGB>ChrZsljXH+*Yx7)N$5Hor>Mhv z+${H~He)#ZuAKjz4m?_56-N`Z&fL#>N|=!M7E}lzpfIDfMO>^#k4pESvB2(Vr}kOk8_U4L`kV$)01p? zaTxh8PVx%(d#K%a0tOzHxr=kz3}cEZRd-w^L=0Yigla@gW_o_wE>*@clu91O*NwL| zG4(eGKjSgpblN>j7(^)(F|YFVQVI1rNoFpm#Sq3?n8diwCf^WqZKsyhn5ivEa1h2> z_cSR|2dLQt4Kw#Co(@KZUdA?I5c9G1TWf$Q$NBh!HZv6z37{}!>qVp#Om#I4NCN1~ zG8@JhcP_~e{2E=uBsW{S1ej2C03F*84mH4{uy=loft@iQsVRK`FJ;Bv`-bjfOnyD4 z^YO{6Mf;uv*J7*i@lPrS`GLEb(^OyeCE##&z6eFtZ4jWW(zTV)#+ zsDf2Y+QP+cUJ?4H&DIo{x)(5LdhIg^$=%OkQXKtjxTZ=cZ?5h_qmlkpHmM)bVQdHX zR;-ScK-R0iGeQWjeD+e$V^7ib7PyAr?&+Uba)d#%Dpx1dHchIG%%sg18K!;?}k3M0IT@BU?M*7xDE6=Fvg|#o^@_ns?|5{lwW&NnVvFM1`|D3XY zp6+FIwM#b#Ce-*YdtebRi#Mxy&r(d9q_vtw20~t*cYP`d>$bl2dKhdp#C-|1=w_YE z%94D_9$&mE;Oza0n2@s;2JowekB*iH(aMdTtaBG4?DdT${46*>=Z%uf+gU~M&B{p* zH=(ovU^a~PG*LZy8f>e@(&f!Hy{L0}R`N1&oX{&iriM4M&8}Izc+wW{E)=9=PYwSWM*=Qtl_vQ~uw;qJVE_<1G%9+HK z?=6ER!H*q74+R^|eBOMAb46ZgrZsT}knh#=x(l(bzpx^;`XSS`FR4D;s+ZmiK~t9O z{3zg2#oV=_Umf%-msQv53CFX7!+lQ~1D#x7lb_kACum{~f|rGMfP8y`PfYH(-l&$K zV7miUs|$&BqzTwJ6_-2LxtLBs$mi`L5>oZEU=-rErers2T*VYgx<0P^u}C}N!u0$b zT^5LHr7#s5skstd?_5#Ug=T6HQhb(mXT`hH1})Vf`N(zFCb#ou){v2X?A*Yzt%H|V z@XC_=x0z9&EJ^51U+9S46?mqDc)ip}w~y#+t@V;3(GwbF**weAT*dc#LahP`RZP?6 z-NtsuR3ib^B%!9=^LjBm-|t#QEvUmn(;{{qUduw|v^t;WO1=zG{N&U;@aF{FTysa& za}}gajoX&AJ~TbhGYD@8pu)!8j*U=hy({-UI7Wzba~TXNyz`kHr@H0C@}^j{DevUK zHuntLaIO8H*D7q z|4*w5w>wygb(LHy)jFuJN4Jr(JkA`y>Hb?XfEsA&8_tY1Wi0i4zdcp%Ka?5xH)2v( z>+=2yYLrPEe^jlH=om`eZd9Dp2RvQH*3Z5qZMx906M5p(Q`UF%O-(l@2bi%=yRx;f z)ty+D>b26M%iW-hY3P$y1$q4$;anlYnW@{V2$Tn97BcH*&q;@6*W!vmgB7hN>(Hl7 z8Bi8C@!Ft|A*|I_yW=mso~=2RBC!^Ns*(Sgtvi-Qq`8J4ujYoFh`R$6cdIHcgfq=$7d#IvK{gQ(B*c{ z3m`UIZumjE2za;nt;(L7FW@kPRC8uUnIt!QzGfJMvL-UC@}3!r?-uRvv%Q7QK0_<| zS3ihBXkMOnOd5Pe4*J`qNgst=xR1_px5Z6VKmPalI;<1g`-tameMSEcc5DzaN+{Y@EYW8GF8f0>j0 z=Y@v0Lvk=00O#uT?5n$tGTIi0>B285W(?P{Q~G`eShUpg_BarSXL|h=n-cO={ADq^ z*7}AhDfa`M_p$rF5k*J3>(DNTo-A~nc>3TjxFJH-5PALAvfTF-!;BzY=a-B-Kc5cs z^`_Z#vIFH6rRTn{y$Y-~>Nk6%80o0;7>o-X+g?0q&A!)==GACq^8*X%cUZq58Mx$h zqHm~wE!7tj#HMw6q{r+1`lO#QDEBwA9348lz#dX5z zkCx9a9os@u8lVLGT0=AAMYuP=8b9rQ7T<<{Vm$Y-eJ|#uUU&whs9_>xup$u*^wO^e z^Y1~9RwFOlxYYT$PU|oCb7Mgv7uCeL<4uB%*)n0YO2D655$-qQW6;^k_i5^yuJ%Ke`*zuJk-9WM>Ej<4> zQTCLNyGzTy{PV#xjN0FZ9gQO&j^5gO&u_1rsCV+t;g^ckoHUAe;j;bIEyD?YUq&#F zZlg{veWmN|lYW#hA`B4Eh9&e@=B)O+LI8l=jvN&LMnr&4e>5d-Jbe_i#inwDWcY$z z$8@RQU_*%wVB@;*z3cqa+1vY`&rUcs*xYHBUSD`K@jVK?3@vp*4}K4|Pv{33r6a>7 zNAVf^EiVZ#i;voJ(npDVNp4r)KW|ffpb?GqRko|K-MO(dMfz%956b9{(*D~CFBkM0 zKldQGJwXbllyVE~-)E)KC-b1z`H+dYzq5BB^>+wMS7F^at@?WkZB|;laj^4&g-#z9 zz4$!18?*B1P03`MD(JKO?eLY`k!=!{XAFB?`0IWn0lxJ`@UvJ( zU$#OE-K(iU#2dHcpK>1M>{~%sXZ~n@hEPfjC_~x0e+ z^vm6tI^MU3p#h5?OZ1L4Z|ANJSedK7hhelMsDPQ6OSIRAVC$j{e`&`7xjp?&C0lO! z9<|%iJ2xCfaCayzT}wVjibag*WCgw?@o@sX4&&!VHnZj*OSu`LC$Trlf4ucDKI%YX z`RleH(P|??mDzOKO&y7gn)~PDMheq42XHfgP<(=+X}rwSiA^cT4gJz>+)iSD+pkWA ze<$ba(sx75KTeFnQxAz(H5@2RWf6Py!}1Y-aZbxy{)JbjzUS%KGjuk z`#6g7vEy3y`N7SR8r@Ro?_2$XZ))H@5)RM|pSbr`Y?O9j;T0%DV;0#nXEL% zAVduj1fuFo_Pk#0Bo`UH4oT4;u?9fGoB=VfyKtZEjbX!aM2psCH{*YXNlF2Gh_m}Q zzd#!)ILwcMYehwDE8)VH=U@j;|FfjWs58D8ck}c9`FlOaGbkG3&N@LDNhq~<>o)K+ zKD@3hbIIM@0R?+^0r7ip=2AV45{1k-|6+QgwNcn$bics!YF(;XIWBaB@}pJuZ^oL3go3 zORC9iJXK~CN|Hc1PsA-}awWj+HK=_w*&^cmRDk53P0Df)EZ4BVp@LMR@)y!U?-pqI_R39^OzDcEq9bTyINR!FyihLacQg zyTIEkicuVazN#lptmOoR3jsPg8Gb}{?;6Ar4(YBCmK;)RI@L~*D{F)(hayyLvguO_ zU(Kt}F@}Mp3P6mpq%WvR>k!sa;)<>^b_7x!C?z z_u_^aiE7}z=j@mk9uD@7(7#dVoThtl!=G;baO?iO?45_U9|=5hA+UJYR7L3`G1ujN zKI^FitxQr6S+ouF{&=bvm0#95 zXeZnVIJK%HA`KHLIF49h3Iz6P(Ko5dyCyr(ytTs-fQ#~>2edUltoJ3r8wc9XhI1_~vh;V>g(&g8&})$JEw?zdz`C+unePr61qyk2^sS>7!)k2_w~k;(2R z9cI7NTYG78uoAQ2*za^Xxjkj6lFGQ29q-u?ety%?Zq6Oqh4|$KHaD(*80*;hkz0ME z{nOtPwU4zc5A2+s)U(;@cYnTK*(g5Xu|MR`>o0Fdyftpu#O40@WVl9C@dDqO*L`l@ zdMP@o^HvvRIbvd}_;mf>e2lBJnwPCxvi0q+&yz>mrGAr)mxooR zQ>h;W4=Z12H;)~YZdoro$O-xNU@!jR`sAc|+LM23=pQX;;(Q&N=3(rcEh(ulr>ek(rVzn*8Q;e$JZ?#X8m2I=Ab6!`@ZEjqlI5mEL?`i*~ zX)P-f-dxzZao{}r+QRPj=eveapIa=|Isd-(URUBfCb;R1{OC~9;dHO{k;mVpJxg^v zQeU)N|7e&(8@R}y(pYL6a^d6kj~nef(~ew1XF8m_x#`w1QFX`!VI3IQPrY<|-O6|I z-rqEuX1j<#2Op-8+z!t&Z-{gN$RI2nVX)W)U?Gqe@D(8r9b%*@r#37!=uW zd#ChekNtzE8AI!?lzzSMYqf&2!hQL713Cq_@lc-M&b9X5^Dq7lwG8N4LRwg~y@K;dV3p zz_!YPM$O*fwL0zO1EL)vY&>MWZXa)6fPP6gCar#r=Xs03JAKt$EMc)v>i%=@OlPcPydE}13a)F$8nfjpFwqF>H|KgJ z=mACOdUTfEj8)-)`+lck7g=`@ZT%6xaf}a1$BsA21XW)FI2VNv%uAH9c0ru>E zhCiD`uSC|-`cGY$@1ul9N!7%n+iXTWwHx23vUNsk&StCQ@Vu8mA~?&!7HP#0*)iJ`3Mt>@k;5GZ15xVx5XV zMY*)7ZZJldsE9d`Z5yl=GKG*%|D$0hFxGVy`N2;qc#P@=PfZD8e8Z(QJ*69{jY8w? zW&tu=NgOLz@BJBMlROiHGxJ>1#t~j>WH`yjMQZso>R^~SX}6CYaxs<>lKoBiKAgca z;=v16!&odg*GTWG5pNUA=wOBQ^m2f$C{qsaX-D93x?%={-1w;K-s2?amMzF@=KkYL z*H3uXAUAwD3{~}hU%HUK@{GHAR-s)F%|$Y}>01}T&*v@~htZqomFl4g!aMdC@UFuA z9~%sH@3a%QSeqC~@qNF)&1w8RErrZ;0pB7@@wQWsmrji1exN7Xc3zb4l~VnvrRrpr zyk@Khi|b^|0n<7dV(iKk!pG$UDq+ofZ1m)B9=BkYX{1H5De~dUx!7DWA;<;rJvMU0 ztj)S;pAipzohncwLyOp_^1H&!k!gc-5N;bfQl-*Vi-AP~{HwV#ZTUxFe69dz z+f3GOHX>u!8qUqO-+nZF;G%Pk)YMnVrG2|!q%p??*FQh_oaRVQ9}$??&Z_98^xCh8 zKfc9h_hW;ZiLxlz6x)H6j{PfqG=L46pP4Pdm}q*gbd6aCJe>*}LUoQvvb+P>IRcn zduIhIiXJ}@T&hhS$yl{M4o{OY zpeV%GJb*!@aN077M%8?ZH+r3$i7p;yTBHndH!PPMMA4alT0gL(R!I!TQQZ7wKLj~LXvQd9W&8-25*YJR{T)Rf4|0a0RpVxVNRcG>S*P*CcE4yGh zFGULlB>R8;d9KKF`cL=73+>dW(m6q_46K-$?XyQyRgVg#kK<=}PUV?cvX2hd%wyo( z>qn`}XCdI(NRRP<Kf6fk>Q79TD6AvCXp6U5UK#x+zjR zEwnU|$l;end8aY`M~?Vc?6vVjIW%$0wNuz*L9V|PqTdjT%!nluEc_gy1A`9lpMxtz zh%-|>8QjN!y7B=1R(Y6jHE<(_?h(`DK4%hb-$Q874m5xR(&$lbNq#pD#fE6%Z60oc zS|Dl=oNUl@vmLnZHE@eXyv>2y`Q*QLfRO<5z?*2i3L0aiJJBIB0O(4H zSri;o0#1HaD@g!~3lTdc+Sv#FWR-j0R}@y+GlTJylsF?lD2$>>qu>WG6BCeNCPno} zFVM2x-alSr$7i&s2)%>?kPvLXBlJ?fE?R;muOi;f2mWUB&FJJ#IU$9T$K-@3usx?H zeed2O3;|GggSXaq^h?Edh$qJAAiyLi(T`}Tq z^L!Xm$lM3NuJ;yt((Y)CG=r#zSnA;*1q?|U#o5f9jV)MMf`4 z-d{!Dq|ADs-Tw{7NoLq7SZIAOAy!5hq6DOgy>V=ySVVlrBBlU1y^74VwYj?Hlu%vb zIO4JPr&@wc!}DPV5kQqtR3jJ=D36l*YCJt^b$DD)z}}0J2tKe-3i^J|&W%qi&^I}x zhX^2Ai`tV5z6Wpy6tv$iNUK65d4lc922v@&UqT|`AO2HQkGVs+ks=g|i;Mz(W3!%7 zl!HqiYVJJ+E)_?#UxrvPVKH8Fsc46q^7^;aEA-I{l|cavlKmNc`y{k?3C4^aXd?$e z4hYCeU5-$XoS-X)Jp8d(mS|y^Ag2VZaD;3m`#KepWR{$-ACP%+i-!z`RyXA7eoMz{ z;qg7pMc*_an6gDqaGynOG7mF>a}vYVxpE-ynAOP^Y^nrj%Gq%EC(y~+_Uv?Uo|vTE z28^adp~~koh4eqgeWWPq5hB{wMyj2yP*WncBBCw>Zv{Z8qMBca5{$*9QFiqGcEq3! z?;~ekzwA~bb1PvV`PmAcm*a0sh&(nSl#QpsNlRKFtc+j=`(CvJHI!cm0FvbYz;@1t zFfm)B?X)3>#G-qxkX7fiYT#y~@wtkrDUyZ^TZF|_t|v-#(Olt)7l%>VV#4XO2;TIs zmC^2JD>laDlkY2js>z>e*!&;K{y|PirlYps)!<6732b7j=xo=TqgoG-JICTZ#ix5^ zKrw(4h%h9E8o7C!biInAI%7wo@Ur+0aJp-%JIKv<4mQ7{+f7O2`>CC z&~cX*$_B_R=(Y^VqJvJHw2fj^Cd}+na_k%ulkT;ZP5Q<@u@zx1_a#Y+F$aB`{`!Yd zj9?64<}dI39{&`YA2D-6EX_7Qn5nH3-23H;^Mu>3H38;8`%K2Jx^+Z1o4w#D9;1*kWZ zLcammXTpxNYO(|;1{uV+?6BZn-g;(WCV+AMp*Aifo>}jq_0O5mRoJLmHEJ7?zCq)L z+#((U2B(2MnQ0rK*1*em?c1OD);_YyV|}TZf4@xduw|=$7e}1oXo_c69cP{ z>^SVX>G|Ph%AGw_jx7b)w+geJQOpX|h(|z87}u+ylgKds0prFlFPm*ils9+{E+zV@ ztngJDdS5S=DPy^^oAEHH)Vi}}bu0?{pZtKgvVdC>%*1!KY&qe*7&`El{R>5UKm(=X z`eH2RUxzK@EDxxK7{xlW=tcXE0_Lynd9O8h_`EJM`36|OCOm9b{pYI20!&fL<>Eo~ zGZBGIA%BRcI0@iPJCLh9^9<-{?>S}9EJ70Z{1?%C6{bYVa|3`O`@}^8CL3si;Y}tm z$sih=H`-$Uub*;ip;qRmK|${*Y2CN_h{NdNDTn$c*3msONRMgx~AVJJ8mYmspop@_CMmr}Ufz2G7CB5+VNT85YO0G`FBk#5k?$`m< zDv9-Mz=xrXbG>)(=DoWw>Q|0p9}%xB=%*gdtG#K%XE4witZVN_u~@N3TLda88(8&C zqeOybHe_-sO5hgczh4|IR(Ir)nvK>beg-D#J%-IH?S}}@DCF<&*jsdg%;wv+vf50f z;->@gxKaa$H!-)Um9uJodwX161$EQY`yRXNR1{6|nF@s5r~61N;m#qmK#Uf?C^kmDEET(_!)RUcfu%6+a}ed52HaSCe3>1HW0N0C2)$xxR5N|~>+@rZ=6E~C zv2+>v>+Ee;(TQ&MGs>T;6|%5RP1u|Bsdr5WZ*_x3i7}tfPvh zpa#q#d2##i3!YLKGtSw%iKJnr9;#`GR@&;qrlIl`=UCw@-c4%>B$#PA@jqdm?dB?} zT$u>m)&WDV;H9D~sWKwjS)vY;&sL*4#j1*ucBv?6iW2Z`5->*o-urKR`X-Mz{MKH1>_nEvw7_uM7$}O2PkEAbWG#lulZyqW*um#`n32t582%$hmMQJ z0$@sl9JsczYx?oXHB#~P){m2h#8MjZX!(i$@1!saF65C5|$qNh2L1%v-_>$1{k za@9o6lZ4q1|7u1I&XR7_e3X$tOx|z&{h@twVbB8;y#s?gt`ygsfpMilEtnXR5pFVw z*MhM#0A|WU!>)8F3?Mv^eKeTG9zL_;?0rl&Ov;A|=D#W(LMf!26UySLCzE2?Au~K@@2!JX&2w z0$@Z(;p0C`4Q8O$3A?ZkT zH5T$g@2+_DvHo;@>^q!59f-gfp)y+W>grc7L`|9Lxmg6%1->gld`h&r*+M9J%2*M0 zyk{oeEtBm-(Y z|59uZ?@G+>&vC1>U5}hzXlNX9$~Noh(o1^%(KB6Dv-v_RXD+!EWhMcR;HQ+)vBZ0C z$1k=1P@ir3OVvW|MRuD{#>CgX#T+qb%OPX+Dm%C`wp8V`K>gxbb26^#*xfUDanvMe zZ_6^p<4jEi`2s^4w=_LcWfg5pXXf32avxD$ySnU6m#$;8MM#xFqg(2=`Y0{t(b%eA zeTZg9uC++pFv{o@qht5`7SRiLSi~@%sKZ$IJU)H&q^P^h?2O37Lk2VU5*y_}g3WTi9H|ne0$Mylr;4C=lSotfV zxL^_HSFiYczmk~NUvou%cxd;e2tyONuqws4G-tJ z{Z)cmv#kln8dx>T3v^Q_Ui%WPBrRR4xH*5`i>xL10s^Y)u9>d7c+Ix6>{Dw3Z{{DQ zPZ(^@myLt8{&VyvSH47_Qp*csu`VXM%zkUqqC4xwQ(IeF^fV&r2^eA|yuBf*bi58r z){z9;1$aC@{#sjHjfva4A;$fDbD15t_;FYlo4${z77kQQf} zl`tUhVc{|I3P<~f0$-OI{bGYE=BkyOb{{}ejAjE!Rh%sLsH(H8NKkyFD`purIS%pW zne6{u;Nsyjx@k|Gk9>)M69TtqSn#&kKvAv2@r6br++BCnJ}#?1e|A4HQDv1wBVGNP z4*;UrDBQR02n!vge@%|bnoqv6^)-VQFz2T?DpDLBIh&}YSiJP=jJPUI<0Mw@OHT-O z?ym~#eBCMlPq|#WQ7=wC4TkJ?x71~PgH)wsel84oX`^Gk-Y8vwuA%c1(gj3ko}Y3K z2GMR}kPM&uk*{lMmzO5%$G9*&JkAIwrU07$v1r{JF2s$p@x>qaAS&W!ViqhnByhOu z&i0Hl$NJn+lZ479C3{X{?OU^ktF>Dlp;Nkn@@S@on8M#A3h;1vE_^C9DuXKv^c~y> zRfT8x_5jTEk$CC*{|W>H03G``z027M_|g@Is_*%^=oo>HdScJ96qRMI>iBzF^@dlB z`<7R$x3d`e#B34oe5<+PHU%j@4RsA!`o))6-{#}KT%Bn|(EX!QK?aH7;H_UF7GQ4+}8$FZT9OHSDi`ya|+a8Dh!mjqSUVlA!NBmw0m zd(j3R>Zxo+u{!5DjVTC!BINyXge>INsr%dA zyZg_R4`zb8_n0*K&Aae;W7(&o1U(R+Mmz%YhIZIpD9E=ke{ON;Y%I&{y=B6W_t#uW zG`4V*QV_I0NdYN(9!WLqDgb#(gME;IAnO~>5?SH z5U5vGfdQfzl;0{CgWU&8VwJARpS4GycWSCqd&(ET5XSC%z*~Pz={L8Vb~Uy!FOS(w z;51U0NgI2Oqu@iRK4si$o2r*gKf|3{&cZi<(=-S5U{qWIo zz}kPD_K?HfYs${2&&KK5D7OxSp1@P--Fh&!J9;iHsq`tsac~BsT_bs9PBDQZ2SMwY zGtMd_u3hR3Gu^93_$@KfvZzMxo?n7~Ta_$o1aibti8|9=;Far^1}c8KQSSV9IVdq$auWJ5vRiO^rx{q(R>DaNVdF#KLc?FLi z-vwQ=WAiVXb)&i~QK3~=G=mO3ByF7Q)l>aMOo?KqPopy1#h)+6qH{uQD0%;}>R%V_WIB-H+Rfpm@dddGKFXg*U}Nu$6}7EaQ=h@OP(e)&xY-4_v=Vje-|Ki2&t(4^s>Ee>9Kg*AKs=52 z=J;<-)3^cm@OQ>cyw%PkKtn9(n&c}Eq;a7M>w9B0+VAR;`gJX5F}zJ)BG`>{`Z3+NU-fgbGd!($?Q+Kcq<)N*a^F!TAj}mcRr2>)XfCQIGnUq5 z+2gEPhfqRPTrMh;Q5`ERa?mpOnZO$@HB6a3Qr_Wrez!&jqU3lBcUGeAj03iG-dAPO zB6{hP0bT9NM!iu0q$_v&AQNg2o{FWUfJyp9&$+^9k4rXEmqb+oI2dPZ1di?@kQqQd zi)c;h)s{46Noa~+wUBWXS2JCmHjg!SK^FIe_zfPn-eK&sKs9QitE`BaW--6oOH;xp zSh&Sm5a5!2Z|G<`75no5ph;EcjsRH<$McrOY!}lARO<~*??vf>OpW~OU+dJ;uv_qj zu~b|Zo=>mjyU;;)F_&@Itvss5z+ZW4PTZs~S>eJxa{ZR_9WYJ5{}!v~GQR%+tqIqB z84nb0U$ZF|5`wVfDlTze``S-e1SWi}{AomQy>zp(|T}zr8UI4;= z+yM2BRGhskR!xGtv(zPKFkt@iIo8a%MU4V{%28pH+n8y?snlyv^9C&QS4`3EryV>M zVTbURGDw4+Zwd_Rh@cF4LD9cM!re{k_BD)VYg-EL+Ivx&H({^r(nhfbRbG&Z7l<>D zX>hUVX6^7@LOThtqNB$Ejnil@NeSckM-a0{{8x;vGD^cPl@*xnMr@l4!MUL76s$d1 zcs1P1UFpsOs3w)xNH^A1H!PF?cFxCLyb+XpbM)@WWiJmG43In_1r z-{53Mx$OZ+1J4IJT07H1c7LhMpd(Uyk$T|C;B-q13L&g+byyX$VyU6L-scYDza)d} zECNEN7^Ad?&<;_E=#3ycxOgVEaTI|jnd^64# zLF?(*O~5iT9byz+En_UZV}F`0!^F+;88CFTi*dPmFw|1dFMml!J)b>tXWPFFjVOTg zw%~r)VVgfkq7Or3X?z?E#sghN`a9F#|eJnQkwbaUARs z8T3pZVc9RZJpdY?ZoDZ%=AH{;as}G56He@>id({``({xGR+OylxVlnyX~Zr+i!L}% zKvz5DXZSxz!qePU^7mO(SHl7EBmUM)aB~J&jmG;fN)c&J=l$aX_dP&@OW_gI;%QUt zM)ZK~EMV36_ylkpwemJ<(ig?X+xVX&9~KUlvT9u1jwaYu&qROUr5m3b()!oY+KvE> zPlV1=KP_$36b@E7ehpA@7v#`RrknMg>%mr@S_u*{;!l;2m5kqSqlcyIbMMg(7Fi!a z;gQ(NX9nx}c8%O~e~xTB7HZ6?+lNQC?ZToF5u*|0?ZC<`ip2+p|C7<@RGtJMpv#~G zGlH!avd&*RDHet0bnPsl2%h07;)Gm88!U3Uq4IsbvF5XC*2#1Wwfljd_l;1L%2#ie zpln*q4Vs)b$*uV<-3CjG)&9tG64kjokl-kn|4ei$PMxy0*j{Abfyo#V#^U)AHYmmn|C0#oM_T3m2hr>j*BvE50jAMUe_EhZcez= zd%NH_PD5h?Mj#gpz5|259RSjV*iBmtMsVLBIPp(sk=9MEbmi*A3~ z*Ybb5xswa>K4E0voFvnVml~2j?t!ug8ywmsaq@Qc&^Fi-izqg70Wx4K)XTk!fVrE(rM&-<}%brK&x}}g~;}s zV2aWrM@2OYHcR;SER(L(h+O+!gF49)(i^%MURMzZyULPA(B9Z z2UH@@_PHQwthDL^NGJicCCM3;>_`honhT)(Q1&vv@+_#`A$VX~d@q{oBC((Nqq5dP z+qIF)0s6q100S~9ieumy6>$4%%E^&Uo2Y)NQ3zfJ;ea?NVXUh*k2+WAYQb_U25ZFp zi;L{V!m(J%Y}04sJ4+2MJ2W=WV0Aetvp$pHKd%^=Rvot+J}n~;K>5is1<$MSl&NNvn`H9{k>qImLjTW$9!{0!R=w8$H+XE z+K9q_%V*S*<7*D{GT4?xmzDM%l94TwBX8c?yvCp@Y1DpR!bv$*ND2x1kuLjEo{BQg z1=5;<)LbmkD0hAX<@t@pa(Pz*)~_|;9KM6-D5C&!w>xfj;?&ASDeD6>$}Ecg+>pHfK1C zO1{m=P6$T}mRN>EIR=|i8UXIuwPlB5Kc<%;7~my!&e@yJO%bC~=WtdJjNdvJ<}4PZ zRi;%c$!|7V<||lq4s@9<==m47HhhIU$i1HUXJ>4d6~1P(n6Ck7tvn-8!~j1~QKQNI ze_Fm5Egcl3TYx*1c=EYXe7n4#68x(RDt3xJF@(JugrZWjQ>Br{`)Vf|NjI3&*6ZefZzf|RGgWa zg4@yr961X$O-&8lsTHo$Cb)ByE7P*VQCV4`Sx+-7aAjuYO0BGLR5qVlRyO(ae7!H9 z%lGrs=U?DlIOp-WkLwNDiK$ZrP&S6H@h;S9#gc>J0PSZ!FjdH~*%aJx_M;{&$mXfz zk7;kBjmj{K8*Eko%s!zr;}DhU#-gf$_@=OxFv1}XgHItQlJZwt+x7S8NmBsaRaK+b zLsFZhn9E_W(~dHDzJ-SkGaLaDjR6ln*WJfLC#uDdw&?fW*1R6{aZCJ;yAQP$KJKuJ zd?5U&{XXfT^JZelJgqDnZV~yYUuJusIj1|)^L zG%A`O*V)!mYtBVn3A0gbtvt-{24lw+f~Ou@Zn+Y1OW-f2!> zPn*x#7*&SAE`P1!C#-B2qGXuSVynH+Z7|vgLt2iajp57<@Q3zM6SSUUFoY!=TBuf# zIT~wX>F(n*MP(`~QH7;UX0cTdT&RE{HS@i+nl&>G%gcR*E&vCCSHk!yfeb}`D%H(Z zW|HEo_>`?CHa2qN%J>#zl_G{UuFbDo@eaG8$b6L^hY!c`@mQPDN!Ly2Rs2$Ki%%_c zF}54O5yZd^^(J3I-&`an5ak-xqb$kbN$feDn&)g&7h!ScL(G4)cPs1)J+>uM(PSb3 z+l8nKf6%Y=pg{AXO18!Gb}ows$zd%k31gUrXTw$UDJ#aPplOo&eFgO)*2OLqi6vIoO!QJj`8=N>8tlljcAqNuKy zf|Q*!2gtMY)*ZoCxC3AR1HHYI?~XW|YL24!C3pS!ve9>Oq^P&<@C9`L(47h_ed^(H7eJvt=fu75OVqS2ySCOL#vn}Xjm>ITMHj+wC7)iE-a+lKH420B zOE;4IV&$rLs~@&dJ%BYhYOjur4yTS9)i%oaQd9vm{1-1`9K725A-(Fc|&^?+{Q=T#c97AJAJtkZRWDx9%KKYY4v;O2fv{Q&eAbw*(PD|xmTyg zNr-hyOo+1eK1i>xTcyUU10?sL+-Z%|{5yz-=!2l^K6+89!TA%h`uHePzx80;qj6!iT2O^H=V0J zC}ybKW_wwiPv#+Mv&B#FI0pw2N-+#5a2?I1!-le^>#VeR1AWeCLBL@Qz>b?p>}MJs z(K(jD9cj06$1op3>!Jh{Rd|_+@ShR>C^Sk#u~?;_%P1%AMCCy*%8J(iH3&WkQKWfH zg~)<8XCIa3S?4j8Q zg5C5*2i|CL@fWS|3nekhRCb$;B7Z3C69Yr|)b!pdcsU-cLdwqnu?Og`N-42#{vHEnK4)pY($KkDkt5ZCuqbL-dXlq zjS`ds4S&I^UQ#roj>e}Wd@$Q0g>I9TK59CYniW(4EC$4ev;~|?=``_)2?(?@dXVgB za$mK(EaeoV)@$9_{MeKnn@)IcG}X7b}|&RqX9TMl}PQfkAXr zwPyFV|D5msA^r~Or;MSM0*CTp?0?Sp?XQ;*<^Sh=Lny!@%kMBLC!6F&$+yKEzhJHW zZYBGEo^5Rl7Gg`3l!F091t}08ttSV_12^p%u8fGEWnCEjLh0avTdMi+%(LF`yO#HX zYARj@FZey5!s1b=_};W3D-RBM-CsZyQvk9pp+-miUU#>fs&F;Q`E7iymX2uCq>45%=Lh|N*i<>J& zF}<$=qnc0gcfoc%sB_+THHzxudRwLbhNFwHsK1K-{Btp>e_FBQVLF($9kq?82oQo@ zZ~O2Bvv4XP;2b`D&axyv=MZY63G_W}8tsH!ofQ^vdiW%8=-%2RnR<1IZ4f4OL5$;FE;>1i zsJ_AYX{k@WgE}PDoTW-og_G|#?U98E3S2O!ZV-_Db?#asN}@+Y;{7oy5MJHq)TwDi zRCgiXD9BT9x(69Tfa3rxjPcS*qV_fm5hlL&m{0MkqWHSVOY{_u7=?P$>F4vLSHLaN z-an>Q$m~JE8J0c8^`fwfx7xQg|7S4=1A6T%=@=mU z_md>-%znD`(?6|tB z_?S};uHF5P0J*b*E?#fZvjHd;Lu_#7xtiXCV%Bgss$IHR`N;Fn3FHT%as*%5mI0wa z5{;^n)JUv ziJisw8oi}l+W+h4JyZPosa4Fdre-^kx0(lMYnZ|IzujbUaYJIFAa*JitIc~mzlB-4 zy2w9RYc?6Vh4ZI4TJpY(vzb`_U=Rn)tfc`TP(j+EKfF?5Q(lrp$h_Oblo*owkUVlfw6^ z2g)qk#Y(j+bbiaSJRe`=iNzX!&Ni>(?>ZpA(Z*a25xCY0oJz-3!(H&=b6w0xDs#q$ z4=9Mhq7AR3$>kPFUFq%6i{6z5Ph9vLOs$`03&tUOarWYp5A;*2Y@97gXCjnF27y8+ z(}9sCqX%RvRHY8^G@Fd4CjB51#%14sdbnh3nv3<=o7Klv+f;KPl%OxGdqm>4Y&hx~ z`!evO9^k>m{)VzjRBe8D+fc;%Jf@YHrOXgS^IUegyN_$@-w1LCttC_bc{Y0YAo)tc z7**ZX6I&1>{tMG;7Lz|D{wIkKDq|g)5AKyAX_eQ)7~xfNY*gTB_AabyW9I?y2g9-` zYD~6Gj$F(XK#QtOm-1d)Nz7Q^TqP$!;gJmx}&&&IAS>^sCapX0CL zi&596gGD_@l)BdC-lau9FhSgfc>HTwy~mow&K`hzDL`*y=-s~WTnTe7NQ`E`b^qJ_ zOrHix#c;~Ka#RRV`LW6iFeP`>MW2q71jsZACxQ>Qz5hQ|oKEFvtYkS4$3R)xuHxrm zXCp0xUGR8;;!yYIJ)%^Yn8Rg|%g1uM<}A|gQDZdPP~9iJd9k z$@1_LhJkhcE6b-4xThxPg;8VA-9`Q57h1!pbYXJ(6EUKxah*Yt((2)FEY&0yF`Bg+ zR@u9MAPW_2-iDQ3eo(7fT((PvK*|nnb{&n8K))dZWzMY{>S|`1U?2_N#pp(tP7*JM z2Sv}_zoC?c><=eM(U_cWw5^apGIuJeK~S@=2CAWWx%l5*nqz$32!>_BJIqyyelgFo zu@?EO%e0t*tz-taiYOX#Tbw`n_rGB zgOul1CyoI?u!~%`CvfvKwV#lJ1o8AQRB>EhNy{IX<-83h;J7mWARIcr~eFqQe(h&BGM!0ZN*L(%-NV z9uQ#m(plbmZ<2vlZVavCZUK(a4KAQA&I``&Q5tMgB%*?y{JTimcbCg5#apE z+Ju%M7=%H|nhyl4$??$9 z^zgL?sWYFfHpZLxguttz+HKwT#V!>Be?&R%m>%@e+(5uGQ2QlCSTpFQCW>uQOm9%J zDQAn>=_c%h-Bi-Lh>PY;uW!s9al4#zKO7230UhSLT!~OmvGud@q32Z!(54DKkwSi; z?Eg{5+l7l63<5>$c*8PWC))zfnmul*gAyPsnf^uLmdhI;)xJG@0Ue&^uFdHR{wr*#ejZ7pADj3r zhsFJVJyZ`YQwn<_(d)L5275=GB5vgq(o`tc{69Yk%@KUNF&RHVl{&cRr02@j^hfan ziW28ByHE>;rIgv|1c^0IJLv8qyu5aQ-PPBtu^yOST6G)!ch1j;mC)GWL4dCu;q@_+ zzVws2{W-P&@Vs+QJ4h9uzvwb7na`?3{AY@*R|INkM;GwhHblGK*7>mxO3vMiZp76V z09H%k6uiF2PcVV4pt4|_NCD<;w)kqnoC04VezPbXE#%%7WDZT)!^bHcSZ6p0$w~3r zXTo1BRoVwt^uHEnE*9&vojALXt^8#^&gY;6#~x(9`ae&+`Ugvx9VBcgSTO@_KL?{-T62B8W6-%b_H@W*`BomL$IIR|>F+U7c62lkj#>T|Lt^1Y z@p4~Zk(8y^4)Se52C#BQDSh`kG>aSQll zYZXzI1CL`gA>!)0{{Cg>Bh#9Q1G~5=4Z$(1OW|&gT12U&kQ?H*F!S|DPA;?xBYYJa z$!tXy8MZC%Atgul7O9BxI8E=>#?nGQcF{x$<;=9oj0FRR& zSZIBlO&N@;W^__y>3bW-uA4}kRkm#)uTxY*XF$bsu;y>+`7=l;PIFd=|o z75CKinTv6k9YFcJx=-(%c|se=hcGZb82v!!({B1eZM0AJL6|0}KsvRrD=W*q6b8A_ z@UXThM}8z0GqxbDjt1HpxhpuNY2uLM!YcrygHK%tba3;Jkfm)aHts#ZZBS4)=NNAU z#vAL|)(rsx!-~^u#K+J%VyFgCRbmtX1VDU@>dy16``9tLVO{iJ=2^qD9UiI2Rm-4=FgJUo;FDkIJ{{g+U|zE(x6!am6cWY+Q6g0KEA<5 zbHSVu3&#}41N@ieDl^pwv&4+D_dE6~9|1TJn9aK!(01P3K73vmS8UHHRUohm>Ht!f za>oX>$ewD25BFlpQ9spY#y+Jz{#qaLB&g{;di$-T$9G!<^HnPF@4C*zc6Jm^A@DT4 zQtqCz1lKFBL$6P(`BEcKpiWIEToh#}@{8QQg`*b|4TBpHs%8iKs3Qu0^H2DH`w@4< zDafL_#aIOm&slM*ns4di(@q5(=lwEZE=Lr_*{RCZ8GcC3Pov|Eq|J4LCC5^^biLyG zA~n{=DI=;3IbNK3TfsPF8jLmfz_p|C_WThv;Gq!kAPpy>7J*A3ex60L)8?zLSCVE%P+>8&bFS>w(#9wjMG4h8~P1 z0Q)|GyEaDqP@DX+SNP=7^QhejGq${H!?27N>*$cFxw9WXu{9lBqGYA7&ry-@h#be~wix2MyB9t4_Q`8YW@CVIyw~VXb%d6gBZ#(_z3f&#)x1TxV&Curu3D=>a>mV<&^8FpiPqC8efZ7t&ToI6f^3-(++nE<6mwMARKnpV0kE3GS117U zHY)*-dO0q;kiYIKDQq?xs2qdEbk0Drj}cpc8z^g`@A?I&3raOvSZuHtG{AAgXGop4 zCGZK=R_m83*_t}Q`tO_yok^HfHzXL2v`#rusyqUPWo5;KJPg|D9J=X4AHp5);mgfm zivoh!nBWqTB9pjH>mApu`r>t?^zAY*2EJCaE^2N)kyBk-l2ct#n-i1VHRx_Tkh{^` z6$o>9duZb)eS1Z-EM+dWO!b$n<3FQZE6q}l07~NdGTZgf2-5|T#T+bhzRQm@s!Zz=qb6rj>Is~y4Q6MwbVOYc z<(*(+SGJBa5Y5_tqBvZ~^6uNR6t4!R|3vKyr(r+!UFNjozSdN`P;BM)@UF^2IeR_k-TU>{Z|l zY|3=(#;QXG+baQJx`~PY4SOkK&ypz_3@i1iD?l?H|BMRWI$MWR+%&l=`_Fo=!*85X z%(CvU$zCpL6;}3)OQ&~?VyyPjVRne};t=~6sIZ@>6q*|pFk(RSNU|VuR0>4z`&hd? z)SzIP);1hJ^C0xht;Av}@MYlv^^69kVv*q27Z~u{JSa(xR1=r*^u#DB5|94Y6?LoN ze3~GJfzCLSm1^7PHdwU^P%Lo%TVwTvK!xMX<-^akzLKEeAVkdLn$C;~;-jpF^pe2p zjF7F=JuT*!gO$hbSNmB^78*!mMghb4CF?dGEO>8B`cm_?NcB}lLG${SV)tUbW#Blv z9V*^P&5n=yRburM=KI~xHCjiC9^OMGb12L+9e%1fxH#q+{^Q<4eRNfp;yR<`2hO{S zLT3kLH?MlU4<20jd*V$7L;ecrPMkq%b8kF>^^*z%3cq4>JrEG@tHSOkuMY0EjgR<=s&KJTjsFpPlU1fR z#z%MXX*PL!`C`+&ahDZ)DuWoXsHqG(tzYn%aTR6p!2aK&U}#N`!f7;Px{zm?0zE9< zsN8n$!(EP$5li__-J*Bo_5O{PwvoAHv+N-68^4Y>Cj-A0lUE)uc03?~=e*GsLwc-) zwE#cBjFTbe6HDs?M$T?3yzm)+IS18aM7YfO@WHuQPiqf%#k=N*yCT8Qvw8(ga^D4W znQFEcPk-rnWI%aO z@l@x=>jh@4@u(Z-d@M~0?|JQH-~V(*3by&mJ}FxzP*KIjn&jd3D*dx$F+y1wwPRM- z%&>6|nYbV(E{nl^+_)iy;8O|-D3hb5?`{&rt7wm$|4K-X>_@Ic&aUi7p9hVt;qWXy zV)^{+zIw#-#7Y<+qx5DA-|tS7gu*t&2M^8lymFo5AVk7%U6JIh8BperC3yX-`BR$q zmn*t3q(n5pw}N0AhwIg>U<}7O0%#hbphGq2Z<@3<#(u1Ox^Mb1O{im6zbkI#jxI9(o>^diH=(xx_}3V&nI@JOXjiK1 zpHuBx+0h{Vxw@0G;mhD_cvSN3$YDZ^K0Lrg?)s%hUi=(&2PQ8sr8fQxV}XwN|$=YCC_(X8hx zyKpJA4a9JLa=LFuEh^K17($HM0?vU#l*plLfK0`-9nZQ+HU8Fx5*3R@cNJ&&VCB@l9-f-lQ z`tOphyL6nSL?Hm(2CpsA66(2dcWI<|7u9!0Zg1cxK1J_*zs6k}dw4q1Qq_sAZfAQ4 z*C^>P$lKYE!Qu7e{Kq!^EYTCAjdjf#9{5KIDJu?G6Owyja)D&a6_ern#xOB(K&qQ{ z@7A}5D9g-+LS@M+YydHe`k`2B2uH9eI90MxI zMnrLaa7*DiOD8FOsu4jBOrSCJ)<+sR3Ms$g?^$0z7z!0484VsY>*NO?hc2r2Fx31% zvt0E83o}ALBZjy65`AErFt))2Jm`_cR=OT`!acCmz-}%o!}$Em3UPJPRDwyu-$KV3BKhI0qAgjn;o58s-wr=_vx)CBPrh1c;0 zSs!2&08-s;NKpe|b@qf5ev}lny`Oe-TD6FUO5h!tdH9FZ4P}Y3GGo%zi0i%@>crt%b(U;|f_^d&TK_Jh?re#*(|Mr18 ztP>tRZ6>U#Y=^%$Gb(1nw=UYfL4yTM;#X)()X;I6e>~arA(#ce3dUV*6~No6_!rbe zNgLs+406%IA!zB%*Ozx)7RauJ5v}k5@Q+Z3hj`I97jiTTq4^-%5)|=ZJ zTxLeOQ|&2MA2?F)!;wd3q>9#x%Ky%iRm*uFO_Vc-tPKftZ<`9^0Dr8%vcqeW4@_nN z+R48g?(rja>qV7=QQD6<$k&4Uk?bmsS0oXnTEklBlN+E@(4?$PpU0fniCl3Yov;z_ z!KCHpMUo06#;VaP{o-%0u}C;MjcuK{RcPcMB-XrLIno3I7>-I%<8VqATuf8X1MiG) z_SKj@S?j8Z>g#TVgM*K;%Rgw=Z;7(lSEV#Dd?tt5!GWLcDXHp$KI!3`drBOaVTRQD zTc2pN3p(Zl6(6T{DI^UVrvW!gzoe(^4hV6hL`-Ytq}Gf4kqQ|7=KKjX8OAuSl$3zMGjJ0g3hwg zq_M52OIY)3B_>M7aD!U#e2pR_VsUd2Q2WlAYoEN3EzNhEKQ#ap^Jw-gQPlxHlz#4Nth#f&2bu6`r_ewRh${J z^I^7bD)xmT?$T>;u+d=LK-u9~>tX#mN4_@7?W6U?6Lt>wId0_?7cL*SbvXLbi^ZPg zytBTc;%R@)BL=xJy)WgL69BA>uzMknT30<|>oNQw>-ort!RxgxxsRQ380Rv!x1>JiG#3bXx*+P%XRaaERqLRtF{jDf=r*A zTJ_py7ohSzV-0gOXP3kf#&F<;g<1S%EOI6R~z%aowNX zHbL!&`s0tbBN{$20|re4JI)GhCM*q1lUJ<0>hg76 z7qrLx=ojtbdyX8)rM>G&Th`z5}c8qB^}(p${wxw1vFLsKisGWqq^{w%$kLxwej(-b0HRuMB; zjXBaEb+>x)_aU>8R&xMIb5IaxA@qDsSmv6zzJ(Q_&3<1@;9j_aKwmfSk4+MoUk*9L zynobt!ugu4HDAV=Sh9A^ydo%qEwOT_vbkp0q zC(z1|7Gdlktpc?6U2B?RsCYNk?Rzr@@Z5@`?sDQc|)(CA;#sOWQAwT zXNN6kG}*&Du^fR!?LqDsU+MnvFdvD39_NOoY>Hz;mmL?x4j-90r_{d$Mn~|88PpZN z#7yEy>d&{OK6@=nlq!%JA9$Er$LU5jPjiQYX*w~jTMftvF387&Gz|t3G|_kr)2@#{ ziqKC*y?;262=+L85%z6GPeKX+cf%mb< zy>$kyc)wW=R6ePM5Gpmv-H+DEGWw2G!CW>mV$Vbe#aMi64SDUH=Q!PmIRB#InKOOz zwKf4~7RlIsSD5dH-8kfsczUE4AMY`d85KW(TiMYC)!m+Wa7N-Ngw-qjNj-0ejAr7! zAH7=9t1Nb~9`QC$uP8>wk+3VQ?y2{vc{+VH{F*zM(?+#)eI8nQ<@TC0V^_TQn*?qS zUX2gh+(-Hn6xd%}k=?fQ(yL1)J7O9>(q8PkNVL!|#bc1q@Y@V4Kt7FSb*mk<*&O8| zH?RFe^PY&0=bv@0+757(VNXOqj(6j|_korMq?wJfodL2aet$ISpRdmBInTKIfydIU zu{t(zuhi{M#`kh3tVdlpV`M8&y5aJ!*(FME zhG=PwdTq(nhxNxj(XW5XG{?{3>xGL~ywkbGh;aDc>(?%AU-c*Ignu~;qe60V_sJ>< zi*Dm5n?;eZ(f(nse14aw!D?BCpY1pKU@N>n{NJbE3cC10#8Q{$kDvJpe_I4;@FZOL z)7tpkuH+nq*t3sXQFE#^N1^{61xd@%oBz`Bj4O<~dt)Q|6mWC>$HPwF+Hngx6F}+I zIj}9b2dp2~E*cwzlz9b{sbscge{m9cszoV znqTat8kH*~H5`T~AIc0WzpY>riCkVF>8Z_?&xVz-?i?y*CmG!dOP9dFg{S(tyo(nr zJxotHmbpKPJseTpkaP-urg&V|+IX;kezoBcOkQ2D3fspsUl(j2H2vk3YoLB=>@pU8U8N8=~)LJiJRD%6cvzikqrD zj9#d?ur&jMocm`Ewzn4`UArA7qWaP&#d(R=(Q#3g0YviW(xQwD@yC81*$@0E-{e%X z&#{Jl>9VoY*&8`4WTHc3hH!o~skh$MPw7uVdF9o*?XH!EMVl+HsRL$W%}#lH@Ns!b zTVro!s7DuVPaXE3d3|D-01b=CY!9@}t5Pk6mF+RSv0b>3vdRBKYQ@hRLz*rZTBfsw zf0IitZV=j;-cbA0VPzwG^TAkSJW2d1lCOI+LJZ1Cr@YJ}H&|pX-g5lHmtT^stJGbM zWTh2aHy2CaED-H;+_q}m^EADAimQC5;CQxs@3og6^CTI{EB8&@DvS*RIGNMrm-e`> zsq~wxp?*v2&&_^lM;Ca~uY8{ql_l3EQJ^`%urO*p?sfeoM5g*tWZce*E08g-&!m%ZOQAd4lR5+4(7l^SG5BcN?t`_FR5jjud z1{+M~j3E7I)+mAxM{gK+PxrjwpW=n15jC+-8<;RN8(d(9_o> z_0-jz7vGPFKpAKAk>=(JfREAp?b0J&<0o@BtS>VyS_zQuT7@QJ^m`|JZ{|+G<~dP) z_B40P{l$>Ih$ML{-}5PDU<%Tv!Vb)WVGJ?b;!E^{kKJ4A6f5SN(9ng*OkZ4fpYw;D z+=Cqcy*7Q_Q%mYj6}~Hqw{&mVo7uOr`p+z-MsUi`N0|Hl)Ay)v>8EU7rc#cfI-IX* z-SZ9Wx|;q0z+NEVOJ(`nb9zA7$sedndF8k2I+N*=ie6SwC?B z(PznGU{bJ!T2Ltebyc?hiM1uHNZ+-z)VA#%7AdlT8kkF~wk{D`RzuilruOxER%( zLiUg7(?9+vsX-^4bLt5q!1*8GG2@SqaXZ6D^)rpRPs{%Pi=XKqm5>;*5Mk)7Ii4la8Qex$)x@sZ5bSUL}I z=j~oStQ!;)8)R<{`iHD#XrG=&M_;pc60Gdu^Mlo#P_RZqBfL190qWsfu(!o6T{yWoXgVNk+M*P<| zFeD$O@U$c2;hFki$e3=32xZ{n*v~}Bc);x;{P`JlG8=NZYIUj{f#k$~5>OB1V~}_x zl5WzLqNc;f>|^Ne&!@ujsQpqfLPtOb#uims3U_lF}>m0GMl8ENO!bFVSb;PrcwW>5_aShf;1OOb^Dk;`w8B?d? z<27&8n}%hqN8SguWKx_O59k%TD{e#0$Kwc@3I=jsQjhLifw)YE-Iju1k-+QfW6!76 z`o7?7*ar`$X?wC|5Z8810T5q>$L<(2}q=P{4xtqKE#o6?2W-m-XzCkZgMWZGiqfY}S?%8rA%v(bJ zTQn?+15)^iZ{?aDUvZ;&V0Hnwn%`)7mKeAO7AB2MEW?g6U@TgGkTj`#h=o^iIXN9I ztC$|7vSFu)*T=M z#(c1F2)`w2>(|WS&vW1e9%+C#jgDDKlx`qoQn9A);yOgr3?+PX>5E0RpFKz_y{s)u zhC$g0n8~X$7Pb>xsTx&ksd>oSDs=~Pq`qyTV~2XMj&Zj05Q2B>9ck3H4RPmTz*@jsA(?8UPd8{R9q88648^@Cx9RrE(>*049x?nH;u*c}Btm zo^fiKnr8uF*v8Pr-3Qy9dCN2ZWw+l`x+=lveT;mm?rq9ZvDFeyn&h~Lm(U# zew$mCvJ5AQ+KtJ`jUtr7Gd4gN6`YL3 zFg2Ugafo;$d=&agrowsS*=4?F=bY{n%Ri*iv4X-!#&b0a7_Y<>1b<4NS zN`Wvs)>k#rbKqJB6+SM6sz!@eojcP97=GMSVmZD?CU&3Z1A8UR31Jw8Ry#_=%zek* zsni@nof`VO3Y03O6`uMX3WdlkK~#i|6i4F7T0lO2O=&wp>_f-|iwnUMRM$BOL1RN^ zzcQ4kfi1_XY4=TfMK^w5#~Sc0SG+fU9Syr`VDeqv=~x%C<*D$nZJC`wPp*rnr|H_Y zm^v|oDvi}EJv!0l@(Z*xOM0l@Ho<#J{d#8e>bK6eZ!m^5Y&@Mf@>Ijll5hZo8FG|g zloO&8HN0<-9~Ti4TL43;!rYcy4io6x0E}61Z4|h&dlk(m=E`s!?C7QFL%hwoEOo{)T=qW)N~y}DmB`wtMx3s$~9psT~j??NrOSm z6E(>vyppl>Quy40#zhptTEk!q2s|f4UC7(lf?!}N!e9s{5*acbuu;EpPZ_Xl3M#!q zg@J-=gzo73-%rXGPL7ahPEwYJSOXM7>^Yq5{oQ$9j1JE+uQV1bRMP=q^5G~}w1*CW zum+%f)zdms*vwsdIZqKuj zFq5c|WtGf}t<=}opgu69GIv`UGC|kD`PkWHo2Q3Py-{Z`%Hx5`>k2yeiLfC4(pHRJ zs*3-BC81X=vuA%jliI?Nhg&`10aRYe+6lAg9}ZH0%amwLZ3ik^nsfsXEq*Zil5|(b zBg+`DJ!ZMU>hyo6mEGWwyVz%!hUKg~p2^%u;-Cyl-4vc7VjLXHjCq^nL};mL>1+8j zf%0z2KMKkxLl6Fp-Gv2|k)>8pMvd+)nx3SK`X2u>)&rN)e}}`zim8g9sd;np;^QHz z`k69(1OAl2c;9m?-S3&6a0sGgqGlcDb z@F;Z~tV`g_Z?|$zm+gGI0E8^R{JjQze6C7ItU#lI-J{rpM^DojqVsB|@gfv13QOem z-xh%1{!GiIjS75XJJVM+2Hoz^229rpu_qeZu>LDioh!RTHroKygji|=1 zrL5vL`+2F}3a^2ye=^Vry^^DP^n`7Oo>LpHjcvF*r-d@x(5%O!zL@^C!~SN=p7J!Vx8>5YZpkv>el?M9`#>HQ46xnr({dtS zpu2vYR%K{@e5f(OtFCAPQa2z|c>mV7Ol(>M+#mjTzfb$b!Z|o*nt*Of`q9q!Qok!j zvuUskTet-!V1-wFU@9n~!91xOwf2K`Lr4D1sb-R~B-1X>SyLT8fWyOYM;&+8F=drL zTSt$374&S~)_iv%Wb@_f+Tk+w*FQB?zeE^J)wq{0t7)7-X*_&?$a{F|r2?>qiWmn7 zNooYsR~jqIvBMkyNquw6IDq^7wJ{F}EqypcHjrO+&SMb?%HNzwz~l}2LhM(L3S`R3 zS)UKVc;s&~+%it(=N$r&y!vIu3bo&V(5U}^CKLd`ffb-O`2Ud!rQZwF_`dxA%7pTd z29sdP|4$}Vl>St&@BcEP-bJIDD_IASKR^xpv~$A^9u@lA>)Xzco?~M_)fM=p%RQY&iWN}@G4nCM4!J-wOnW#EjYz99S-ADTV6B_9?l zDNu`>x=X*z!lozrl-0GjzB-$8&d1^F_trO$4jbid=%>19KPV^di+B*K?`(um77h8- z9nKqXM;zHvP@*+-UQ8gHrtDEd5GqqwZH{;>oX8kLJ%?Sp#-dy-0f(0bZnkgzOYlaX67?CQH*-g|>rk(BRt^Ra z!Ihu#!W5Jux5cg(skEuMatOAuHF15JLxE?Od+x{>aX?k)jAQV~G~L=;eG`R;Gep4~lret*K}oX@%Md!Kus=LI9HMsuhEQp1Ja z&a#WZ>$?aJx|!jU*G60rPs;=RldHM`4cC=zY`?un)r1nAfC$C!sgDz)Q!8sS zZU|3mS_Rmik%-pNJE-KLNASLOfmEOC6xwYvGIgJ{<)1XcJWXEqR;cq(#mvJ8Wt&1%=#0A0r@FQm+` zBJbNyUcSW(=V|B${SEN+g$1~`g%X$>d`X0HBwWrB(D$Osz=Snd;m3yq2lMQVm9Hj~ z{;~TEg#5MGTTQK}_FDBtSlV@BSB?FUQ+W@sCN#>-Yb526zhTD5(T9k{JV?>H`<(kbbLvjEoNt*c8f^~kB=kK51L0lRGNGc3 z$bVWsZ{{1r-Wj6}nu-HO57Ldl-Bu)4i&N;Va3V*HgZ6oMd)$nK0o11 zzg9?qfHNBm!1(rcP#SD3#92xLvt|TX%RxfbPr1H@up3YvYX-Wl zmI&Iym4FFo?V|Pe*Yhun z92yEYX3_-?m4bF9_gcM5;u&pS{zy%`av>&Dq3J-UJH52|3pp#ZT9q_~wWv)4r}I~5 z+T@YxnM4~b%6kc=V%JNR5|wq(lscE9K4_R;w$V{Eu0ol=VJ=l?1L$zictj%or!Iay zaD&tI-Rx{#vLW2XvB6?0W8?L_FH_LPnI#R=#&-dQCSZ1j&M&h;22u(}O%8+|!(_@| z$(t62Ru0{NB&)qIwe?#Pp6mV6A#(-X*1jHevqnc`1OOpz#DV9w0)p~exH|3fyzlvX z6U`oHLO*zw3();J{`TJWZ8xAZo-RV&qT+zFW1_f$x29k>-gB+{yTZ#?HHD}Z>FmC( z(CHUAb~1_-qU{7{5r*IUv|?;{HCIDj!^F0;FRXIA-)GN$s67`s?c{#~Xyh#)z_QFT zdpAg&&SQ~aUcX;UF}$GJY_V5k+?zu=!kpk?EKqmgU;e#yJoHk2)4&$DA(xp{>l=6Y zdt2hno_sbXl_)y*bWCV>$Hazdc*VU{6eO#g`qniOs&`Z@!SbY=rX@JZZs(KUHAA%} zk8i|iS}438fnZ!ueok!%+VAO_+qg<4*E`{5aG2FH98Db5_;i;+HScKEAkG>2$)&Gl zWQw91x3go{JXI)X*q*$_k(0^sVDvGAo9H~8@#5&@OJhxViA(vzc7;fk-=K=fRXJ?7 zYR)idDAS5f*g4ipVU=QTku_d5DOg-e+n+(P`ZNb$>hPK3{oD+pmu_m$G5i5GF<|MY z_$GO$+^BL6Lf>BSE^Z*JQmhrbOttykjf5FnVr{~JO|;b2uI#t)g7H~|KOp%qBH6fi zRf+fBDCj7a49TFz^R(f4!7(CtV{a7udG^?sZ*+x^pIqdR_&-RG7#R4Eue!pcvj~lW z#-mkfDIJNzg>qR;x0H>={TJ!6TrugviqrOU^YO%gksjMBXEK35$0a6OD`ez3>}QKq zA4!i%Ad~U(vSmkQLeVHNom$7|ajDiXItMctW!m9_$!f)Foo*U>JnkB{ct1+Ddvq4onGnX$sPK} z4uL}5aGzs#UmYu1SNYBZyFRB9jBd(m4N5EkU4un&q%S$wKW&aBp(*oI5mrkJV@edC z={Swi8?s$H^-4CQNI<>6CVg;SrB}-E0W*Rk5 zWTYav|E-lFT7TA7x;AxG?{U)Lc38#z`;&Q+VM5WRP0w@Tbi~yWot z8xYiSFi`6q$1fc693xcWFgvNJoXx@oHEruCV+RfQ+Eu^cMBBsyJGfB8q{bG9Ai|WK zFAb_;Dv2d2QYxyo+67O_+<}+NLFa_V2K--|*R4))>P2+!6HB@1lXx&+$IiI|7e655 zJ2tAHlZdF{s-LBJje=jkd2MxdMtZ__zzJHbKj)KAP$~FY|DI^J++RiRk{ASm1DXc; zP71mE&_)9~5?{HhzE*t*a;Q@0TGfdd6jdP52KL{&UCm;1M(~z`JRiOk8B!=jL3_Qw zD7@wQm7FsCq78vDg+tkQEE_9C%ey4i{^ykuQVv#Agv$^LAxf&>z1c)#jIkCryK0gJlRXasn zw9@2zK5@!#NY|SKW#Jp6f9ZNpYHI%~zS7maGdRq7vFMLP?#KPo?$EToKQyVjr^e5f zA z>ets-*T^*>vx1;41HF`OV#wa86~O8sA08W2ukYu_Q-UqAwSuA+j39hAuu z{R4CV!9N5k*U~{F+<_)z`QQa)1NdMjrcw>?_rvcgHb|&#mO-zxVHmHX<0!a2#?&Ri^)&Mrvi$jJ?bNKH*vHo9VBM`hE za>;^DxzG*u6n7s3Fc_6;OrRUI+7QJAz@-UaR|BxWH|TkZF^$NW4NjgvL7$A*Q3iNt zl$PhQ^7Tq;0wEl9fR8NP; zU)l@^T-5FoAu`o;Kk}E8SESWex?JeL`ELrDx3t25gz5972XxO^h5>VHZe2l{FadT!7c^T*E%${~*_OHIv2c9Yvyv-BDf1y)o+ zD)O-MOSz%aWn&k^p#{`C;vMz>f!mTgn8uBA$6)>bdC--m7+Z&S$m>)^)olI;Zkuhg zKA9!OM-ux}g?VfzJT|eV6kgHvzBeAqy;*;1P|T^XvLM;xyd<43Sl(iz>kt`BKvr!K zaKE&FI8m$L@MN1aYL7F+>LYKS9iJ#4nY*VGoXVRA8>so(N^_v+DrOf~GS)o`AseQm ze{q;Ap!Tv|F>&CZ9COdv@xfRe`rWZ(?>GHSyzBS+2Z9lNWE|@P_|$^_584!WGAv-pzE*ks%6rt)<9x_A%E7ul9YiFwxC^(ArNp6F%Y2a3#v!7w=P%59!1KnLR20 zdxWl5ZxU%_r|D71?~kIk#qp7WU=&AzVRedFR~!uAa$D!f$vrUlbM>q0<1I3op!7xQ zrN21k${K_@WhfWd*|P>^Z*rG+rs-%BMQZhI-GBE@k#d-dm#<9m3+6-c0y z`?o-#x`kH^ROmO)?=!5bit()zis7%)VPZ6!ChkkKa@Dc5yY`!|jh9T{2!7xYaa{uUIpH2>{lGnixFPOcWB^zNxd$H}_#Mhi zV*eavDsfU4O5pB_`>_AZ=Nh;;GWHUG07wddtYQcZJc4lxkRpx@euE{H(~1up;_hdzrT$J zM)eZEw&H1PKa`LxAQe_*F>r*Lr$H_Upq0Y~Jo53QrIvJAC<($5bj2vzqTAA0SEX5a zW)@~OJjq(Boe;aKElY4E_wl1{8uKyppq5De>F>+9kOW%l?@-}=RsO(NNe*(@wJI7x zgj9iBC&?JSjek=F*nqBPA-h6P$Akm}$$YB#p{rmKRX)uA06LD~VJS(~=BJ;^kMIpl z@@&o8;WhF33G~7!pb(=THuPP`0oeiw<44B3b$g_D9zY6KiP!oAD$2zE+Fol>XFAG3 z;#VEIa%{y-8(5Y~RdaLmZa7w zAbKi}_~?k;b4Q#+VMA#IPKl+jT-h7TalRoFA+kMO-L5CRefAr>bHLWA1&X z?lZKNTh~+bUDPV>#NpFOwsR6VkBxUII4Wyv8oeRY8JuNo5iwM26|49vc#vD~U7b+P zShA;tX<|$<(fEUL2hmc-q9%*2h@M7}PzM)tlScs36-%J?rlvgKTv`T%k|?!g-%p~$ z{NVC^tA~>g6tHQV5Wzva=i2OBV;?6g3st`r!`E0AHA)L|m~_2OJ*AKG^#eboSIX8J z^&NgXZ=2+Gr5n18!4CBU8=ED`NM{<*gp?8esFUAI%*Ak1`wEBF4#Tl!O~2dWmplD6 z3|XY9TqxRPfI^Z@Um%#&M?4c#6@WHJDkuO`M9Agm=I}VI(gmtt#vm;d@8ZY_Sl zi|HZj^6x3)n}T^@lnL>7iZ}UH-%ztWv{=7BkBjgV(yerNhr1Ke8-VC4H3QUa+67`;f0BH(Dr!bmv+$~ zSU^vEw*J`nK`#hJiw)o#yYzdcBgM^nkkX~K6h-hY%a;O0?p{ymG{`{%bN@akA+TDs z(N7ks-*G}#tg?*oqf=GYLIO1Od-(lFt{lLX7|@O1p00IL>3k245Fpf0Wf z_bQoObpPoOV(FfdPJ7nJA*2lS|6tx}V@8z%qp%%46DOmqT-NF>3vUe@CCED1PN<&J zMM%JIF3-IZV=7I7{-zrTKTc&@p^r2p@0_ONDHOBJz;pZAMzUeZb>__XY)T54r(KhM zAh8Oe)kxw`QCVyk!W7oI5>1*HHTsn`1Uo@3%u`_?mJQp(38&cEOVI7-h`vj=aB9I8 z8%AcoujgCsaTh)zvt$b1gsbSixRgi#Z|TpQpQ$d|ec|)^GQX6^CNBwMJI?o)-qs9* zdo^`&I0si)*0?i@ME5xNG;J{>B85fwL5dvHK=;3nwPk*<1DzQ-gQ&>X;z1#@0IXlF z2gS(N3m}7=wUlyH!e?FQy;!kNJ!HD*9;1AumaiN{hW5o~T9EHnsSS2-8D$dvoNABR zbJg-5lQ0RVI!C=Xy8JQOzPP54bOEnl+K!)v0~i3iH^`_EI{}^Xe09N=kHrBc1`037 z#L1atpH8fA>wD_*7srjM$_+o+RpHFRe#K?VOc-e7cBUYBarZGakcvfLj?Da=*qzWQH}$sfxv{?#ph)8mIVfQM<^w zdy_Ef=Q@w4XIJ@^E<~r}GWipf$8O&L>f!B+IfbV>u@`3_L;1*s*7~b1Rw*q+O7RLh z_((+MBmGaBGzGywNvvyj?2Xe^X6`&#pyzIVnMe#px>C z$HJtk%bA|q`PNCj2=V97TJ6w}n1;$p+IIttgc>^q5qaM->J-3;x2wjEr-aJ0^woqN zTz1lCu0PiPDmr^uVFjoe12}~kmzS-o6V?z>baNd&W3n&0{5qe^Ey!?oG(I;7=2%H1 zMQc=5W^2PbI&>1#(MGr1$T^WLg330}*=>#^O!{ICYHjXH0Rme4{a6`# zb}>dbt;EprOB-dEOi!vJ28bXq>H82uz=(+}77>nnVU1PKJcK=puymDUkX5r~krlS} zMcX92eGCX27x>PQ2UY1IyNM+IZ~#`RMgAxmLxRN)!F)X<_&NOY&<}`+jpy)F8;sKO zk5zCwJOgF)?WJ^+&nW)Q90q5H5+w2KIRmpo8t?#+23o$v)~X!_y-`N6O!EUSb&$Y$ z_@toO71-D_($r_Vm*W0B4zWvM89g8I?Ec*n)fQ|=X6lIv8?r&+ zQH_(sbp&V;2Ml=pV>0xxF{69E*hg*%@Fg-{-Hz0aIHZDJQoNkRmKiJMVd{@hm*iZ; za+(egklqwI3H<=iy9|(}_JWYn8XRCH8w|??ooNbLm1Tb?a01!|OxsJR#2Eq?xWj&- zNix!tRaP&w3ba~9BC_P*zZ#0)62wQpJn~NDLyR)AdoBvZ{$OBNs8B!y0JuUo#nzQ9 z)G4k@$h#;2B!GDdL%3YWOX2a}2x2va-8EMi6pw^Y}e8u$O+49KFJ$m(TrC<^r>4en$ z>qMU57HeyE&F`ZaFAl>sOC{lVZ256w6b4l&Fu{K!=$rVrXbQOmFkZpUTLa5qTW$Hn02KQC%-6gHs(BokkzZ-DBm={yc%k}o3d<1VVERB@mi?)XmDzJ zAO7IQpRRWn)tGWi3;9&^B4(?>w>4=EERns7}skYC80qla%|gwP*6# z%zYe7)7CzhxoMHs@JO0K{@b=7fGhnUv2hV#$8i+SK(UIVotO3`c z_hoNH%8JwA5PvacO|FL0k&<jL>&wDXTc(K_#irQ`74zkgkOx!))| zW!qQtE04{N7Kb}5&uge~6nALmCyo>(y!;s`OofW5+ z2yHUoA=;g1tWqm1-tRx3RI2GtG!CJAQwarHcrPAm94a#3a^@_SP6j!{72z1wKcwiE z$z;cN{>0^${7Y+?`jdcJR;#V3bzLt1g2V5AYT)_>X11~AA$MEGA&3_hRDAXosJfYm zT>m+4^X{~x3gF0k_db<98u?u4p-KYa=Ki&p$XaLhgZ+@Vb!X3rFY=C(N#?HJSXnD= z(9@EU{}xoLgAEkLRopi7oAAI>SH3XLHVZBvWKP^Nc|S(i`y%S;#`AOT@&J;M)q)K~ z4z!jbo}lP*Lb+TgCf36aYxjO{v;Uu#rta@OH;>?6{Rv_fW-N4VrULu7sX?XnKm&37 z9vZCqNbLBTuln}+O0eNrKj;BxIPdxPcS{Ck7g0zUoUW}qbeLT~kP^Qc4rOl-=FjyY zI;LyR^jFjoAYaxMF*3kIIobhyzTc>2t=s==N61a+d{$7(71ne86>eG%+O7%3jt|82 z0+X?rXifor**TjOy?_xx4YHOa*~&NF5a;_! z@d`owP2~IHO|y*>#l3Yt+9oxqU<3^lE@bilf%DFa(Y3VkH7LaZJM@cs+}`2FPu4P; z^cd5(;vCf^mtE0+Z-dE>6J8mn&i;0{y`mk;Qryo>(I3^{%~K*jNZEJctQt>jUB+t> zHrd()1!HKUdlJb_AR}E;lB8)sGQYbxTWTdK!>zOjuS8sZ@j-7euNQc3T-h|{1#N`T za0`C(@GIl)NCKDzm8*8OqFW_f29q2mW-CrU`jCkLV#nvIeHZ}wOir?eg79o-Dg_28 z&lpoDkSXS8X>ChtpJkf%kZHoQm1i=I&R#-wvbjdGO%u{h?y@6(WU3uz+qov&2Ie@m zXDQp}xVgr--sOnM=cpd$cn5}h1?GM=5;kI#3&P6@7taZFCG~^lv5Mx!Zu1bE<|ddX z#&75480Dc{UDL$#W!Um_IBm>~^7Chmv10Oz#jT291tC}kl{3Z_fd#h?1@*4lb=w8* z;{`1Okq!Z;V7Ok6RcSGP}0VfaWGTT)>d*U&i!5d zbq>?(+d$5r`L6>aU;oKxf4F;XcJvx}AB43d4hni)*SQ1gOCMS(PtHn_Yo(<1bYD!% zmJ`Z!GE1rJ849<{0An0sc;%Cd<+NjEY-%(i3T2#XG#oqS9V6xZTrfU~iVVgIk$Q?q zfpT#(&L~+bsUS`g>dMy03WWl)suqA`P^JHMnMM%%>$}Q;(NeuWR(Z23@l{Oj#3~8z zGK+dfS=UNyGtyuIh_FPp5@WTC1nE?7wRm~;OEpqw>Kb-HjSn^HtDqVd+nOLXlE9rB z#*rFiA0))JI;x%_GN_j5swVLx7fHfSE&fO?>K>9NQHRS|mop2=E~vwbs4Gg$dQA;0 zp{~bnt*ex%uPl(NyQiuxsMqSNS7$8W!~2g9E^}79sjt54zOJ{RzJIoEP_6!LLEQ*- z{g_+b#C_dVeeGNEhK@vvIf>dA_l>S3O(_M9MQ%-riB0+SO>whLIbWLmzf`RkkQtc0 zQ3Vuz?jt(_*B(gJech?~4z9bZulcc4`!lHKSAFfBTFpaH?O*B|v_vi7yc)Birn&D8 zCu0K+P0hM#i-klJIG7BQR89D-l`0t0k0ccHY=u3vK4M4ozd!(h|5p(HZzsQUY-Yg!St!#C7CJU{H$d^X>)&JrIO@1X69;mre)%624;AAr_7Om(gZ1 z`=84eb;lMCQhi&Aus{FO6Mfx`R|smdDw)OBoR?n*Ul%czI@sz}=^W1%tH0w+Ve;j$ z(dYqeEdeV{9G00c$?#R1gBFW=Js7%xSbC^>=()>ix97Rrhxy)Da&;or(>gtX_w!_} zUmV~lE#eQH!P58cf0`LYWWsdt*^tMAPT?g{_zeGUerD+#5`wo%Nw#=YeN6&Zg*Q!P z9HoqgLsuO6>E+%6az8{tlsHfXz8%W4bkt;^eVIAHm?nGt0nP``3r$;jEi}QjrTrg{ zD=?GD$<(L|4e7d#6X~Z~X3Jss%QVJGU4DCS5O18O3}_265);{qkPY@N@-~n$`1TYk zy5%{hox!9vagg#Xma|%)9uJ9$U#3Z7NkVhqPKh~pRWZfs%W)TDRm zSs-7w9q4M~O8m4qqcLNplil7JNIG4vjrCjYvq2WoO=HKU(({jT7c(Z~Rv_0FZkc|A zI5sS6gJ}mIaYByLktzrVea}S~*l7SVRggVe6j=jE-!|)$mH2ye?~%-=OjTnM~PQyJ6828(v<;yCz&e~s|m(H5;1fCl!c>C!j+Uy-hsMPgtkk~2HaE{BGh)% zi}Ne!9O`NJIOTJht(&tzol zt>~QnWuHJ%!!e)ow|mdOo6mp9N__v4tCIQAw_*A5^sBse?ErAxjyR=T#l?i~aBWu21GROeBKWIUTSMj~hkzhcBNE4l_ZO z?qz}v&Q7J(ez#679rV*)&ngesoQ$Zt%??ix0SD=66By7xs57-}-$n@83YajWZu+`} zMCcqsum~8{sh`4FO)uP_wU$L;tDw%mToRSTA7oMmGubNPSi!?(i2AjWxkCb7?0gI& zvfJ==S#?wNKlB0%|*%1irV6P1i0>-Fk*H z3QQ%3Qnf{38HuYK-+SkXs#NmQa5gC*+EQ>v>^9Xhv!`3UgrjJ1?Q6%0-Gw5U192V0 z5|`iL^^9k!HH=ZZUsAw6d*R_BaU{uFw6I#B^mrztJmlg41rky`(EwSAJy$fg|NYYv zJx!LKgS9B4RFq^7M5uTj}mt$bJ}=cF1; zV26j+dE7F>mW<2Wi!XmG^D}zR?SHkPkIL;2MU zDEu@g4HyKo3xs*I?U*g`ci3=%8L!2<1=L*daoX#*Z$Si-TTL&tj$L=w?puN6{0;~Y z8{AZiphn>~(HhWo`G;w`S6CQJUzWrxNY$YvOO;PyJ z2AHH1O`xErv=y2_(Dh6`0$v8x9#4k&!*sf?Z^456buJO6bId~@m4#}D1EeIEBR^3} zjbJqZGkXoza9Mg8*G>%d9r)i@ULng=brRr3fV=_6swP4Xkkxtp7E@W*na?>K5oKsKlC6a}N@5kAwPRFU*sn>6h9O0PO5aa0Q z_Y_z>hqGPdj;cSYb^@4eArgOI@neSCVK4py|E6n?ZULP96!3=6c4Xx&N2)Hz)Ob3G z@Agv553onXNo8;ea_wIq{(V5H*C$9sl*g-I0wpnTBTTK-n6 zVH5Fe!eFkveD)u6*7@Ai+St$vmIuF$NTJ8k`e3c?IxFYhH{W@pJj!DM&-}9%JrQoQ zia$k17(Q!^`SAcJ%nOE34YVy&|il8+=217oE!GozQs#*NPI1^ z{IEVC7Y2H-5CNrmMQo%rO}h}&eLvb~kn**1c@+;EE!snH)Z-27*!{?_eZ>_D*7i*5 zJ-j@!&0Us6Re2N8SOwT759=RHh#BK4k7?QrPew{Uorz+_Sz(^4anYiTYK4}uk`H-yHlLZX95 zkHvqFvJZ4>eO}mNo=h{oRQ5HVJJNuMamU8Q^ulg3SI7pWS$)6ki>}tGVUg;u_Cp`T zj@UI!cXn9$=-Z`#WZKK z*>%@85TP9y9HsKs$}HBDdWXBJSEC9~(wEv8&H1nFE@~nAYnK}8i{MQox4|GhB<1ZN z52^F9v7evb#cfFUl(k&4lcznDx6Dzz3VBXi(yRswRD616(zn1!>Ses~TzmgmwumucD?dIKhNOus)9VbkY9XHs zW)*dQ+(S0$V0MVy2`Efho&3Pgxrf;i%|z}k7Prd+x%8r(S*3T&5F(^VC{c{7Tn1qZ zvZrFPs*Xu}_pph?a}0b05#%b^#fv|sG-%w4Z#!as0?;dAqay7}a23SD)CGZt4G)za zK(D|x!wh|E^gu=-Cu1D6j>8*L?I?(o?eE01pN?_Hp~)&qub3ggOX5)~=H7Tq{HO#C zQu?-Eydo`}C%=H}*;+(f~MvQ6JySSvYsenct&EFB5 z9yiZHoYG_klf~ZiKq%P@CJ2;`E53v_U1ctEWTi7bIX6jcUdG%l!dTHaP^#fS!_Ng zi%t@9$uZR^r2UR4euWOOKWo94D&;kgvGl#hD)x0I@XIjI$M7SM4;D&^6Tv;}&`V@1 zYN^Uj5`XRCt3r2cd_QBX-j%YtO?HMCMw%a8Lx#_36V^Y>P(p4*3NzYf#S0$hI}Id( z4jYoI1)l^sO`I8j8P^l)wz>{{o?xu4y5bmGrCk$O{-v^<z|JuI;Xa6qO-(U(&b zD?e=WL^^^8cvZ0isI)M^__$r>-D!wvTZ|{J^$%g}_A>;}znq;~`>Qa7_nt=V;B`oD z)xU8q3+iyOf{J2UOy-^HZ7dG_0I|PvkeA>vGzy5-LM*jhCj7Ikc%t-?6=1*#d307e zcN(J)vg6CuG0`LyZ##^WV#D3;$@UD2ed|?&FgV`7l4iNCd07B;9xwZxpC>6%t}0=C zDIWgAzckV(zP`TRRie&IR~NX5!OuumW$z z0yNjFz}Q?o$jtw7h67`4+jd}yxqNW7R4Wvf!(rt6R{YPR<^C*O~Ud|*)~U{i${h-51Apix9xpRp#V*|A56$Ad`B zVqGOLBkv0&$$}NpNZz3_i?{X=t5*E}OQ+QvVyR2wd%f1T8_dTwkZZR#taK$d-L|}_ zHv60=7`m0zYK3M+wSBN!RNEGoG271Q(^}ZtE>~!ccI;pwp>g=ZtZZ%~at>2_=)nHS zCfh)2tlmkXPOIP0shic|o!)6hBb<6otot5j`K$}eq0_dZi%FrQAie7)z5vl2#D<2_ z?pe3atF9u(?jUZyv5^j`U)>)uyL}J4qw#sA+aSD2-3c_}owMDF4?W)PZ7S*A>=C_L z_}q@qdwe2#3i~+(pVJr6^tCeedOh#cZSSdU=<`1A^(r%b!`&cg-q+sGTrt<#t=@fR z+uu*a*y%=J`p{2o*L!-{Kc4hztZ?A7ZdcRXKpW{mAO2u&!od17r@7!k1>ZMX4TGTk z!4K&7kKm!fLv@1#^PzEtq0jGCPWy*Gu62AlA7We|x-OKIY5~AV-~Ke0zUhC9k{3*B zc>AwV^6#@@FU+^tyU%mXhw*qsfxE-rW5W;vVPeS<9p(`VS^@H+5t678S^_?rKO>h% zBTNLmj25Fcg{>Ssat}ISME@wZ;wV2Y8?NM-F3Xq*4;y>Ym@QMkWTRxTM7xXzLQHa; zv~5g@fKkwVT=frJWp^AhI<6Bkp#Mig&tjtZus|+(LLjr9z;nW40LDi<>4iDzAW12^ zJLpU+AU!a7rPu$GRzQMg>Pm3Zhk*B!YJxv4ukgTBGO#`9V(R|gR3s0#lf^Wbz)(Dz zfH!Vnn)_-z^$%GJ?FOKrjm!GC}ft+cDDWx zq;7YXd1SU_9?~p12W6b=DuQ$t%|RmO2HYY2f941e=SC%aCL{-^cxXq8<|`^k=LcY} z1M^FbjB6H@Oxz0_wA0&-u&ttn@sRmFi-moQ`9sNtW1jhsf96l!=YBU#zW>wvorf}! zcIi@M=~epT{J`Qs^3qJ>Qt$lI)WuT0#`Ntj*(;0XtS^hWO{MsRp60JW zY1!d^G#-J&G`#2gen}`j&bM6e3btq5ciTM~UC)l5@zkQSjw0hczVvNDU!#Ahe*hvJj zAc@80v)8*)e`mowgrig?{&; zBpQjg`{U_T^YVw5;vfyA`R6`iPOaJ&P)R-rsnr_0FxdYqCP-@ooi7-Z_2Ye#@VMPb z`80@{ha-#94EfTmRH1b+V|>U_?&#rWS>6Y#sk7s%zT2|nPayJpj~g~G62lTt7mfLH zO;<-b*t``%&qRK!&tN8BrAP*#mabON!>NMrJi#;)Ds~04c*`b?v7D zma{`Flxm50iKCxpDd43LZN44$Rl0Fp5js8(=#3~-9Hvxx8IVYib0ts9Z#%0}3={rP zN>`ZYWJUrYxpy^mEW~nVf2p``i})xV`7{ zj$AJKF2E<%^*jMy4UP*RTyZ;Mb%(7`G?Q&r@iLmGOf_h#92R_YipML$zUz9Eh;>fS z;>fVh=U&zCQ*)W{4~STXYx%_~UJuc0d9{Qe+2!O6w^3*`l>Y#)E4<+&ss&&Y8t%G} zgL%ASC|#|1I--iy=1K-I13Lix@b`Db_%%DFUT@Yz_DqVPvKaTNer2=bL zebIaK@cb-Z6l=z+a_k5}6XO0|iEfo^KUUF4FyxIs>8z3A-K5kh;&?QGaWP>f?3NUK zLmPO}pZndw*0cSQ49Mh0ncv0; z-QE1uaE4F0zNvSKY~pF-gvPMIjKr4Kg?G@ZNvOxyLhr_3AZ=Yhrf?Vm}^96)i!X ze#&S*OZ>(%3TAKlPnKx`lVgO+LWmx+{1l!oZi5?*-0>@)7p5T9!-etyh`gr<{AuFh z@2+X(jFS-qPP2U{wUwd8zhg+g<7KCM;^Q@-)TcLT zr9~?A_cv5Mw9%3NKfp{291tO*INmK4B2l|LVy(J2fjEH71tX61GXgolrOI-Zoa%fW zMid#+fhad)6Z2QX6~oZoUaSM6bgb&2U~7O)#LrgUgAmWSKhlm*952nLJVBsf9G`Gg z6_YlZu=sMllF<_x<-4lyJh4t9k|Bncq40@J2OZ*I?c*%yu_j{4@x&)N86jgu%Gikw zir*6HA$l-&A8)qZj?ReXmob1^o(XNn{5Y!HvoqpLITKtJE@wZaDKNA-> zk4rs>BSseFCb|pXu<@NnLVC+gUXz`QRXF=oWB>;MNLA8RC(+Y3Rq7afvd z@FEo5JPXL-}MgTC6DM4~fVR*dnjJ#US> zE4~dtTTD2->YOk&Y4<&=4a68Z3|>jV#QnnzaC(%mG6zmr`-K4ug8(L>0o!2{V_$KW zdPfl*@V5*Tblu8TymHv}$nkF%DNpW5daE+gYuYR+?WbRD)zua648BbL!@Z2au>jB- zV32Hbo?EIh`-Oh^{#)d{>ez5m1O#6QwG0WoIW+r ztIV7Wdge_F{X3@Ir=_QqrclD?X*gwJO8Odu&WuJ17k zA~tSJMO&Sd7c_q1o`w&i`}*1^U!H_o(408@pfCbHwDbv!GdaSR02q zt_3ix`8q|LW~0XX`)Uby8@v4K_ftfL3i)u_t9t+PPHWn~)Nj6h^UqU=REe;WofwE` zA|h&8adB3VnS#yb-vDjf`jG(=-o({^#TXnfYrrV9cuiQxgI4;xTyQSco^jsF!d+%ql?U0d>~L`#J3fSlgGH2J z=LALNWD0w`O`=EgcjLK3STh@;7*lB<(ys-s8T0RTI3zj3e16PS51Ww>fLP$h8+6JG z=qb8nzexz~wQ^Y@ZoXtY%jCIV6gf3bMbmx-ra)@Nci7XdbJKc-%aMHGu9yOqmWK>30o zl$eYmno*c|qLK4!c(f-noWlVucCjq>LPNj8t6f5qbs@=5BZY;drHpJHS#7)ZZ7^GH z2C+2eJ8iHxy&DwMB#%N&1bsa_VwAF>S$QnKRA4!_!d%R(`faq}JF5n?J?!|1AFQI> z$Cyqz9x?sXDCySdRLtf~%*}h^g?eumd^sqGMY+uwA`{4E$BIeDX`@i*mdyq+)`3{&0>zZjIKydj2)ADo>WPwG%_oWm0cg450F}678A;oHkqbv&WNhr zN{Q>B>Cn?V4S3-V%N;d=1W#*i1{VJu_i7ePYu$$5s^smH*)5{83`!n@m|b}P$$Prn zW;k*N@_Y{di_FP202_%a&j$L4p!~FS=%k+(SXa9}^M&|-6zeAUyLeYjU?-0B;pbNs z5nFa1cP*)kv8sZw%6r8i^zuL9xdfr|pR5ws^yGjdWZ5$PHjVsNV7UzO(U^(KVh12= zifqZa(k5MUW-9CX2*T_bz7xP>4hV%*JePKq)f-Yds+|g)b$U`RYjdE;VWnK13ltkG zu+uoY@|V$T(Fhep4CYEXrY-LKI9p|viVpxr@88Zt{$RJAD5-lP^m2IJSfNEWpcMh0 z_=F|nB@bHPVmoF`_Gg`Kekp zas|^cfmKD&m-tsen335xMukN`ek6qp=@F-l8AfGGS=tIXek`BiXQu2Z@PX5thtltkKmpU<-{#_7K5n|vYD^uwZADxR3w^A8P+!ePIp7~8olwP$2jyO|Q4zdj zScw9HUfJU?^G$OGzv;A}X=9|@dI50>%5t;OaWbY?vfac8oTuD9dnHhMSKSu8h{lP8+jPUn@-}d#Eo8W3Q`<7vEy}BS^j4=2R>R(n86H3(aX`1|Cv|BlQc4PcbC-AIdpf6bPU~{L#GTK z(j6*YB1$(3NC~KfQi9T;p!4uQ=e&B(I^SSk%$ixh>%R8h=O(^{RF-w3sUo}BP(iXd zRv7usn{qt$&Ye220e0(tOG-B?r<+D#x*Kor$*)2y=y;#7n&(JDu(jB`L9*=StgKZI zf7XjmY;TwIg`4@Rlxy=L1O_KH9I| z?a#cA2hPo~?BEt_%^*n{3!Mzmx;{=6?8~q|d5;$tB0_)FJi5Oi*M%=fPxOeGI(dR+ zQ&0wXfmE1Y?XlgGj869B0hmNiKW7_Jziq5eVir?QQzo)AZ#9~nCYMAVb@4%|#fMnFu)e!o%^EWH;r7Mw< zYZh~eRKgWMp|y;RcZu|$bp9@-=zL-r02b=3pa(w5%&e7VEEmwP*F0VSUGu3fayFoJ zU0CMRiX zjC}B5rVJ~}%}Wih&idlhhYF?gi2o!lYwz9aSoJyM$_#6D+fG?n zTdYw8>3CfFoTiI$bgp8#y!s>Y1c6l2k7G@Qzi;F-^9eaPPvPUtskncAPtR;gYjjMr#CiITSF_N2u;R%*0SI@mz(O5Ci6B}d@N)oc6Us5 zR2eGwH>A%X#1f?-+)aI8oZ>h)r*gB7L;~R@xud!K;Tw{f9FtPRZ>3$hD%ANj^IHjo z`pycPY1ekQ==9nv>>@=8w})W!@^75|l8Qt(G=sG^&UbDKicUv0$l74Jg98obcVS+V zu6{0o4WM`>LGJa5WyVN=-Xz|b!2R0Na~HgP`8^x&q)H8{QuEAeD#*!H zxsp})Wi`sIKjQYpx$W8~6;jhNGxsA~>UR#2wCRQcIj805X~x@~$B0b#(N4we`nBJy zEA?D~UyVB=z}vk^^7$UB!+5V19@BJZdDIFuN#M6$oDfwJv|=3HLmw%B{C8iVtMKZ6 zTdya1q5-t78f5c{QYPO?`b-kWzKPZ!a?atI;Gc5vZX_GZH>yP~H3?+z68##^ZSCH~ zR>l2o12E$nw9Ic^ODpM zoPlRtK-wTJX1^nav17@-)D_+x$9rccEQ+6rwpKV|$({Xie;>PYdT7OSOi>tnvjVTlyVs_QX_C8s_W1}K<+Qpwx!Cu+AAR1#RZ+^q^`-Lg!gH%Qm|X9RXmh(p46;^ zh>K?YXdEd+1)rzF7I`)5_86)8EIMo@vN!3V{3lv7zv1neBoJ36Al!Bpfyab4mOSyy z>~pHSzmD}?Uo3%8(F0uPT z!V*ztW|vt)V^~-t{2`ADM*|6c=8K+lv{p)A8B6fTfm>tAu~TLX6bKM2JwfC3&KeMv zUrWWhf|Y-B{d&S5xta1aMas|8Zzm4^dBI^2$?@-2L>|f zD#RkQe4uO+L%8HP#dVhnrbBl1-td?~R}E=PPK?49&)974n4|Rix|g$eh-?Z;>`@aJ z@fBk@3H|$jl}XfpXIpRAXNWU*II~5kTOiy};G5F~`G2h8)P;Id*R9x5mkJ%KsA+i_ z+AhjBwzw<4zXC-8?Gtw+RX8Lr z=n0NX%T|V%IK2N+I4nlTF>HOqIQs30J?0Egz+9Zalxs|(`%cYEayG+ciGh1MJZG-g zYe0YZNmOvjR|uOeE=J)YDYHdd32UhQFI;7ZGcXy`skOBVqQvQCc(RYxP-`B;ml%(A zf$uX7qT7m!NZ^&&eoH2o!l>R>sK%g-i42Jec;H!4#0Kjedkeu9_Ne-e$Xi$|s zaXz$aKNhbNLS~}Ynq{DxM{|dMM8cx*%omTz*(f=dvK=9aWfZ>RkTeJ&sQRc&o9I_+ zB>5V|qQ4uTivs_{ToK(HqR`@jb7u4(ZdlWk$rW#c{|ei5ntI^+`U_V?A(LSTa7k1E z-b8{GDvy8oqiWzJ(-TuN0vMwVINqj1>9AE^!ogS+q5lvHR#XO!i;}<2y6q z>LJnyec1Sswqd`k*ZANN2D|eaz-J zhIDnXI_4B5Ac$sM<8aQmB;tk@5u4iQQLA#Bl5g3x)wv>iGRV0p*hCfA6vgS8lQtFk z_a{LT6&h33K=MIV{i^s6CP>Vd(mADz<~&4a3mZHn7h9L9xfI_slze;bsWl&QnrEZ1 zf|}p=2Qi~f%oAd`(U+>0<=v6>;|zKl6q{&c3u@BfORd^@(dn$bGm*4U%5oI7$#8Jd zQ)~_Z{_TF}bjguy7# zgNWU->x?iJfWt1~4!3wU$G2030c<%h#q+AD5$}4UGYz;_CNy@3eGAzX4i?;> zx)?7S>41G%M*NF?B_sR~<4KvoWH>1`Vs6J+j@{fa@SZipTID&pyU~sQ1vf>WBm8wN z558GGBdIop6Fgs%3FE3wDZ;)~r+k5k)4X75CJ}}VJtM>`Xr!(rl&Jjr+m$jkG-1C0 zy6vrdlrlRRscTWig(9Sl(ep0K(oq%~G%?sX#=}8tx!A}fzy zfI~vnrQuzXvPGErb(^Z(u4bPpdDEB}MRm~9xaK|%<@6Zar*hg zx6urat5K4rIExu+ScV)$z{}KTPG(9!oa&U2Fq*7K94pbSplUYGf|5~5(sQeAr(&jh zY^`iHZhgR7Mcohr7H}zNf@;YhFC{!6T`*5LWke#6zT| z7x~asxwAGARYiVKTR0Tr=O@)7Vkr03>0#PU?`aPV5Zyy-0^SFb`_CaGUfP- zL*`_TCfH#8Di)}&kkuC$n^=+i+|-q(nM67E651v`aM`}Ub=WbLz)s{_ z7q6na>*UOOB)gUWS&=U`An#o?-kpt+(>hxuJ#Uw4l*N&rT8A!}eJ5q_kx!ZN=|9g1qW%Vl6HOm@$Q7%HzO zWwJx_R7cI6ogXSt4X;PKog7NU6ZTvK?!Vhuk8{)q%@$P#SJnogz$4`PM!iQ3D|qS$Rtg{URnoypqHVxOZ$yma7lp9=+AuI80g!$_pa#UOyuhKZX%)`s664!bs$}Fh zKMpFUDEm$B#!8b&_VB>3Zub7(nugy^3wKe+)7c41Hi7M3cvA*1urVjJQ(AdG)=$)8 zt1>L{5$ghP;M|aQP!J2pQ>|2mGw+co!WusG3~UEq9Oqgbe*=V%Z8^bLI!Z}3VVksB zGS|g_DFR+JIqmJE5EG7+gupLiDKgGZ1Xz|&UQ$xgN15?EYs>}6*{^_KJe3<*XG&V7 zS|l251%hDmFJ8)mT7iQV#DMQU%y&W21EVqY?|seQV=28m)$-Se{%060djsn`SMJ}5HwFcPG=q|-vM|~$AppBntzgX0h%aeMcu)XAP_GCW@zOGD?d!6W zuBFY`Dmj}F30HM6_?cz!Sh96iuHK&J8QouoK$zh|C>!`9wf=}PQXsY^q&v`LMSaUz{y@lo% z*dR=@9za?dV08%I=>5ycjQJ-ed`ec#Dt3dg&N75OV8_T_~Cfv(c}$KH1sKa%99BHg;x4|S^sJYY0G zin8zL596c9t?yw2uSni_9aEMa!}&PJejdL~IVM1mIU@8s-ySbnSIs{<{ycQ@`PH{8 z_|Ltlp9il*dBa%O%6|TQL_GiR=lLu8?{dGcqki3fVNw!0`TgbBzkj~~jHe*^Q+pvY zNc1UA^eJoBDZ$s%N0?I>;~9zk8JW!)Mf4d}`5Dc-GrF&5445+}#&Z@u;xpm%O6wzz z=gAW3 z?=H2!Ug}~l`H6n&dn?_eEsUbCX!U*&5&tiwsPTUy#Q+HusxtBJ_Uf+3+Xj&dy}Q~K zZ~Hb8dHC-?g_E^fIfDOHFX=pstKz6_KACBwCJVuV5#af4z0CrlJOSMosJMkdC;Zme$)6<#my$3xj6|NJ~$@(9*h_e(I%s%u?4Rf}^ zWD9ykBT4P0zUu#BB`M;Ec9CI{$_tr(9AUtnD93&Qgm4CJUp5LErvv`CulkbQgs};MW7aBjt0oq7-`BYDLOhjwMlTn9)VPFaw@v$UcRb#55dNiy7kurBR*`UgDrZh;|EjIyz<}CZ-iN6zVwkHD315TRcXlf9s z!(@1~l4|y+`sM-6rRGX!rZ8~Q*vb#P0-6X-3#+FTH4A$6HEKhYXN}?sufqb^7Cor# zlnMzzW~QSd|3Rm2afLZ32;-l-MCAMN%s-s$>cgaM zUdip078klQmn)TDQd>ATmB6k; z&vC)hSya5wZT|zL|3(h|%TjN$_rE#ii0-R5%2MaEyQ5eyB^RIavHeYOBp7EoQm^`u z|ENczbzbrk{4}5~oQ5_ECSD)1@bB52ETz_6JsrRP_gl_uJ>5S_omUB&;Ei)EbCSZy zXC~OVhEKP0;3o7hgzJ0PH&s=rumBCHdlJgN*)HsIt{T#|E#gcmPDNsh(Rh1e>q@?F zU9?P@F@o{Q?oH(7c6}4FUBq7tOE?*01wGj6ET?rb0c#zaSx_y|;qw>Qfc|)y8B=|_ zoR`KbDzp(psbUS_jibS_$EK=jL+*=sMjQgb@zZp?HrtJK2Q&lnnO(~PRoCrO$~%A> zt3()SrpH*d>0AnJE!qSxtP1TSik+&Fv-7A~ee6ij?DGMvy^%3bJd^_q}Gcj}4n$6#FdZH$Rq_ z4yGf%(Pk-Re96GHi_)ew#k`FVYx~8q!znx zKjAz@qp-?AnMjmVL8)l2!O_i!PXg*Ccm6REFE5$8=DR|6oN*1jMh<_+hAbVL@xb%F|NEejq6 z9Qs+rcE{e_$&V3YL9kA@1m5Qwd;J6mFwH{`iiCuYi!R058Xi8pQc^p3==qyv8kRSo z3BA7|`_Xuv8P3>t#~xG^I}Qk9M7Aw&2zObHL$obeo! zk6DAK6i(Rex}tr+`i={agDhj?@E)2@xl|wGnp+S~;~1^V01J}4aqb^;TuuXpw zJ17D42098^z8yr|F2obKbG(b(oRw137QGq*p8d^iXqsd?1fp;StC$7sR9QL_+W#lz{Z++Wz*Nv=R!QG&8N z?6LTCkBw8GFn@pVlou}~_;S}?`Dx}nmb%fhfQxF3EW8px{6(pVs6^KA*q)O4hvo{F z5Ds-O0GCMy|0w|l6hPd$Y+!N$yNymCc%;Nmpfjax3Oty_mD==LKYd*vl~mTZ%Kwy7 zjo*|BIV_~e7<=PkFlz?Zn94i}HR=ABDogmU6yoyd0l0Cu*og;`u7=*vzZ?d|b_JWE zXmQvy#l@7NSZ(qC&rx5t7%uyZaGxl#0vBz5!#@gpoRz8Ln$|A)-ERuNt88TthtCwDE z`PH{Y`KIbAU|tVMGv{N0WQ^k&5iS2++$2o!cSg$m|NI~k5e4V zVy5^}JhG0>P$6)ms>Z#yt%yHnWcd z1c;4`N}C~%ChTGQKyq8h`6;1#yErBh6QU+ohEA8i@OZMdw4{0fUqFEs|(%HZ|Y+K`d4K9d=rtt?~wzb z04|Jklz|`g@Wvr|cuYRx}F$cbCzPM9#)+U z*7TEr>jUqD!*CURG_j08`oPxFM7JBGpFoSnT>XFN?8>Zw8zbGbN`Z)E$}j){4LCx@ zj}mMUna8X{vqy(v!u53s5vKBQOoBW~h*mWN*4|PJ3%cf0KH<9d+Di2QypRII27;35 z+4GUz>YnN`aaQV?DfRU5nAF%kNJGBHqmSWDi)ydQ>39@LfFkKfAAMxEO@+q{Yydng z#*mgRadjwFogwY7Z|anvMC!-v9wZ8Z)#S!tC>2QxSUf;65vkrZE!Imj;I zaMY}~M_oOO1F$D|=h*qe5&?&n)rufdM(;d#$H9=RFL4Dh#NpKPZ5`#WDPRNpd}XKfZxVtqU~yhSjNDA&}_oU&?!XsnAA zkj+Q0qC|5AAIg$556%8tK|83d5*N%C`j8nLButlxYgBW{l1Ob@cJ(H4qf|`%&KXr& z@5*OXNUnspLlvz@nZmalBMcP5b(JsZ3tEFHW;1)ZcA2UY>ss$|BxBl2T@Lfqz`UD- z94#ZVH9K~#+#a%|td9>ed@XXp#L@7?=!M3TwIJwEbR&$*^3^%5c+VbQf&3~;^F_3#+P9`d!u6-R_oM}yxC!<< zJ3mSpCR-thm-C27gBtfxM^2fCESHs2je`=`Ky_5ABTG(fQF*O`w(gSd{5PGaM)?59 ziyO=UG>6?!iT+v%FqnAGyXOM(g*FxV$MQ5RIX5)b+iMpH+hc;O^(;vm$!ed3>8|AR zb2gTqb=20MmdZouw6-H!grF`d;>-tR3c@74qc(|30Q%MRt{h+uQ!%$>+)rfv!tduY zeTHWRaYi>p;YZDC*e`U%Uwl=q9}9Z{K7ue^HwZGvYEP*ad_t=MlN^Uj>nk9?g`|em zs3c$((2p9zF#@0%{st*^1`F6yM=ixCkIy$59RB59Qb7}yCCa8HMK^(`75-m_wDrVc z#y2fzsxlb7KoPafSxb^TCYC!RS<_KgLkdm2QMr%jk{{NU+|FrjvL6wV)`i!=RRiRr zN0cF^u#WLkx8HQB63s82UIeYjg;*APpNCyh1fGc_-(uDS2E(EYO_9?59g1t!j{{o; zQKUZXS_@%HK3q*N*SS$-#dF!jDn`ZfMs1?I@NZSR39OoIKcMwv2IN0HyboV(al-g` z-5#e^4|0RArvu_vst+j}ponn4@R$+FiXNU$;z~8oqckIqh^{l=y1pKPVd9^_;`<7S zB6CRfAG+{y@ec`{+VO2q(w@wiw{>w>`>%KNOSdFwIF3l--5_H zG<`7+1`Z_l5F;F=V-d27Ft~lK#!S+OV$%w*dh{l zZ6e?z^XJANy77}%d2J|tg0))S;stp0cR!PYAuvrYJN?#4Z7Jbl^{qc(^vo>YeuyKQ znyn?GunJo5j`TWZk9YXR=2C5UhJrbG+>~GfgO7+i1k6RHYz7&5M%?_6z3c01&*uo5 z{?i_I2%)r>$#)Lj*|)d2GCSFO=J22`FZqVV+2G|pvT_&vT;s>_16q2jL@*+mvzSEi zL{InPAx5hOk%8+t#?eWOh+1LS%oF()Ymfgf|N6W@C^WuwZNNReNAv#GTb7)Bm+n5U zVeBDa!b`0(N3zn^#%zNJVr)R5#WD767%@zA@k1onKwD+&ZC)kv89qS+O&^pG#=RBv zmzHw*LaXgmmWNk0Q4smh;)R&1&_nJ_0wam6Ua3|GRKCm6POPXQA(%3sg|To6el{+O zIpAhZ_G3{20PHpAaFU(IyDFuqSxmS)@IA^LyVe$|v^yF59OKG|nPw&*&K<@TBrU~s5c%Kn7I98@qAOA}o@!NnRRygnYY7cxcUYxS~;2g0g%C`8R#Y}ubvKj#>$cNS*YTa z3K?tJT+PM#!HP?~ry<1;n$BIIasJfI!zW8|nAt3{Ns)gu-T8chh|f|bOIh&I(gI5j zDaELm$AyeUdRM_PUuE7f>mNFA%%<;XJS8JXcS)sMP-;qGSOFGIj-H{+pZ(~^MVYV@ za-_85*Y9i#+KHJm-JD9EAL%L^JFVVRJ~x13!%=vMdd5IT4pb3b7^daug#(iAhM#L6b+w}2^?n)01#5ZE8>S(QlN7Qism^m z{ur&NLjRFDZ9TzR&)}{yxStC#KAC%F%d_k3KE88Skt@9=rZL-7R-Fqe0W0AzNcov# z=_x0C#bLfLg`oO?&{i=!IxQCL=AZCnD=Ua-9KDb<|NWcjXzC|o8Y#9zPdTvo8iSGi zd*xUsIo;;1HMh?t^c^KJ4?%Bz|L>}4@V;zCP9_06stT;|uV-uIghoi>Y~#-0r}U9y zWcV$o?6D$>L*vVIo?n56sqj-?l4%1%-&eDEa*p4607H|h!8(AT$zQ7HqHt7Qo z`6c0SKCztcf){di<{WkQ$Dae_HEDK|qxpl715Kag%xP+XK>5kk9`j6c5m)~J?`^G%40Q{LY6x-h{npe(z_%w>dcM91k1N%#;`1X5$x+E{qj2ig zIOk8tI`3JMvy8RxNMrMaY3RDt=6s_i&1mkfy;`st4qb9;CsIBfrjlnLb*i_n(*WA^AimGke9b#T;RTyKqk`n>d&>c1wh3g@>iea zs${@D?mArd3xh#z>+B74Daydbo}dJ-#PWHsjl6i(T zo1Wq_IiPg0+gc^+=E&Pjk*8;sW=PJ~Slg0JTf zF}1Iww4aP~aJOzu1Ze;HqBWdL`lZW7+w;U=jA0}tI){?fQL zUF)w#=E(M#CEa47wr9tz$_?y^mp;`@^E_R|9n)q;fgq)3Zi% zeBV89z*KU_nk!yh;C&}iS0E;HTET7Ggn+m6`_BKem6Kj^7tD@5RpGJWYny+2Zmq%t zK8M0c{}JBre|R{~{^95r#>6EOBn$gck*Lq_sH9VidVO14*qz8Ea3o6!JjyM5N_BJg zW1{`*+dNE6ZFt~x+LYNLoWuC`!@N8p*yV^>B^7`w8T@xf+uQP0yJ67uy!v&^p}d!Z zC^E);w3&dAfQJHNv2y${Vzm6qX+w+^j1?3#H_((_ZqiJX7fUCNelnel2|9tM6l^iP z^CA~;-dsC#n9Sn;mwWGR(?|&BHrw0$bg|z}ppf~6tN7A&sgc*)RJJ(KeXY&uLz!ps zHLvGp_QhWJ8tJ9`m!X7~6X`ep`nywk0xn-RfBPRSJaiyffBqAAOc6f&=zo=R|KEAz zh+6Co#b_$R>)Qz;=66w0geD!g;AeS{Lw$zhiSwFa+(fELN899@x#tr8N1M0?dM}JP z$n8gw>R5!R&40v9w&?G2v3FAcn%Cy%wGxfOiq9V$R~u4!ZalIj{hCKm zJU(+WyTOjichSMWSl&$cy!!es>W0{sSSw||@*mt0Eri}M8_~b%x?gQMeydx91JP+1 z;#naGtkZ5(>NRRaJMn6L=}>D@AoTs3UG}giyR!l1+(I)~gS_d?-0>NI&ew04B_&PU zW^Et5GvZ@oW;FlQIN0EXJ)zmudI1@bMa*FGX}h;3+Sl;N)cYwe$$I@BWRwtEUoRZ3 z*+PqRkmB5L02bH0t(bP(gfkYivpVstkaG#@Q2l$ZV}4#Ob^tYUyeODDfszK=p+i~Z zxOR&&1=9Q0Q{nF}VA)10eK#ECZU!049~iK>_b4JBzsGh+0_((- zM`>+tF=j^myVA_5(g=oulXdigMRN#F8kQD-619bHDJL~BSuqIq$Xbp}coTc`(yxZ7>({m2gY}i!7iRK^${E zO=iKE!R{n~|7ItiaGd0nto5lSd9{+=Gs)*gE}B!BB%3vZd-AkGTYFD5r#bgaZoc=F zm-XzqwbWVPuN`u4_Hv+^lNS{Ds+yjS|B^Q_skaQWA$#r=+UG=j+>GxjWzDxma!D+{ zb~!`ju0D|OmiCimzbUWB=3kM$p)|uPwUXAK zOW`l-Xp_&*XYM3b)H3C4yT^!#`?n}_p{qd$d+cL)7RNrsERV>@#Wih>DBQVIXIY9= zmUuU(Y?Mx8sqwzKHh-#N{Z@@EZQmMOz~J?NTj5Ji`4?-rCT|GmO@nHur6-cQF{YjE+YbrFDl9h+Fbb@#dJ*!=EWS@!)gj+UmK z{8~xXU5G6?VWFJBL@n5$@>Rq3ZvcxdYE%rORa45ag9pvugw^u01n_Y=TK5WqX#G+4@|d%VCEyrSA`XWtRZNF| zn6C)J0avT|JBCywj9Ak!iS~HRgBm?&+?B!MDKKZuUCuVGHgcIE z_%o?{Pg1yjF#*Xpn)4L9NDWgm3Vi%cj{*RVw1s>fm2ic{z0H2U6Vafw+YTc?cg+`R zVwVzKZzs4;l}s^qR9ADGs&+omo_e7#kJqPI(2ZtV(8l>^@B4zlaVsb2qRAYS1w>Br5ZOcR0iSB%(|fRJylPTMD>g6cwQd-v19nq41UH$ZF7EC*6M?eFCY zcx<|vPlD$=e}M?Ao(#VM`Dyw*!JAcaxV8;^XT^&H;Zb<_`l$>FRssprW5HWU^H--n zf&(~Bw9NR_*!spkS*iDqTQG83GUqxqqIUR|S4eOTvjPj{^+vsRzDq2>j|+V8`TVp3 z20ZVc-+Wx#45yQnDJBlmhbJV_5JQR{M6y`{aUTNaneSLx ze@Wfq{cFr*Mgmak(ytfd@=*_VO>R}d>xGJI!fT%7?&pvV% z-5KD$ZNr%}pur(T=QWwHoSA!53}VGF7d2h6(rdjo=T&`pyNNj-ubz9QaO)pOD-#x= z?Ax9*B95y5ADn&rfU^VcupV$WVJqk2PmWKYiyn6ol=wiE8^S*y>h|bU-JOehBmq%k!WM5%;W9ebKMwkui|3tI0nB z-nT1|tJiX;ANnHZiYnihiCX zKc6EatEVvRi}TIcm{=LZ^G6|MDxEVVG#*u(8zKC>&l$pMH2KUlahFY&$<+AUvG;bc zp)rKZ&eDt@Y1Xb?u+F@^Zvs*K5fXwplvkj*(|~klfk)jwzq(_)S8X5q(cYVR=jR8x zt3|E^M?G5gG@JK491q47#3@weGQ$RHxnRAU@Z_D0^TtMW#^U^36^=qXjc2R3tGaIp z^Hmz~V>4^GW(yAF^Qf6X!cOs?ut{@_8HIHExp2W;9l(yuq4z2PR}`UU1&t%KqzO2@ zy}&c3JC0yKFbEsSvS#Zl?ihy#d`gOcO^Hmu^*X`?83efmF7KoI3y{e^5ncP9X}3t! zo~L+g{3$wIHwLWl;$4xGBGr%*)f=Z(2*6hpa{@<`C#n8BC!(GR@yJS`pis~^VKy2j zV%rm}NBcu}{g6nHi8b{ld(&k{Q_7FHg8=xl9kpf!BqC7-s}2Q4fXTOzcsD_q)7Y_K z1LGT_nwaEDE?7E_?|(r0R>o(nXYvxM%M%fWdy*5YUOyy|2#*#Dlgpouo z&$xXU)dgQSt7@LFXLv&f1VMIkn_-9PfQ*R;yCy*n3OUnofK@@X&%2Q?4$!zh(72%F z%3CB0k`KZ)uT?8lF0KhV%uCx30Di&6%26_@g-LSP>REP4xCzv z73Vsm4?6^%P=X=krchz1Pp6nLQ+$HG0=Uhu2B9*`Oe?p9d&g$NHcTT{r_qsQ3EYJ& z)JOI02R>NL&0Rjyz2PBARCkFvkH(So4LRa#xhPd+Qa7@0TRBY<9Tq4l=akM&U-pLv4yFP@ z#W=#f*vIW=cIpqG76sPD=!ZYduLfYpi-K}Be@E1Clo5uO?H;6>o#q}{_|&LIKHGb$ zZ59!7?sFY#gK0+-PYJInSWkuGxffYq4;g#j>J1c%=Pk&6Hz{-@rS!&f2@wYh4mtZS z`JIo^nTV3lCzJ*?(B$TzJ~$xDQXrWJsreeLIPG(0{xq2DtM*e;== z(IWuRV7?4F8Sh)~2M!1yWSM}hFlyH#)PsfYu zL(Ye+weLoZGa{EObOPNBbcr1|64elaMGVUzfusD;oPJ) zzQ~q*?)I@z&(N=GSWK8hC0tPPxnx+lHg-fhUKuhR;ZVqxQ0{0aBddIvQ2Suq1!Og=4n>xqF~ZDxoS&B8coW8GvR4u zdcu@V%U+rRGYVP}7IsU6%~mhk=!%KKp>K$Uvy_LwZoyKEaL|bD4G#ap;i@L&sN_uc z=B(AznGE-)r8Cww#m*&oIAS5m~{8;Suft=r3yotrrWSt^-EoG zdW5Oac>cRXV&t(h`@TuSu9EPn<|_o)I=qviFuZlL9!o7!a+-02LTr07V7u3|AUv}8 zE>L@-uPiNGleZgpLC>U1>Vso6)i#HkiAlXJ_kdGLtPqFqnK}eb7L@j?Rtk39q&9nI zaw-)%xAQ~?fch;8Yp_?99PdotgXsN0F|0*txitv;Bx}1w{!s1PGt>Gc4*Rk?;ERp; zjA@Qc@9(T~haCdwm)Z-ccb{(=219m`=}oj&sKx`x+r~4IEGm~ z>U*)RzdwNqYxU$v)%sqr`WbiEw#x0Wuv-|2cSuWb>PtLM>+e~_Wm_E-?QdEWVivH- zh%n{(gu_`|`^JoNh*YK+-(^TwhLcrgK%g+{RdUynIZWer?ALYkPFfpx1dN;Q-HW)F z=?gLK(~1-!?M@5epQKGqZsL$ukH1>EP!+$(ClgND99S~!BO8VB&!svon^}5?Rx!^z z$zcOn4l+n|tmQ85pq|t@?XDyp7N@31nw|<$hrTcjtdmua~n*q&~~>ZWI6?1byritGpkqH3dq#hGWK~szZjbILqK9 zAsFZIS6r^$Ku6D2l**qu@Y#F+TqzHSX#yXSpF-Kz&_>)^b536NB_8QJ%$uIJ8puVp z{fAKA+vifVb|1?`ljykF<4SBs2tLRS%&Vp%wYlexv0m8C%)cUu9TYGBs6Cg#yWHML zs|#4@YOkq!(Sz6fK7ZKxH7iXuGmJZ_u5wk($d8$~bY-?ph2x4yrviR$hxbJ|~0t?waUR{Wk5F6m|FDiS^EQ zzetZ)WiN2!p=M($+jNg|1AG1;k3(w`6$3M5)Hl&=&BvkMn9AJ&`)>=M+1Yxgz05UP zQdV4&)t$0Jr*S^Rx9D?Z>ln%Q@SVhKP7efb$mf@dX27VXSDQtYdvZ^YXkcZZZ*vwX zk%0P??qJvV*gI51u3tn2UYkYe1n2Hs4AnHext+o_b$OE=TK#p;2~t^nAaP(|yn9l5 zkovDSt@1HV%wemnX3nz}-0z0{Ow?jf#qk5BNY~yEk{%d^SEqLA4?PbxXdX~o%>6J? z)F91KC4;N)TUef0AD!-k=U(b{cp9Gf?K1*1DW?$D_hR~MUJzNv@ z#SoJFFHOwgh=#Big=cE2=cpJibKjCHpRehk*;Rbv!;a_4dYUGg%Q>_MM&>0oPW5z` z{v3U+GIo7jK}2JCJ=WjW-JHBd%d9sL-Jw(w_0+_0?!Vh)@io7a;ZyVet6f(v_AD=D zd~3pi?pJ1TgGqjtkg0?<5dRx&Vs9|)eMkIh$e@PrOnHDDyT)*q;AYn7WZnsr+ca!> zGqCW3f0k5PdLU4P;|6qqPg3rUI$>wBicmB9pw;6%6dE348&qvvC5?pkEPZ$W{_bJD znT^g$GRNr<6K&6lT)nWpf^q>!b$0lzLlay4cijY@zAmYmn(yrkaDaPw!^p5TI-L7B zyn;V&m<*0&Udg=60LXfRz*^Ol^0vdcRLJ#m$dK|_lpyQm*`2_SEZSLKf49yhHX+4R zJblRL%W)D)B2M~-zqYEV!DocrHp#@VDQbk>7#sM9zAqHYGLR4N>`miUY31^2M(d+2 zfspQ!LpIB0vXolM1JH8%pKC0tpOoKYpDQ(3G?8D(RH5)vKt-(8JVobHZnayuCx zx68mtD(!d1vd{UYJi$Wn^4CzJ8kGlK zq_Fh6uAii?bIdE3>1TsJN(Si#gW3q9tvNA^|&iyBrlN~m3o41E~1;ln{4gIjG@9h zalwylaOxp*EPm2zU>oDUbGcl+o(txM8pWOZr9rX1wI1W|63DP2+X{#X19KpT#PH(< zj$Thwrh}5 zBPsBg6PdN;V|}HB-eNS&=DTfq;!7?BN`i^bq7SN#%)f;AipY1mhC{4OcRS%e^?(5@ zKM$_&;cSStW#Q(QU=xHwQ#~;%=k;4m^vZXMZLZg+-uXrvk=%J&fgBEHQR1h0bgx6u zYZ|-O$p|@g^rz24rCLyixM)2|)jFjTpKnN|3_bfu@K}_0H`$LVVe53XTpZvA zT@I$`=u(xB^T}ZQ=R9XqYAuhxcWu9$9l<$?)872Ozl2n3o zs&Ff4RYTNXpc3Xb+B+T5l=B*mO=(8knUL5R0504{zP^C6m zSdgW}5xY6bKev{YX|^O-YsaYgSSItLzMP%|n4+hKdtukp{A)S_P0FEO0fvf0N^wChoFnA4P%a5% zN>#gS-Wfr~YDvr$Wl-+~36^lOAmrj1b+EMlvA3wmMm|VpO1^hvlJ6{Mp%gUhdTx_6 zegh(NC?yUCPcQSb27gV+hhpvL`@84(8U1Xv_DJR3#&b z!NL|s0jU?*j1%%fv~y#~MXL+&^iDI=?H-@2ua=-uxB`LyRQbAod}2bH(}T4ib`l+9 ztbQcHyV{ND=CPaCkg}dQQ}egy1uzI5>I5K$;^ip)|L_gSL>nCBLQ4p@iK~Ny7EIl) z6{4A&LeBAnsSN>JntMsBBfJzJ7^f_h)(=V3!DD3f87(AxmdajR@f+rSBsSKn8lF81 z*^_eYJA`7!hle$&AF@yq^q{s|a-L&QY&6mB>*>_Xv0(}=AJ+v1{PKOI4cv`_y>-T= zlj0bWj=FM-%`a=4yJROv*swtyG$yD{Br-M)lyElI8?&;(uGi3jL-VIG@ z7jZ}F&=T4d_18>lM;Z}J$~{GrHNF?u_$#$5iOsW*WBqQK1G~~2^QhlXgfd$92s#WD zEYx0wr zeJ3O?k7h9+!XZwvdiA=q0r_vp!c&t$NTZ>c#1HRM|fvb%zu_5w3F2DLPDsZ)lM zSPtD*j`m%@H#R3_GiKeOEoql=Y?SqRN}}4g%q2zefxw~oLM2Tsdcr&MX#^Wp8^d*d z9&usPWTI$di5n{W;GFdf!=OELZt{e(ZnTDU?9b6AzkTzc1hO(gHn2aWSrd}XvGz`i zOtt#KeN=;IX>tPF`OY;7VR6Z#LY3;Y9?q}n+c4ezb`ye_RhzvDm}My_mgI%cT6>q` z9I6=&XcJUt8<%$qCKYR$|6F9Kw3Qdmj%u)a4YyolX}RNvw;mpP8$< z4UWu_vWIf4r06V>9A%Qm0T&CR-gBTCHazXbq$Crlb zs{8lpzH;p_nn*UnUJ7N+>Q62c>uSTlT{%a8;i!4Jt|z|2?>5v^thX;`!MNR0Z2Uli| z($j>2d0eE=!L`kSVLsx&IOK!f1}H6RX4cifXX5*3JWsuMY}OWEfu~|5xpRPQ(5_|uU#gx#g&RJ!!VesURR02!dFumV|VzfM3zwOoT z0xT<(S!qkdXjPmd{%gFjj|pR`#}aR|5QM!YlYHr-mP~ow(r1fR6yuOKdMD+eUZk}4 zVU0}tmI{hJUJ@f?&BP%>TJ={H+;^qwfE1@JmqVl9j+K-`K_w|iadC0Nq+EcY3l9$Y zZA$ZC;D^{sDZhB}c^~F__OB{qqH(8RALpLrp^+VN=`jh(IKtaaXt&)T!_0ME zI~?UOoI4JB{^BDd#s$dFv8Zdk08R1Bm(Jn!N4pLt@(&5=B1u|=k~`Q&-9vbm-avb% zhk0hkcgy=__LW!-rTq`g7TF2;cF$J&=sw&X5AlG{R<55X zUH^WL75<{u0}^1U_^13U>bVjVgM=qc6CnWD9A+EqS1M%`znrc#%QvCMH&Yx}sE%Az zSm1J$$H8~LYH3t#zh8vka~UjD z*Gj1-BJ(I5obYQSYry-3DRvF%-H%hE^(zaw8`da8-Bfy@NJb(=3~%MKv&V6H`&nC> zf33t)W_qt-uq5IltPfp>;QIxy24zj>-95f+vx-Adr9py;a+3fy@#sMk(dLVluGjnO zcNmOK0GRVDv=02p=R|UA*OV2?J|~$VPF#3M{-?g(2%n&NEAP1*ys|i+sLlm=7A7;Y zSqcMd(dpt#hQ%x&#Kf!*>4^EVF4r4a{l~#Pe^!2e@Sr_Q(Bn0FFtkjmb3CPa@)gPr zLcOYUY*t3kngW6?(uy-5V~FYl#G+?VaP;L{^Ert%V|YTel}!i*3x;?b~`i)ZK*!bvEg z@Y8R)GjS%~S0333f+J$OoScy@Vew}%0>(VZLBEvl1eqYsXYka)=G!n4{_+kLIhZ(2 z3R?&QCPHEfhwultG4j!k*7HT3f5u+uaO#M9>viH-q0l4sK>PycC6)U8&xyiSgN$79 zduA|wc2rqwl&PVLI(ov#crgriDG);p>W=$lJP7ISKG~V9Cm1T`?G#fFgPu9TTcYvq zeCN>9Q-Xc*19`GA;VrlLBoL28>jd5dcY}P7kYFIYQG&q%NE{H_9VC_99XijNkzN3p zH58ZDiBQc$X=jy=&!^M&i`cER^f;iP)N!pF^qvqzd%359f9p*y0=A;3M|v|q*;2Vc zS<{hlVwCP+xJUwKcgS2I5LoC$oKNkmj9@cLK-|G@jYFS%DQA=J24v}%hA4i@h;VjT zCe(u*n%Rhf@`5#{R3$f9)afA4eU{C>*NH)gz|{6{+D@Vq7=U8jnu*2rYX)SQVl>5Cv}%+;jBU_!`nVmRfulPVWFw|h6nrV&+HrelEJ z%MEc~Eb)wq1bRN>00MD)I%s%r0_Y6NF?oXzZtrAA5r z62qr-JSNA(^HpH8=f#xu?!!mU5}%z&w9_XG0b2YK(l9RyRX|RrPzK6NsyrQCq_{T| zhZvPDvxvO{>5Wy54t8G)j=B#sYGzOqihi(9R11uFDL8oKN8!g6pO;fevBbt&{&}1^`HVfmkzcE%!;Z-HpoUppipGA zCi8wGN@6|gsgMjvP{dXg-67`uB^IbhC@be0-30259D$i%KabaMg*b0%@7$Y);-#$ z73UD5q6Y{SR=->lEJk&tS;9v{pw@r(3a<=S8>12@Ew3y@oGhvks)gvuXX1pW6BneP z2zpG6hmuZ*6aP&ol7~r5zQMI6oVt1QF@#6qP%YC5yws`l5(PITT8EK^x2KIRh?(AE zS;VW;(jV1e+K!9@oGtB3N+Zl&GDVjwiL%Y0I;tP9oE1gcT82AHs)t?V5nre6BITY;=G&6oBgw(~bdZE09EvCgKb72v?GmcD6TqmL0=X;k3 zH1Qpmd?bB*AY3(S_L6H)i7EpH*PRtSGN$k^maJHft9e205fNXCG-Q1dn?`{^t&;>J z5-dCxsJ2Ir3-tk#e$7_9pU9Is;|d4_P0nmU*?5r0Zk2i>FgUhRZrK)w#^% zkBUA+Nvy zVMj}Th_Lkg?=$@L%d$|A5RDyc-(lPJIjgts>!w_3hyfp67FWUq-Ke^}aP(0BVb!nc zev~}aZejM)p6taw?$nEHu~RX#W6%$&5&7=AYxK9Z96$`5B-sLABs~K|0Zje|9~&|; zd~3}eJHd63``$>HJXT+{JgD#{|DhE>Vm~!i zvD>EOuACG)`Ke^NGYs2NWh&16Gurtm(@E8H%nX&O`|mJa1Hnp`y~39V{H+F*8V&bZ z9j{-c;z^0VQf#sEDLuII@_M`SQe-e<2`^EYUiNCjgsA|P4dnPu1M|2X(=dk)?%04H zDC`TTU7vISaBNmzjdH>TFNXlHpS2%316_$ArAPm|H%+RxKn2{Hv@pOhH=lRb1S@%$ zcG3*=t0s!9`9&nI`bKO7tQ7}Ftg@s|C*@IVfnl>hSv7$RsXXyFf&^~@rIY8{D$P0P zmP8av=1djn3gf2ulmH22T9TI(gF|iR?C})8q$~%QY17o5_1Zx;BKvz%TGrskG-X_E zkT%;WpXREi#DMgiuTR?I-(F>RQ+S#<3<`cexloPwcK=bFt`^Br1NJ%YM)QZnRG z!DXCU$gu;6{gfwnU>AM8fRwtIIL=O|M4Z{P#zd1L81c3*e+K+m*Bp!-ThjH#Ine`X zX6;0%*s8LpZ$(Q?<+@^yuZeb`DrM~{IL+goCAZH>Ieu1(;^a^r(8Jh46_r)jbSI1u zN)I0wsK9adogY6OL2`=cR3f;&s2lQydG!O(Rcje~>rg=hzi&b^hmRny_fV6m`Nc6` zKap*ManhKNZI0iLyDlu{Bv*Ta84Pgokab zYUNmJ9jQ)ae19ne(sGzY=+}Lg6cBnW*4}H-s6#$iOvK)otwtO{$L@`sIN}Ok0_z+Y zx-jw3$py3)wr{?FCsU{A4e>#n+E0QuJu*3?f6IyzYZBjq{vE?()+!M;mp`*|SO(iq z)+5%LkkAFB@)u=!la6C5G1HL;_jRmT>~=0lbhJHK`V*0lweV6a!w^Vao9>ksRSXd` zUpd!8qysZB?`XMd?>1x5x>}86;Vn`AphYBA{3K?0o8#i&z~rN9z0k8aWf9%yr~`bM zOpTcDY#B}(q6$J&;`mV86VV&Dk5!xWHXjahTEE?&yu;PP(x}A|VwVTvky}H66q}sf z4W-8F(d{hkRC{rglJLWh@Amx6{bWxRprk!Sutzrym!57r6?)9?_U$K|#j?0)>367< z^w#WC34zq3ZE}NDqiUZz`i7E@z{580sk9j9HD-8)J~5zu#r=(rsb=c6aCMdF&{Bw~ zL^jLvS;~QngX5ju2JZ>CR0mP)cE))l!Ao{S*~e!7N>zYr`jKIIndfI~as*1P_K7-) zlJUviFe{ZVBLtsBhtb`zjaB++wHPM@7w_xkwokln4*dN$~+mGI+{c^R_1j3Y)j)CWH8DAOH2=C>(?$}}YA>S+f2 z%XNVOK;laY-zr;5N|{N8)i=kx<&vj<{W7Zh0#WuRd%ylKNwv8cfagq)gySzpht6c9 zlnRRXapCf^yaK+$sp}FIDCLKL)HAy#6{=g9Y;gtxt?+{cUJlGD;Un*ozb|&Rr8q~2 z2hb0yinEfi-+OQ#1*3td$g)S?zKZkFF-ZlTW%!rd8}6y=SO~L{PIok4I94XemVq$Lv<&X%1%+rN=YNRPU)? z#P^bnRT6Ci##M#$UXC-P2P!cb5Lgc3Dd&3hejI+SZG5l7bHn{2V}mrJF=AY2DV^s3WRb+mxV}u!IwdQoxW!WfValUH%WFel* z61lM^o3lNY0}!b*+jlkkaKC)zd>vqg7XJ#1btT(5Cu{9YAv6}-uzTE~$*-nCyH(Dp z?^i{=@YwjvlX#;+bi|aEVipe<%`nrYTEq8^TdvgjGp1|fflZghr&bPOW}81(8lMi|dPY2$tp#2% zQvy7F(!w@#yGeUy9C$r|Ze~A~jd~G0ZlYmQ7N?F~jibw+K_6xeY9fvLf9!MmPlZ`t zy?BGMqUjYjL1p>7*J$7f?@zg{q}8LEQ8$v`EAn5XMf;P{;E%LF(Rj0)*R;k%Yrp=) z&^%gWsuVP$I1Hw-*9%Ulsk5>)19g4YYm0{;kw%}d`eKa2T zH8@K32)Cm?FrGL}J5P^zw4=u`nN(o)%}fioXJ#{*QWtgf%`SbkXIC+q)~of+eHZS) z?PM}z_R}~2!=nR#g2}8MtI!aoxg*A(Dq>wFzv8X_b;=DM`u{CT#L}{kRu~zMB)@eD zU(2AAQy@?v+`Q#0&5EKY(YkXYu=x)q1{_y2Z^@50P{b`>fsV zBtUxO4r?H!@@zV2>VtO5sL>^;yZQJO%U_8tnH5dK9>MfjmX^Y~a!KvhKm)|Xrt@R~ zrG0rhuB<4OLe@fbv?#KrRFulhbBKk^B9Nm11`Za*ZSXhu0^HV6)cX$D9zff6Z%b38^>?n>GL8> zzYcEx!Y%GATjZ$zqFgD`D(hjQK|hXE#B#Bx!HIQ13A28NIYm91E=aP|2O0bG1C5>nVF3|@& z^cJd;m7>Uz?-A6)c#cCq=>c!nqNhnEfXcOMWj4ekj|-rz+zj?DqDjzXb+k|or_O6T z2!VYk9qHuYi@t@qN<%d5qV#+oXb?I~3v(fktHj=dP!sdC$AbLKxV$?He8X-iIl zG=32^wWIkBEId|c@53>)2(Ujs8)l@Q@s6f^E#K{f%}1OSNg#zyNY)^=#nFaYcQ=vr zG{mj>?*}m=)_yNfSK;)$3d3>~n>>PX{7>!_d=JQEZyQt}H9Ddego~5pN+Q)?VoSDs zLGnDHP)u;qg!wVdE-kqoq16JFb7%v5SUw3Qv$U`r+?;f zdF=L~P^wHZx&Qk~-|N4?JFiFPGR_Y~64pMT-xSy%<6sPpmcb?4kYLpCAznZY3r~%z zw#!B93#)p#JX!C8z364df;3twzr39HFJO-TjG7pe?lg9yr$+;KnGUqRoH0C8nXuy% zm$`Gkdq@S*XW&}pMKB4PN2)9IcvCjIfby5fADnxv!+BSwrI^T}@-a?Qh3usKD2Se% zmWQJV#Tf0Y-<237SU;7yuI6%hqF;amhf2stma0`KON{6KMTeMl#rQMeFG1-Oz+v3Vvps0+vPxfsI{{`hk4LlV)J8s z)@CSmwjr3URCp?I`0yx%!!kGgZRFxpEsHsK6j(i)OYJ!k-r~wG(rZ2&e`L-FIJuL2 zXd=ixjNU_=%MEO2V>)87@vCeIHw98%pnrauP}M~1$T&86){>wqFR*N{O<9O*kI$2n z#c~Nj7@22s{&OCtWj;}2Ch2CF+v1)nH+y;hJ7G-C4BOzgHDzWY6Ac2dG1`SOQMx-Q z{z^@aUc22%6$dF_NF9uJ>b7q5U(lJKjAEu;>F!tyAlcNk<*lU`CD4)G{1(@iXqNQ$ zf$Jd#En}on!E1zDXV-cLpVuNQQ@O3r+gReJ+f==5yTC%RLcf%D3yQ_d)u)2xKrX{t z4WS#S1d5H+JO=We!@2GICU6q+Sk&#Iw$7v+6)8P%2+wV!#5ofU7oJc~oH$q!UxPl= zbESGcpZg3f#n1=v+ucl*7L*d;1u-an((mGc-PuG)y|cy+?6<>$UC1y>JbPuvD460q zTUyZ&H0OnN-ERnV!E%%rO-!sZmxU`ldhZpzA@GPH&o9n>LO7L(~!|yx8 z%?H3gytcbs`lc`D;l2Hv%X|l2EO-bn)$=O&hqaIVgdAE)bnF|Z9c*auZ9kj!y1>&$ zDjoJ0ye-Xuw?;DG1ffX_r9#|6W?RQv^)Kvjbzt01^kqi7T*}-pe3rj4GfgNj7G3A9 z)_3r~(Fx#_{%6+B`5Tqv%Qyd;79Iquy{2Anwo8qI1If>(Ejry-_k@ZV8H>*iHX3=! zm8l8RXP=I1K4exFfw&^$u2A5+!&vl+j*T*=Fr|9z`aLoqNFlz1o!Ij4m(^f+O*8Gy zvE$%UbGiS9nblE$Mwr?0>yths_a8>4$w+}Py|-g*vs@v>i4z_*-9JNyw5K{yPIIQs zf+agSK$F0!xvcIl-dpklYycUE8Qzu4pbnrikXm?&V9i@|2h|_a87LJ4Lgw+Fd54l0 z0Fcq4^9dl~7ErGkq5LZsNVRKW#t4ak%yH83ar@rm7{xZu?RnuvoHfaqvD;8 zm4l4V@Tuh8X6r)dR^fHGsBuVRlxhJ?q;_cf9qc~@N}uG&7)!I5#906kI|Q-TlaP1= zQHKO=RD$3wAQ5MDp5U;q{MfVdFeoJa6GKF!Gb`!yI9`5ieV4zMb&zLfT*;E~_>$J1 z8~}I8g6@kCd{y~*8}No$AAL+)B`*H4)w2G*l{6E*A34t|x)EBp!2XVhxvq;XoEq$G zT}>EXTo78@?XMo>4_!^sWKVvU?uyZp;b*WqAI`+?FjS6EEPl6V>8=u*j0}WJ)F->b z6W7=>-rwpxgHQf$O*TvvDrfX;%nYDQ7+M3b8e1ycSb|re5XObpKNha^@wgZ^AuD#( z_A0uu3;l&yZ4qRWu?qYp@N?8T0qaU91U)8U%TdCsns|lC1f3vJzRRiVN4Q2pz@Kq{ zs8d*N5b(Sp`Ol4IT_Dkb*SEysU7E# zea;qz3Ny{ok0(&@`d%QdMJ)POD1DQZn)aNex`x1KoTVZ)7kME?AROC7f28UXOb$Yv}U`o7bgZW{lHig1QsG6yq!Ch6mTERs>TL>&b0Wk(|pN~Sq(uGv@UH*jA%>% zE+i0sP|e^&020?bcvHyWR@&&+n zV``6?<l{GkjGXL-FTKYATJt2v9^=Rfl1Y1cfPz)acyv@h->Jxo;Q!& z53e;wsrpMjt`Z^B4Ki3w$?Hv4n)Vl{_taet(+q_%J69@6W|VSzQ|cFY+@ikXloHRa zi@(HQ8>`){@qHd0&>xRm6p;FeqK_T3cDgC9O z%O8tRR#SvQLi-;Y61_BSIv6=KuxezgVq2L*)3 zhZc4VLc6LKRs#&>usaSwt+^<%;|?EpEqZL@JF63B@3=y$nP7orjxf`YD8hr~uX+{Z z&g%5h^=vfv(|o=%+X&_C-BJZh5{l?kzwSuKfxSV3-P*@1zMY3WwZILrl9Q39tTD$R z7lw9n?CQL))sJ_%G%*34?EbOPg38ch^@Easfna`Z8s)sSLw!>k0*^&#wig;RE)##o zICD!49rkWxEK6-kbsW7i^+`2-xT1E^u+YqOdHRp?&AgD%E_^i(aP%SgXO`e@ufG&F zPnk*(Uvg-2@4Lv8k{EV>DftGnU^GjtWSk!V8m9L6?dAgPyez6j5QF8SKXdY54nN=2 z!!JFlKLwVR^a8K7HlPwx1{Tq6@^Zek+%0CIBdx6HbpZCdKz8s#k#E0a7Kao#Qj!CW zASOq=Uac+gJyu6$Ro(;+oPM|+?2YyT8dH~_LdBVET}iG!8t`r7!vHcUJdrcYI7s?M zru#<}-wzi8`Yg0yz3kRO3!<7D|Mz8`7q5KbaRV{Vau*zPcI@G?g&vdw>;gq{J$+~e zZsjW+zjiRBKZ8h^!2)AB=nTO7?h2#m?r5&&XT$HqU9#ML*OXa3F}oz+S$9P*Z-|7~ zK)zQk%!}8ZQgE|);&zDBT#_Kuy=_E64@Gb^^94p2S!tuGyrOAl63H%!0;ERrypcLo z>|Kd47}8(((WVdDQT~Y_I%lF!@u=^l4_^&16j`4>+}MR~Q>tJV6BQ~b2*`4X3Ee$T z43*&cj{UM~BDp@H-Ek?5@vu9cE1y&~2Br~Xe9)abDac4oScZJxsk`Capo3k>HQGj` z%5Fdn906EKq1ntRi@>Q#H$JK}JY(M%?vs-qR03WzmD#s%<13$SBX_yj9HL}GM{_X6 zFf0ViS5O_;2<`Sxoe@u!zUXywZ77i;FR3RhsjHuTyEaSioI$ac81mPjkwEB&2uUd z$vr};DB-d@ z>Y{+!2_lH4A1%hc{Ml6>1*|b6Z#2{{9@|zW@Jo?6vXk~lLRu$Ri?K$+oLUIQmuWxs z)W;e8c8wu4pM^n<1uE(Qiu;*@<3!5-rQ=Q}s!3SL+q^EalDGA<-s|B#2g{Z+-Q|Z) zvM6RIj`H+D&NmHH#T*JU2=4MsDJDg!eRo+7X5kDp+EW|)#YrKFG-mX-eTG058NKZN z$wA!9BKuVLx8tsu1Pd8%%94HK`!N+*zn0X4NdUecJ;2@R58Cn`Ub z`1h2=nFlOA%<^};9pEfwQ|t9BQ@HU+wX!HUNePQxm>?JUifn^;vlv->gh%}oA|~k0 zrJv)m>0LIT>_+1E>gdUoQ^jEfLtLtH9;!rs<3@l9HunL+jq%E&i302o-((VpLQ26j z>nU&62M)rT@_*o}0EI#)zC04GY<@l8a}NS4_zGS3T zPKb@krtD7%N?!mwk(NOE2*f?{t?F+_6JjSqUxQ{5^&_ETi-aT|THPe6MB2E-s=Dxx z;uB~Qg5;*Gj@9AxSjj#IKQUMdq}Ec@kq<;tgi%y8^vtlFMRKt}8e`ZOx?|2vjux^- zi_>kF_@WAI94rt8L2%u5S;_0POO1qSru3TE+3&w{sdwW4+avpxk<~7?2ahfu?w5tcX#}!=l6(i>8rTv^g&c<~aM^uQVlG8K*$R*;g+0 z>W6Psk>CgSW<>8Pn?jJ+Y2r)I4Bnf zb^5~ASP24P>gaq*qo{-UF5U?@AsN6$q)}GZv@*|+ulANhmn8WNt;H|<{+OZDu6r1vol*+S-bnDRZCJGu=y>@l3gghy)wpO z`on_OHt(@0D~I?B79U~CK<9hZ+87eCY@kCdvFsv9YCfm+B8w-BnX+zPAW~1^N`kqW ze^o&E4?z0QLlGohf#RqI!|35IRtZ~kn+>hyV`|om7pa=S!@DB|y5{k7+tQgn_hNBZ z{~4!Dj?~<5MNO1#6@`gm@o)3))lM}Z$a|tflfHGR7kZ@%Fczz-PlW2f6uNw`Fby!* z#=gd%-P2;r&`4yIKL_5qBI_~eMc+|mG9H1CvM;Gr2%;pD*n9ep)#RSmE46JNu8`#* zRAC(sv*UV=^{|aLVob0)A+xdXSW+t16EUy-;j8%UD97y&-MT(ggvmypn6X`Z=%cZC zO1u9}8pN<5IX$n8&y`SvvCu6VtS7(AmLL`Hg_z;W^HD_f<{=Vi&juMD47F6-W}zIL zD2CK#XgD4Z+nB?>baA;cP0~Q9|2ThMeYw#HSyQw9o@?!mlDif{=ly(s3%Bjj`f9$_ z$B3whe_Q##_0g#;Mpm$jVE_Zt)W)_2ux|x}0wp=-8X)yM2dPzWWFdEwoUtj!Vs28@?j0vO*_*X004ol(0-^`L*wZ6+0);R1(kPnkueL$D z5OH|P86lhC>Zvfx(F--L{+Q2uhg(%o0{Za+4AB5-AtLW#@wo6RVyl>^58`&u3fb@K zJmp`EU~ zZIew+5sP7?3o81-3gt=)b*^_<$nzM!!JBo5{C3NZEx97LjTWsq)^3E;#t!zyM?lrQ zi{ZrGdbAw5=Kf#d-*Kzc=;fFTzz#jXi6nF1y0XH1>;udECb@<13hChE=CYo{8>Q(o z2K}2`Y$q0#Nb00jCF{l3#~KdKTm{rodh5h5I?2%j43m)U%;theJ1e?&Ts&|kZaluqftoK1IG`efC%+760w3ko>86XahCqcvT-9ZjbQ8zZx z-tN?UFsE1gRkp$33G2{=_DFDfO7Y&F7VF?M3XN7&cK`Ot8zTqUGYJv1W3)(J>+Iuq zeD+?F>A(VpVcRz>Dse~zGuvR#=04`s zxYE3ju3HJwTu3Z38B@}YQ@oc`PosOIQqgKlKa*HKS}x_ff=(U#s9I5KS9FL<&<$2cXH71 z_sA6aKa^LaGS6oI=Q(N@de#!gX14n5BcWz`pu%B1F9(yWCb>MJ(@jTKTVFap|G|V+L90;B^K_TQn1lF7%Lo$*6*HhO|DN1bJD7YoD^+8De6L&Z<4vPND zTZ}Pf{BFv(#`Y&&b-_xq2DvXtOMekhwpn`n=~ksAUqhPN2Wh=mmYZUhTs{7w`t@W^ z=Qf?Z=UK)IYv9b?+;jZkFt!-r;jfnpQyn;QaMz}1uYH{N{P^!3!3#i%mBMMz2i!p{ z#a9F=dRNCm>gO}f=^gkb)pqatk4eNPd)Fi!qsj1kY z^9;UEVou}(pJE%|qP)qH7?IEsD&FYN(48fheVoIB2c0{L`sLC&pkMxBEvc5VE}&{! z_N~B+a8_h9{d~KAS?QOR9t<@ZO0Vt6+c0<0a5DW;T%MjnZNi57Ab1n1iI_@ zes-=st+V*&YW#8Kd7$??ha&Yzc_MVWa^QVa#6LG{45}}&wZ2V4Tdp>2X6uH(18Utq zxO2~#e3m5@v8;&jaOaDg(VQ2panjs(vg=*nVhw8hXyNH!XSQ`>nOwI{nf^r_siDAX{+f5MHErESvcbj#Kam&69Vciuo>4UGNxBq))1o z`46gt;0c*0pXVjkJtnr0Da}aVoI3M;E~k(giznZL3G<&qbs=*ek$xoy<_A&-A)g|i z{K_#b4ozvV7Sfsy`ROc<;(5mwOP~DfRVk%IK59`n@OWbEYE4u?i1#^XUHjl8pH=cBoZ(CTym4kUVO+t5 z6&j_jE$^kS*s+G#4Z{f z3bWvKF_b>RO#{70sE}>SsY-)5I52qRyn`_a9omtO#VUUPDt@Sfbf-6VUFb@V8psje zaF$=e3{$ql%gIrhavY|Zf3gEh(s*tLBzJg7?mJH_rdcqVtM*~Y#w&Zo;-ze)cqK{# z;mEwE#rXLVq_&ayUoVl)lRbjA)az`SgHSUU7(=n)cRGqE3)?(kp4moLNp-Tv8Sg}w+7{6BoX_d6R7^!H69Bt|6> zdnK`A)QG)5- zEvJpA*bIY8%TU`CiT4|xIqJ7q^KiK8Iuk>PfkupTmKkLI4KVnQap5%weas~@JfU?; z=bYs%az(>%UQEBfd#Ws+7C>$GX8RRrZ=2Zvc3rQKF3`&%9DbNDdVR;3**sY&twq(9!b-hY*+Btxq~M?cAfQ%edq}P6mA9X4AbCK8iJZFaPYX z&G+!6sX-$>#xFrQ1Fdzqov6F*#33lNQvv8wexa=e?Ns=S*I`^R`7}If;Dq(^%fOYk zP(u{~uc*768~!sMu7dUXa^gK9R0vbDDd3`Qsz^}_Qp8^lCnPhmXZiu*eyai=A z0|Vt7tY!`A=na>h3KAQ&T*du`*mIjQ&E0NZDTbLDJG)DjVXxm>sMK~0qhiA`l4{O)O&%AxyVP;*? zrrB?$p%*DTbpT?MnELiX#F*E*#xz!l^?4Ct=-U*tw!9Uo16^n{SyZf~o{#*1bdh$z zch4WK5Kk4HZI4=XMjqWs1V88fjsV<1Z-weXBxm*d?~DHS3`2U`c%C=LNY%u(q=HxS z&$$q3m&2?i?ibjb(#HC!XxC@zt_{Na`uCx4Vau_BkvCYm{yb_Sg`regoEX&*1v}MW zvVWSEI+fdZ-h|@eGT;|;Hoo=AN29o-D$7xfEsKD|I;ebL+J?Yg(7w|~iV>ZdXpDg} zfBkxyP_amyI4W-6!icHav^2a1tG<(wE^{TQ?ZpfUDkyXJ7eyFXEjV!+E9e@1@r?*huikaU*|;iF`E2q7m;u zOK{j?!C@8>Tf1N00i$`w^dNEMJ z?u)ufQY?vBiCaygxn3U5-kKs2H3(KM zHi9;KnJUkH#UFfmaKvDjH3xNjh4^Zq)yUz$V|)W+QDlysb*Pwm8fDboiaYcaCV5V3 zxhnk7d)>y-($LFU7hE|V2C{0ot&Do$=~O3bR>o36Kt7o>bw~FZisAZDuT8(}R(cGL z(F71>g(pAsOL=YMSBpTU-V`J5=XLuKYfXeTAN7vd8$61mD=1V1FTdU#=QeW-kxO~u z$~e~$k^exX>Q%AZU#f4*xAv40ikbTfVlYlsR6eLYK*Z+pwa~9c1hRkdb!m5uUTh2O zxmn1~OThd36w&S$FQ&^2NawA&ypX0lX`-=(z84mwU&JpP#7SH1UNEu_nP5KdTeqieOBk;1e4#UE@z#XFx0em?(C^IQgk~`8jr8zYVUQ!$nDrB00Khx*=n;D-oh}bd$(x5z% z{K}5JqN=Kd=brH<24~r~82O))3|ijR6s*=TxBy>==mdbu1yI?KU$R>Z+%b?z3z%;B zYGz+raz(|U@ZXOjE7l8+nJ?=Ht5>q`T=tuaOeY{!CDPFGN8`Q-Ya1Kfj(CDyvB!nN zN1A(WRVg7sf-38vdyL_+&B!51sde`*oHRq#?oX7!V`W3w@Vr?G{}uB;`JeEj3DP$W zOqrWK@2&QfXKe~mkvMB!(CuayGh`nx6_&TvtP}GJ9(ZIovu{@to#86htA<+63@Jn& zLx@DasN2^#{lfLSy{@a)zhF*;*Q8zAiBMo<67(P*bgm)Dk)JPr-Fy*%C< z`v=7Fq$l}y4C1cAHD!B+y;VmYro=Dz6<^%v2EQeJY4&SHo4;%WYQzc{md04xD70lF zsG=HNM^N8h1>a(eET|7dIP({uRGrjlU^mI?Uh+%*6jmd?Zk(-@HazWJlTyX~QZy{^*~Q@ev>4NG5i^x@u9uF{XtNKFoJPSI^u zm~Z5-IEc~WNSy1xTDp+F=*^*31TP19>-T5UX45}xb82#=zN9I6nnD$NdJM1WB>;EQ zD#p$GsF{Ejxu*^px}yo1^pp_8i)v-^A`Z-j0oiJFYFEV3fOD|u6tgS&y5|9VLD#j# zdM21HeJq3E2Rc?33{>7R!^?ob&)S%o$jrZ!MFEG(H8`;qXmzfD*5=TDhf-4dwwzS( zq({~jaRWfXg`RdM4kf+S!c@Jd>_>Y#i?}=$EPaLt+^#puf|PQt+l^(I{jGwY8bcw@2HZ@)#<5f*W_) z`Eg=Ldv5=RZd|BHm9#e2hH9@m!4T60fy4PNbbeAaKiFFZyHmO=>;+npM_1d$>@4VX z94WCZD1+aedzeZbiexbarG2$ z)g*7toO8`We9dA-&AY*x4@)(lj%${AYgfh9YuBA?H{)x+R@8nQto^Z6`>Uen!G0~a zo4v)lVmH2yv{cRfKU-)2U+F;n|D^+=tNwpT2ig-{_1CGKp}12asbk0N#_@cBr1|mg zQ#7lAu=A-IZpP#m9;w^kFiqvB=jujFZlUBC%(5}wvc2I1z2ao3&ne5df)SL77;P9~ z8gB6@qx;+Gi=u$F|0Mh1;V+J$jPn@?V1Jf#TL8Yy_Kk|&@(jBH0HBDY*jaxu=#a}u!!x>-}ErKc$e)zTwF>a*(b$tR{!YFdYx{5 zXdAwp{?F$pv!Fm`bGol}*o^M8mR!Ja;}AdXhmKZ4;nvc7S_l|_YSkS{31v6j-{nx% z2i+|3qF^9y6oZMJqL*r)c4`Ep7JC_`y+#P#d=uu=3Tb z}@bd|J}A-#`#=t*oe0!al<4EUIk7O-x(5zaeUParC~T( zMj~?t#7ES8>u5_bI+#*2B^zh5&yGZ3y0&z~=F69g1MTapV(o>}i>*7(I9>!jtD&_w zv!zIJ`58R=w-$(xmmgS7f0t!6Ru*BhZ-~Iwau>8R1Xhxpy!iNuc=>l>A$Z;Z!$Ldn znix9-9=gJmxDnWPIfW+Bk=6|U==`xm-^8o@#xH=^@5iL(va3(Fu7AJV^Ti};u5Wy| z1E^96ddLUcS)8E8sA+gk>YBPfqvFZ%27W6$v93Z}+e&HItD<$PYd5we|8`E!60iLT zYMiuh>EWY2?Pv>dp->|)U0}XzycLBN1i4RWR!x2uy4HDh6dBA?vn(k_pcmneO@6?#C2+u?Nz!Mc~Ho z7^hK>A4^vl64mDAGGvU2X=~IkWwqS@-erDT%Q0Bs9I?~RS=M#izRrnXHY8S!GV!AO zueU6`RIu-CZu51a^)@K5$uC=uawtvJ^T0Uq5kAZHBAQb{RA`jXdFbcBK2ui}fw2kX zi<$>c|6!#6?7x$0p<$S);OYg;dVFG|v`=|;LYqTddtYU%yYsiYsH$+)$yiQ%`mxaM zsZ1NJz?Zbb0@f~%n5+}%`G{vFQ`(7?a1*^B66JDGax7wpr}9i;Xev=Es&FM!DBC*I zAzn|C`7|?-xdl2N)+TN0Ac&o=qT5awM#}7DqyAyRg%klp-E1^Pm$hJoJYhPV+!Yfta4yH-Aiyo#FZWqnuWdCd;lC@3vfT$B(re!oC9>ZK2Qad zmFDqWDCBkV8A|Snj14Lm_R5^OkYu0**6ST%Z(GRVS!)*48`nny4;cz^k^$Lmkor$y zVJ7Kn=Ghv1$h2A>u||tv-${MzNxO}XV2kluCSDP=2!MuFGD=BmBQr&uktqV&E4dfK zv)RN0%_;58s+>+aVGD}T{dx(8xnr(08*!2Sf#9mdpAhAqk17ho&Ut~E!!@xhP%_d^aovjndGk-HgE7b&glM}5QkV@<&) z-$|`K%Env4<#H~zChwp#=^;o#AM(1q2-xxit;<6#<;2+UPdB?Zk8$eUtgpVE1k?hM z?b6Ic4dd9oy+{3VN!xy22NXl_T=yy-0j46jZh2KhF> ztVgHu7fzB&i;v)YmAzr%%3$3qpxNF5pFt+xo5d&DwOV*TbhPzVqdwr9Eg{iMvn&^U zJ7a{hm}OBZJ|E|sZH&_~bl&<=DG{g3wIqIt`LB(k*oV%`el+stKIRuqLBNP5sLfb}PILX1?b=svUj8DvvqjCcrlqe4 zbPX_3`thabJ7k^eS3aRwai_zGp`n*`rHs;@wB^i-bhJ-NpPu>!^-`^s5dV}Z%O<77 zC{=qE?KQO{B#&8lVLH|>Wo}r~3{J=_ic(%;V*&utQm<#k9qxqrpf8^E*mb{r=Xl=? zUH)s2yVmeo3gu^moCb5rAXj1XMF_SO^b*qw>)ql%Uh*k__e!?qfFu8 zI7t-N1s=;a;}|UHa@Bm*L;vJ@?f5IU#g)z2DB!Ldu4{{ml&r}|4SrAAc67vZ*m*#A z=jTkR?aApj#wGUe$#GI^w`kLjz_kxfSE8(gG%S_^@=n=}=n3|4lTQY2<0%g0;Bx{V zVkj#TYLy#he}(bLJjYUMs?XE9iZ8EQSpUwF04UO?%Bqud7k6W6ImmL^_9@Hmt*@j^ zQH!XS&Jxa#q>5AFT=0|tlm4sfvo+`46ipCTNBD{Tum6OmZQlu$xvaK-MCB5oNlL!i zX)Hd%iv#v;%|BW?tB8;9U2?su)hE4A5DV*hKeuYL+07s*O;E$6M521jy1D;F@@J4f z+=)KQ?0)W^XqtDK%|=WGv?W~1UFD$WD@%zs)erao?RBwv)+)N%H2iZ3{t-!YwhM>W z{Kw?Zw|iSl@(fdyHblF(8ISOv{Z}(rDca5v!LKCZfR^VO(dpKGd3h^{Io#MT;mIcF zkMZ`i>M{x5ae*PGie`8t69Jm)@j$;5pmA2t8C=> z_UPn5KT*UU`v)rhdoM36oFw5d<5n-Cr^nHFXpE0F=jtteL)XVHG1~XZ1wn$-LhVllK8AxKq5>nt=Fb{D=>bV@@53OIFu4-I-ENo?fM>?#_c`Z!~N0#`aU9cc3<7H2!(qqQwb2sF@R$* zK`wk2BYzSCBFizG+QAXY)o^jfQ&YLXTq^=>N zl^!i`t1x)*`lkQdckltfqT^CDyf zovt+%5_7#h<>LmpUR*Ag`c_bp;n(NEqTCElO4Ih50VPzNgBI1@c*CB5qCR%M)3sEzlt( zL3IOo3sniAhuAitgu{#Pjj?Z${8Np(bdi&aV5~LVWGnQr)R~J);x? z9L*ivXO~6hH&pBsmj- zFW8sEkC(yOU{UG{sjYY+n#qh0obfd!8X*8cY`9lR$b|}=FoCH>(AK<4f!Ux`JXiOb z;S5J9pqXHLXd#+1TECE?Ku;uX|IV_kCWXu;R>4v%C?H_cN^$hEm_?F!5(HQxH+((e zOsr*cSMqg-JuNVM{iwkW1SknF;@Ob8oKj$PSJ3P0760-~jM~31C(VGtYc$aHPU|g{ zB~KIbm`SgH#<@cft0rcB#MjQM(UuzjFv9y$i$T~XTNyyY!cXO6!NoVFvrY(pSZfdndvb!dD<*X)%skku$$b>8&i zQW;Uu*2JqMX6HcM+P(_XZY=?L-fw3r>D5@1#YzmDh$DE^d-^{qac~UfnWtZgM~ODR z*Zmf~X$51~A1L%|O>2Xy`26EA1laI_8^YeHS5PetPerPV30h3TSAXP|dD@ki_)W&3 z;A3;T(mv6|0)`I5DLd2nB|C>Kx~3^0xT0*ROdx$Rv-p=_bd{(qbK0vYl$0Uao~E<} zRk?dAGJj*UlQORxqmjmoghIpDE(y4)f5sbDucmXy+R!$E;i0XVwM6pm26J{8J$B8m z+fZ*&7p+}9oVcb=)@!J-Pvf;9DjgUay8CQf_04*jg)+|BDA$HeyS;D|qIqz9yEKoQ ze#Xc9GzN)u5(BL1W8>7l%3nTFE{U%>WA==%=yb6k0y*$rwB38md!In~_B7U`G5$fLWZOS;GUq9SSb z^B=53JN!!bOoq;Vwf54_?MpI$iiK>yz>aI}4J-cla{G~*4NidYc;#! z+m>0{ZP?dK7ATF{VjB@YbtUt_ z^bhk;^m^oSNE!rKHf!n_Up1Tg{0mp|lbglmX_oFutxC7&Qz4=c8IAc*+1^rQ4?CT{ zk9D)81{wG1--?%kqz&tidXwncp1oPf`2Ba zvSS>4HeHtvyr>Cmm<<-ir{Vrxjqx5OMA6iWWjJ@mNn9M@e6Eq)f7IZVfo>B~EgoS$ zm?ufRz~WJlQwevH9BOtF_nxmOXQI4K3fex@Audnm6Bm_#YdUMMw%7_pOk5N1U?{m+ zm^n9p6}>W=#z5P|-ei?=8JPx~^E~CCgwUmm6pn?3?VJnL72$)KoZ{-Rr&-NwoQ7S) zqszV>)r3t`%earri|4z(=C<~9rTv;HQQR4J6@|V1N|-5P^cD_H&WqQJk288Cr;}z1 z+VeJ|s+*_p54$4<^!$G8Q-`T#`D;hl^tQ622l&aZgd>CqHNH7dr*oBu;GI; zmOj&k8C1@7|K@GNRpHTCA!bG$H`$~%$$#cN{-;N*TbXAl~0^I~aT|r+FoyXG@K!_(lBB}?3 z!b~&U)0BPPEk&pt4q;NfDOL{OSz+jRsn!5fppyAk6F%rDeW4)J%QT1?euo>P1CfMr zhUvd_ILr^3VRHJ=JPhaDCA2ZGS4j_=PG~4ri@8#yJmIeRqi&Y+#o!zbbHb$$5w~FU zeI9kDgnzQw1u|^HD==lYgRAF7n!K+=`bw@&{$W1zZBKKar8V7*gVBp018p|c=d|ec z%3m^;BGd5;iSj$QsWhE5{G} zMSgw6E@!&l7r1NY_kLZY7`c~l#okgK)c7tL>6u712LsD`h@|ky9>@}1GgnXH%KpOr z5rsy5@4bFxO|#TByDvxBU66aPQRY8`O_%Ik(?3OvPKY^)#-gzn5ytl zrKr9IneL=e?Gfc=Ss8FOwDSpWWZct-8T;V8y=xqLbc7*2;Uh*Y;g=_`@At?j5`4vq zE~hL^23|bQ} zj;rq-?D)2~n+9{IY@^;Qen9<>6_aU*Lf*`U`=dfq|5SnRdf0YJIPu>Y3aY?W@0%pD z<9o+wl8aZZilAIwZP7)IoGoht1=n${(@4ufR28bNFlmeOS`W>;a)KawurjkvY>qxN3$*9Z^2CqSj;$~VI8N1lUWyAT79 ziBy}?ihlbsHK)t=;9cw1>hT{gZU8pBEZcTKj_U_u*>aq?M1&p2TauIk$M@SYh05=9t#KCle}R6mYK~55)&oy?WR8VElQ~TEf_ciJ zLG3U2m=|`=@#)pfuI0AQkc}J5>gjV5)o<8Z1(eC@^T|pnbutPi#Ib`E|+WcYXB5|~tYBYX(es@myKe_qO$@VuqL!+(buL9`f zNoWzUUSEHTMlfhM_ZTuX z5a%)_co7#{0I{Vd@`DmWf@&HnDG$31W@WyQ^>5F-(osezWzAE?qclCLGP zFh!ro*9X#&a@OGY`58~|uo?hmR4fv4*aBSuSQVpE*(SsXGBN+nLf;h2Uz)d-HxSYS z8%_GF=0~QndqUMQ>ADdfBXGIB6vAN|b^s=OTAK6s%LA;QM| z5_DG`7in<(c}&daNrRv6_0RWBx6Zh0P<6Xgas&y`?6QaV^Q zW;O#4a*rxdOuEp(7CWK3FQ`Qm>bbODZc?~in?zo{qHE&)!)CuS2c$AEGAve;q)k$Kqap! z`V`qJ*AYme_hj*ODQwe7$@VNBinhQKl&Y_sok<_ubq%%xTL;K{25`P@a?L9g=7a)% z^OQjJV(j4|Bobu#!0cPMaK6oDM(;e;gOVQr7aj%irfFscA*2A08aX%mbFz`s7ZxD9UN+DMp{?agK)2v2 zN2napAjmWFDn09kKU{wmeEBmyjbTm}bjGiv5qy%K-#CSy?;s+uQUPYnh~DL@ks z*q!3xan7}eS?~w@@EAZX1HGR3aPc4BdO$+m`nh&-am`bxVbJrtp3bo*2_1>8hcnl3 z+=L!DH^3{+c(OgYA2bM^G%yhBkwJBI%8e{L^!G`EoFe% zLA!dyrF8ek(@RZC`@@gq&OD#}{cUJ!n-wDW!xsM5A>+xoTK7uyb1{o?c0MUI6xv!l zLi;K56=7YeoTvOB?M6k0-(gxjd&@9qwWrBo(ElbkoIvOgj3N>wu5`U^d!7FVMGopoKowlE|e`W}z3E z68caPm6{T)z_W%buYL+eZrL9dnxszo%!Y~2i%n%A(--D+RdHQaaq+JRwrJT1o_9d( zK=CIw@BKL;{b)KsS}I_}*T!K;P}C;L>&*KyxVJ{t+3l0Ix{bYf{GW>44}#~zbfDfo zy9D&S)J<6O<^WPJqq>|P=|B$$*J0t5xAx~HZJ%{7uQpnx+H76I}0cJ<)%yIu}eHej6xY<#owUy}fPaahKN)(dTdghTLQ|^z?H$&zrsFwoTN0 zmmg1$+8zS3xT1P-xLfkQ+vyLxqLV%RFU5XNAIddoJWKV=xK?T-qc20rUSnR-UdRN{ zmlivc7>Rx>_vP1)ta_b?xi5}VKYj2`%b#E2^!4r~M(95z7%i2;eEaS4YfZAeOthUN4XGrbLE2WAVX;(yX!pAArjX#B{lHGq4^fj)3-#5p9eOSzG zDC6cStl817~vAI*u2S+T9BUGIh>m-neQ0vMgBS;1$tPeqK; zTURCjP8q-|8956(0s*W}l!@h3F5NJOE8=y3IiwiA^^y7IBM9vNvli+^br#mJxf*xsNr7V5B`elA z(5H4~%Io1MneunYZy8V1?5tJumJFv|O1sh&WW_uX1e3X=o9SVrHv;!rMRgX-_>m1r zF6@lK(R7y6(M$b@Co=|=MdS0@Br)8?i^st6EC<3fY2dV{9pX42f-6AsRX6_lHqIHh z?uVod3B<_`Qad));OeGS6)TlTbgN37dzA@WlT3{ zg-Jc$vh0H7!W)cjQMUOriw*LZ{L|v9F3%Aw4Fvy{+ePN)q21}Z#f@J+HD@6LGW7-p z{4<5H%E-A_=tr06f#OQ{`B^PPrZl*EPfOa$=R4{+k4uV446JM;8z2=NzMy@HTE~Vj zXHkcd+*$?bLLoXEybKc0khjt=Bf#6kY`sQn65#DA|*C#)s z_j0rQwvH2k;Fr2z2HnRB2cQd>z@(qPM<*Ol<|Z1mPb1r{({nCf6M?d{peMNf1iOA3D?ykGQlqIAxn*9}b7Znuh zVG7TgsBM<4A>w$9a@OU{JHyXk)i$C^jV2JsKG|FmjCxnEuA zR@XQm?GRy{Ldf`5{tYI^Rzj2hZYvS{F_%@KK z5v#fpFh(1w(iV*Boh%;D*peamJVA<2V$3}p={I=Y0oGea3o7hSiFP~@!o9>+I|5~~ zhy`wV=&59?N~lb9Hn*xv%B&3JluY~^C$yd5Ph;!+sz?2+G(*Y5+B48^!q3B5E)G6+ zIR?9=MHX1mruuVR4N22b)`<*ra_q&;tA_HGM6!#IrjI(;52JZJXJ%Aq!9uYpogf8z z+ApT|~-IltuHk?)}zM7+_ek z6gpEd8Y;~fi>CCE*6^ze|NaVBJSM!t1~5+(YQ8|kbWSR)bc)e`mE5Q>K~yFUBvg)>^Q2^_cPRec zJ#t3XYy()PF7sB)-c~@i{4{w!Gqiu!6vDpp?CJVjsfS;MYAfG}O(oA!Jf`_Hbt1AI z6{F7W-if+AVXOs_fx9KL_+KSUziBVu6(0q;;6sbozb;+Ga^vYnEFs}S;l+~B@0XIj z=}wLHJ~juIi|vUqhb24g3G&p-d;ysR)~-@)uc}WNV5-K?QtQ4*+kT zsofic7I>-?8--#NfGjIAl4ab7ZFKoYCML5}JfycFh$J>S7ml1y&})qkHUvJC?y zEJL?;09u6LTZOjU-2gSD%f`C;C4WVB1taq#b}}jTaL=C7punIILA4PI(u1y*a`SkJ zI~^gemV&P~NIfq><%mGN+n}E}uo)Zx%olrd9|7FWD-MfS>r}k-J&C~zL72~s5Vfwe`aV&i*(MRl6sX2OYuMI5nn9nOOKb7xUyZHEiG;6Bd zxSrZt8N6p0u;7Iulv;gJ(!9K-Xc57uXxnZ ze!(CZzYBxP045T0-up^*y|5<1&<$jOaj2y0a%DkEyJSDC%AftY*gG0B01jL9BuEX~ zvW&X8dV5RLMq)0gsASyBzSb!CbPqGeqlSI!1RSQ*J)-6qDn>HzP+Aogoyme7QOrKPvX>PlHR7S#bZ{kgwYPCD08axg zNliO1=$KOim%WbQC~61?i*_zd+hh8ME@jrEdu3bJ)1&>M9jY^?Jf_BI*&D|^%yl_k zbE=Rr|G22rDX6X^-&IA^Al|75ZH-@1_!+^`>EV=ib%FTa#7{aysa z-dz|ITm@4?UJCvj2YdzftN=2@<3ngc0r+SMhD7naA4UnS)iUTYgyMh& zUA11*acuOgTT?Jl5VLLt`1&ZER#MASUcoTTP8S6G84tbN56$yo;(Y*3q7#vi@Ru2; zvw6z(vsIF9y1}fwku_Z5FBQ<_grNDtJjw()CmUG{n!dmqxEknnCY$gs%}e1;MwQKj znHK%TCRcJ}L`$>HgBsgxsDVq1VG!9V8>;`H#my8dYuZdWY0+{C_nGvy;cWFkX$pSV zYIL*Z3SV1LHf%)Jo$2 zvYu@V=ca%;&PI)>4I}5N71Iz5ba5=p0_-4^}4I;(?qgA0bN4kLRA> z&&!nZ6D5F6Z`)dhz6AHbvWZ{bSvbCrs44G84wDEG2ypI;4LPY+_}#!guL*xjW=5sp zJ^i0H<`JKs)l}`rjA07@-d=?Aqv-J@(&;RI+5PLqJ}rG#DV|Z^H792dnuYhV|3N?C z&Fg=`0$yK@uJ0a6&Oh=1+{=87yb5IBd2#|I;&@#$&K>&KfP!#W;cv&!9Kw#mjf7Jm z*I|{s*CZL1afPBo^{zCJ8E_&E-?O62Bs9Y$9&s!RPe&c1pyIURKSX-TmzXuwC<-K^ z|M$6ChP{MoN>Ox*!ZZayJN2B*N{^0q+f_Q77y!@{gQcu91HEty$p)`uM|(M`%as0{%8Cf{yGTvoOBD zQO}pEfmwF=D7B?*gF0}JxIl-ie(yN0!1HE%d44yegfAIm;C>sRa31gq`xp7st@6iS zpdN?7erN*VciEoNGqX6^bB>y#?n_&# zjVW?E+Z+y9UFLp!`bLmE752wJNaR7=0;Yi`GK>Q*n5F-gT?WNf%h6K1;E@w;xZX2<^ES?$N}9}tY!8$(kmjLiG&EHKbT zKICVseGd-s4SE2Lj++7?Lzo=GSe2N^2u8|MU@jjF&goO}Ok_F!_AeEp_4KWYUUH7d z8;xWzS@^XWjD<`MuL}p$gQ?`o$EK02Q*;b84O zwR%&s;*mJ?O!$8fCy)$2MV9=CcItNXPnk>41@ZC@rSXBkR8G&)5XH*%y%S@?ar@)I zLmoUM*u(R*i$Jfj!`_p)CEVvkkUpHsPa2z6W1L(3jWFtTS{K(&CWzpDW+ZyTpiDk8 zb+_hh<f|MOcfl`N$YN$Q2JpTO{)p$+x|HBY>Nfy}{Fk9O^cm-RY@nb7b~ z;}6z=H&8ozkrI>S*u77<;+Ds+3ARWkxG6x5z`(eF7ilgEdP(qn>RKD%G!t(xxdf11 z3~z?WWATcEDle?1##mMx%-gC}X%=@Nn`JFu)3}X{?%i%du@B-Wba*I0=*X4w&%q9Q zDHVK9T-$`G)OUtp$=Vm)xxztd1mn6^`jF}%pGQ(PC#yF4nTUJY-PET9(@=CWWfm<884!9SXxSuwSBZ$^G-(m+J56m_g<-04&Ls^wZ zyS*rK?MbZ%CSHIMA8BEE@zNT0(Ig9$BQe-E?`?G1DbFYKOWHXBGLBdC#C`H?> zD0Y+zCjlJ^Y%%~I7_h5N7@on4z34sbgi*F~@iW|B!-03ln}Tkg?Px5fOGDi@MD)&V zvXgm>ZdH>vSmr8A7HKFmbV&(p5fE2^ZVz)?F?(&=l3IFOVI}yX)cFK3nk9#ja%dR3 z-gnLl9#aP*eql1&6&ghd7Y7f;tOaMkj5Z@uKgOGfL1K3bdjz`D+wzpd_3Ng6@{ms- zAUxDbQl!jec%~xK`&;Prp@vy`Km@k}vhbO;+pUHc&RYzO@&X-97{1vkfajEDhF6UO z(5nWj9-=ojDq@(vFY7okf-3bG8c16%yH}JQy9b1D)bLyeA?m71MYVcw|4Pa~HMWoy zz_>gWvt|7zRc5D2)z|*6HIASpd(PP!dj^4uPQjs?)l*q%hQnPP+;=n5a&1I?4Y~=R z9h5UlN#r9M>W%N4|AJyB#^i54-Rtq!-z{zLqyz%c;fUrL>pr8Gv8+kYCbO#F-5hGk zztz4`czy4HJqIe zD)upwFrBq5!;nZfQN;yMf=4Rq^(-`#?)|9-ztmXGv z`uEr@@P)>W1&7W6&%W@&c6>$q`{yfnoy?S!8o9(bSns?mLtp;B-Rf$y@bQlgPac%T z_e40U{ZmbngKoha(3gz^PD>{sME8eXNcs(ID(Z2VDLejw^`{3NdWELteYXKtm}@rw z{G@$(e#|V)goda8T43|_o5zvNTt%jTuz*_#hTsNUA_hm}+w%#to zuuw7xP(L`D^`%jhMf6Nh(qo`m{xM%d>o?<*3N@fri{K;o@$ED*k;|y?S^2ip*KuqU zILB)(I<#N(dr_+wlHY9j7P|60no+rQ6v@J%pJGQ;6qb} zJ?w&K6I>vv#*5=JMI{WOFY zE^mM`?e;hJdR7d04`QQ#?stCtaG$)pyfh+dt!VW1|kX~)x1CP@V4 zn>FgttgrWRNlhJ^;%B8qQ(WV%ft&YoXmnQq`u^*Ni4lEY5LA){}o z6n`;Li||ygla#;HUvX)zn%6^~3 z0kKgPDG5w_+fljVCwoCp>v^iqXe86z{XC?n#OjvL%V$CdWR2e(@!b`bPTo4Ffy`P_ z$_+y*zvH#{_LRp*c{y5*pc<}^jy>b|VT`NSZOZHH(#`CTp+thn@t{^enxUuy`e8~p zVxqy>+pCSFP`sjClLh6)HKjA4?YDU8TZG9G>N43n`y+G^QwhgHza0^MT0Ij-4BDo^ zZ)B8=@&K!O#JL;7gj0c|PwT3un6v0ui)=YKadezh_)Ep6?&+3y+jYFRnL4fMu0f4y zsOCj$!T2TR-)lOv4ZwOO4~}rvH)3U$%RmR8pe|Z>Ae$pSw7&hK0x-kFD$ONuaakew zU72tH#qcphVM)&|q$fM95lh#B5h*LEXA1XegAqA|if#tt6lqkZYARr{i{(STKMaOv zIPZa*V)x@R&fQN+nkKYBjV~(EGwgHJzhmd+Ge+8T$9Q69zO_Ocj7j47WT4Gl3MbN@ z8P3SsLN%APraP5SU50Tc8$-Jt6PSlv?#&wV16VnjVN4_XKTwy=hR@M!{Q6_p0Kr6X zc!%%$`S}U)Qv>=r>I#EGYL7veZg&^_mL^d18s}e;-O6re&oF@(m^rU5&TEvC4CI@} zJHk~xQV;1LH228!5q=E8S{lT?(2#Z|~p3@x#jg@CaSItH;ud zmhP5}>ow<>0gyW_`1_P|x&_R7Y;t<7uJyT8^=Lorb7K)P`P=8E*ht2Be^oyi z-p}Rh9`v_AjQ@Uw=KZKk_hYWzkE^<$@bG@(`};|M@00ikQZxtBE)8T{8_;{f2Fn?6 z%jvlx-5>O4pipzL*lZy0(qMVjVCBQX>i2`Se+TRNA2ez{XukBI_1c5>ss}e8KDhn< z!JWSky7(XVXg<99;#MyUe2cm7{=hXKY@(ciE{$VE6tt+F->ONbc9nRU!lt;g|Hk~wiC}{3m5T75{Qa}>M%TcOAFwndu~pY%^tQjH zqO_4s{Ca=dhqmb%oVmHt&*`I$y3Plz?kc7ySN%V5C??|`WT`cvcxnB`$7RNA4VuaN z;Fs^)Q4A^n4_j~j7G?Zx4HHAm5OYt^HA9!c&^^QeL$^q`0)kRf2HiDucbB9{sWbzM zQYs)SASfs*rGf(U@_f&^o^#&odj5g?m%Xmfz1QArtzF^Q)>P{6XDE0(AjBs^&fEA6 z9dsHj3V4mF8~JFFjd%4_G%*&b#;4vz0r{kIWp({Z5yQt$r>D0hI>LCKy<>7BnM=)y z6Vy4x_`Uv)y}|wHah_6FQhe%HvQP7&Z}l+IG(|uD(26bfJjyT(Qq{1=!&*7NVEhxw+U!ARXA2#y#E9b`1nsiO|!XI3>G}cD?wnwjW|1nzkk=WzOQvAM!t^QSS?kC{mQ;enAZu*WD zm$812)wzsa-C*}`iQb@;Lj&YxFamje7PY8PP-1%sLKUC6p4Nco2Bnki?!RgpKob*BWIp+LT2Y#+mTx z$G(IbC=h~&HhE0QV!lXRABsMqMbs36X?OX620V4_Y}4CW&}dsaCxt#~KXqB$lAr)- z5+pyP5tLQv?p3Q3balr=MY^I{ zxR0q#g|TMY4}$3S56DOXqnEIAHURBPeRN)b3?eSL8&GxC4|*{Rx^hs@HHrZeC~+U0 z79~pN(T*+8=wZ zK0Rw|v&t44Jffg@OE#lBPBAQ1dHe;s<{A`0bgjtfxEy&4ic@7_t}>d=uhf5(d*$^* zL~D0hgB1}ZSZQ!|H7HJhgF-yOUC`hbEKv+UKA|NVe`3LNg?V3mSRRO=h|-Ufq|>zpf(PE-$WMRC$rJT$!yPc zLDN2c)izVq%U~3NwfbiCX^g2|X6(h|^I2207GTi0lbaHnU1nZ=ny~Q+hBEiU@5p&8 zLRs^INyda-knZzrzY9L@;`@C0m(lQxUIiWPAdw!*KI2#zNG5hvwEuI)t z#k@XPKR%$5)-{Tn9s~Oq;yp-864POhZw?W7T%+tNp$X^clHVX+2EA11;&FyTw`vtf zAr;0N0|YPTlRkxe6J>yYDIk?^NDd&dUD$@DKJy%n)>_e=)yMg*S4USXB zPp>LFNdW61AEn`ucs(SM>8$Umk_=a(LiUsBO3`Haby}y-3j!`#&FCv-ve{a$V9&U4 zl=vstH4q)UDuSN~)*taTIG^dfRm-R3n@)&%gV?;-5jFV`kP)8SiwqQYNE`X7-Au{P z8^Z6E-ru9&Yu0ah+k;nPkgXoj;*^;%&)NFS>JH)LGOAL!59Vi#`0C)Z2suHAL4MXP z%*{U&i5rQWY1X(m3%J`TdF6X?YxeFfV8P?li8Gyn1_`K0^j*CD=bT%nZUHa9pA@=Z z({7N9S?c2|=ItaMwYI6LeKurZ0*AkUQKhvJr}gs}k(%;aB6FzGZA%=qfee&2{Och3 zTW&+(w$YqvM16trlR} z;#3 zuK7%eH>^Ee{%TLe(gdf!Ej@CSay8h^sS!zvAFrkP&7^22uK61)JP)Ufr^wq_%_?T$ zy*DYG__}>+g%o%@{Wy-6bUo{%`k!axFAb~U=!U<+ejp3*m`!BRfvEoR3+l3HV(C(4 zH2Kz1gc&8fxI7@$5Ts23Zu5`mzrh-w3z+YVK`6}A9{WQd^I0VVA9L<&!bPX`Lhmy_ z0D_o&F_FQKDN>lI@;-%DP%6I(7Sj%nEDS|YZcAJ@M;>@QD9Q>oUlgD@i71p6&$R&* zfk+t{pizdOC6`fTQcpIPn^6bj>-k_x2g7wBX4j~6)+wVB=$ZA$!hMd~4+T7q!KmRe zky4hbM>M+9D#qqYa~KInd3h4bXvN0vGryZ%bmA)^j9Rzt7PW-gk=e#5Po^H`<9JM% zXOar3Ua9iXDgX($(UD7|Ox~|+y)f?Ekoi&B+e58Zm!wg)D zDBg0#E+-Fov3mBx{DU;Bh}R$YNx%u|v{mGj%xQ?6yFV8YVU!X!^1y==iHCg>Zkv1* znhtm%&6OxK7z(GC(m3f8Oz#1rbmV-u!;?2sZyiFJfXKa*TNEQnPnRRfZGq1HjE{ww zM>;T@<103lU;~2IOWsUUrNL<)fF4QM_2OUC$ZRts&lLuOtpN`=IZ`F~?l7K#v;m6R z&y`*M>}tg4NC8u2_KIH1rJQL9Ho9 zB2ahd(oj``?Dc_rozSP~+yF17Qh#s?4&a|QPDdJt6ad5nAIO2Qod_`BLua#VGes$# zNkNa<1=a$!BXZ=iBbV6+kj}b7O7pmSavtIl5U>K=Nk$kR77C59ygRU@2q=Q)GiTef zli?$t6hh{5vDX5c870-I4)t$#4t6dP*96s$!TZiJV=Ybx96 zFCP~HhNjE+m5M*JRU8-bFdmlwDyr~Cm;GI-(5))JxKt=ASI$jWfFdd(Y+i z{4Y}B{C`Qs|3o%yV0{_+djG!Vw-`@lWqD&@)uBI`$%;vbhh4712$YX~PeV6(_;XqP z&RDfSIX5Ns{r=8Ds}IJeAzY+Ast-RBHKcyl+9`catiuh5fIY*6UuT-IlwEv7`%emF zz#`)cm6xXS5pFpbmMez>wh2O4)rY3{Co?1KK@{e;V%4>SQfE)pi2T+(HK92Ya(`dJ z$46+%&s&avX7VJ0=bomGZdE`ZQ*}=KyMd3biWU;jO1L+-_l&1k1AY>ERs~PT9TtbRz(%i=NCPjKgONj;g)|X@$2-T$_d>R}#Wvh>v=mz7m!Xf^9xMDrYJSPXjx#2HRHlpdawPx0Vv%ov=0dn#>He;?Ri;#d{^SSQ4w?<+$ ziqDVuvxnv;XlNAnGNZ-w#SrHKBriN*U8twf)s z%Th|LNgY$(A$bs^%42tlt|(Jn9D_U+Xh$b5?Foop{+}71nUPPPw6KLO;HpJ9YV;K? zfUn3eS(wXQQ^?~c5wdmJdz6+Jcu4+-uUMHt6eCywuQG|9QcwNft7{wfmbKI&b?@54 z(IpGEq+SfWc9fzw$3STOu&8!nU+QIM^pm`AP_OxAq}^PVfYdW=k3R(q2%6SWLavbZ zhQ4@+i7KW2ycbaDrm|h~t1m1d(3>k3Ro@bxdE_*W)8ARg3#Czf5f-B73>wBfKO3vP zP0srkPmzpf(zYu;dqq$1-|E!7_CPV%mm=?9mV-*RSBU{1<`LTcO7~XabBdtZ+iw-R zuU83-iXK~v`#lu+77uZg74~?PF1@g(i#9lV3;x0&KP(L;rODV1p--W(Z8=a8rR0+sC{Pjfh|&OHr$-3lXafY zVzL&{My!vtfA@p`z3W~5p7%`XXTAd9dlRvD1kDm>3CR92bBwv+;2ZcWbSH){0H-(vMlbPMHq|9YUpl6(@|MFY}& zO&bM*rD?c$B$8j$N|MM%?bdO!(OZdf=EGJAywW94T5Dzc`do19xxDtnDRTXAB3=s+ zO|Z&9t=Og%Y9YB*F<1Bqm;ECzGmHW0>T?lIk0m)BXd|n(?PxKed`2w@Q%0)>zx#6r z$<2|s>jHdsc22&m{%Wyl6GC*C2aQRtbgZ%-lq(!~Zm*-3AC0$Ztxa~<=)bz$l}p&zN)v|xTRznO#7#jU(pgD zs9xA%DyTmyIVlydrtfyOPEZT@es7Ms21l!a{FS-a>Y2d&j?(raz$e?Z70l9^(6M@EJfn=-~#wFYC8UbuXmQ6FQ@wohGmW<0!G)Nq+`7#+mDtT7D6ic~6$d*4D zqIM~!D^p8;oAfp}TSew1mQ5yxsqVdzwNH$Z;+;El@xi)Er!R_(BM|@RE)oD^gFAh$vG_}B?;<6mLi|e`wJ6sI|e}(i)+}`UKIIP0T;8F zq8s-jp4ZDVp>GbXF_#}v3Y%SyZs2qA+=C>g~T~6a_$Xf{)@l_lhac}u9lt6(t1K!5o}CQ{s%+jAp9C~*gedWC5B>AeYTKS^*i z*>KgJv#?`APiBG4{j_M!K$sbQZCx%09Dnz-DsZg@V^OppRf|@`N%Uw|f3CT|vZgen z9G`L^K!W^w&Zc?`{STF&pPS=k?C}Owcc)1p@Ec*O=Y{=-r%mYM+Ni&bSogbzOCxiWbQaj#F zAM1HsJ)@O(LKEtSr+bVvavMnV+p&AD^7X-OnHT0FY@92$Z+S~KhtApU*Ll0)RvD&- zf7p}MPEa~Ya-sX|KMWd_(1&tHKbn=s)Fp8uls{kVL=1}%HNTM4jBr(p8x!0Gk?ln_ z8yZpOV#L?P9z3ZlE&&s`m#OV_Gd(L*4?6$|cFOTdz7WdhS0}s=Txh7%)pE$StSQOQ z_ewqq6{E5MPc9&aB-wiFvd6fisE#EdFKB-_(2u0CvJbHegqT* znv(aSQ?HDRnIaoPxW{o!9i++RSQ+ONU!u01cCi-zoO#E&&Z?ms5*}uo=f_j<#(49G zbqO;wL*4wnOs^cpH{#^k_UqriPOXYqtzDLd7%58u*pZ+|N_+&!VxWgzj?^#PR z#hmGydWG%;=)0nWQ zG$PDZ_?hI$O`U8ll=4nIU^YG?j$nl{@v*iy=M$C@JI#$#zWbo)q2Rl0IaXduCprJV z5k0^Ds!Btud12{Eo+OI|jy}os>(aO>?|gr@e`N0G7Jxko zC8l>6;ei9B0o7931X4#J1sX3fZ~IX<&LSqv`U?_&X->jixv!w97_Y!aWd}xUmM+nd zjXj{LB0n9K{P+kHM!|K_D;T^iNj+}lRjm}miqukYP?1AKMu~f`tLSS5GiYD4=;Eh{ zO~CHc2nBe+j@cXEM$8?gmMo%;HOOANCG#&tF#a)-$&urrj2NQOQ3;@ObT<$?vPKWz zju`Dc;dt{`D+uHr=ARGb|xpvWWg6Q#DlVkBXZ^fWcqwE7$WO0*%Y%) zeJ;Hm72#|%UYSK276cW>^s_Z0*_ytJrlHcPd=dWk#{H%fDux;}YFPH&?u-XD2Gy?> zF#5UBBk#uw{_!5Uv#|hmzfw_5CTO10LKA}DPu^H&rU-yMr4eeh0ZJ)y)Rm-E#|n=z z=JGO-XbnojG{D6#GoPai$zp6PlHwz$WGVpia@4p$#UL3t1daub7=ZNALQA+a$NXEh2x)2WNJNT>Ib(O*`uYrFWEN@SpSFM#E+XA*Ud>k4q z)t_AkrK&)Mj2F`Y9fYmNUP_DzXH(gI@$c<`rS-y?+w84vgU${ zU1Z;+Inw_6i;nT^%>uSa(2u*c;CI73$~=M1r~V0M6f)1oQW$6UZ)=1%t(`$x{;$v1^GiUGC{im~fC=Pyv(#p?C@nZ_Kx2) zuJYY6M=b4U>gPq~T?hyDZEs^~eZqIn|J>QA+AJ4hU3jk|@re)4eZytd^?74ga-{`{ z$4gak%*JNx)@jM-42{WRfR8WeQ)OA8%$HZ`z!#y}%4-mB8AJ%p!`16%$ z84cr#%r8?j!B{A7+_*l5D;jot0ORWDPG*rCqp_ysiPFr>-Ox7ZXUk<&pitwr5tV*o zH64-9Z$U66v1*NBFGY_deiX(H_BYc4tT(l(Xk{xSF&QjxW29%Lu4;w8Fq_bqJ|By< zte3LN*Y{NG{D{?9-F6D)@9KF^?;rD+7gfmh+SUx5cio{duaSzQKxTb{4|cQq^FlgS zRo`6P5x%pMqG44v>X#!COabwqsk6C3kc!i{n*)QYJ&kxh>FAN)G1sWE{-k)Mv3XU! zCenvWG^YmS+Q@X%VKy%%l}es}G3(=jvW0Rj{Vyoc8S-`o>RmgckMeU(^|N>PFVVHX zG7+(4hdsmSK5{>UiMoYV^)zTFa%RowbM1tKBp6S_%dQ;t7YSrgdY;tq^3(9vwc(ZLJaL3Hn7EYGDjKGP)78Y_^e1aO6qv*%x#?9tFG z&s}&fzfhXJtoXU{$WHCK*zFrPxjG+OY0#fbXsd*quV!Uu=Q0yRFr;5_8-@bMkc^up z-@C`4HEq3{x4XwnZc}i%9%#$Uyr~lO6ZJ@iwT5g)p4Ta^%C|g~ z$@o*eJ#m)|i{qORxlwFZoke$C=IMQgx>v}Rdp^cBD%5@k9wjZFL0?Q6eDRa%AzRuf z<$AvXJ2SWLX<=PLDzp=fP}uRV%^;PgYDSgSBb}weq*#?7*9Rlw z5;kjIbb2@iDUBKkkAe=`>H@&?QRuUS%#vfhP@HD*UD{)wXtNH~W%`x#i8;jPoYEpV z#>A1{i&=l@h8ffwW%PzOJL9|t;=s1hzP3~`nHFsgS$RcGib4~F&-p0Zn=F4%2E}G` zRWU%b7;3j-vLn}1c@5sp{L!_5sCle2%8P!0UHG%cm!_b?lc?;jvuaQVe2o zU6wMQU;zx%c_$f-^|>V*Fb1M(6yX`f9e@{JE8jexE@Hlj^PXOusTi!*3|2GiJ>JCQ2UUw}*d#CX! zoV;5lhfQb1AKB|Mvqdx4Y-5!4mi20ihe?UJ;T3Vp%;=$EGbx88)1kRx!2q2qdfO#K zGOJ=q>(M%f92-$?O_^A5tu{GFjXmU4>FdyX?MRQaJYvCOrZA>}k*zqf*P^`!e><1@ z?)3UnPTddwmNZ`S6dOuf%O?JH$oFCnou@tKmK|njbFa$C-mXGje#y3IO^Z+f^X678(gi=jT+b0q760bC@>z*97 zjF_B3JDL^a%e*mz561GSMB_+2?S*9#Au~iVc98qfE@#xuDLk!wEwZ6f$R?tAWu!Vs zVD?dG&2o1RrR6)_O4@cu|c zU-k2b@&VIwnQNjV?$=Y&2DD|tU7zcjwPJlmr9|YC<_Cn6NpR@`bbWfpQ>z$OjT3LMacu!rZ_Oh)O7$ryq zb9YvTzjM2;p)-iL*!i8C`<*8*KB>U$FuRMsp10=fsxz|*kW&5c3x)oanEGOM$>=Tm z4ZgsYW*p?pY$d&$^CL{^S!TQCElgXB|&Ug}a%N-~t-hXObB-|bNt@*$#p6hZ0VVBORWA$KVtYLhce%=5^ z7{0ezK$S!#VniA{by8mcTM3Vjc|Q;(COkx815>zPXz{@93VW9@;}2z$IO@S#B7G!*!{bk78)S5#{$`pG0M;6dIT?I$e*N^|yjH$Ijm zcySdA_8RlKwCJn=VxKxh${ZZ?iOt(zzRZhBR1raJBIBAkbq7f-@t?~p*EgDAkKMKwM8}xJz#S) zp5zw7NJ3u~6uzsU!?)KH8@S;fY0XAjhiN5I)VS~&1;O)klGhcaJXIqR$*Y1v zf*bKKKC{(~2F1q4({6xjbaY}16|o3W>Lo$f&G>IY3C};XTLp)CM$@fDVJ7RCYxX&& zPLk{RVw2s?J?C$?x`waBTPpJ@B?AK5R~0KhUnk9RKdU!~Do}nsmQnu&BWaLbYVr!B zR2@R$Mg@}U-Iieo0kMl7yn2pGZZfKms2#5KsjJ&OOOo8{}SD1(r1#7CQJ8u{#J871?D(5U#0#bnZE z`>lA;zDYlAl)vYFdGHV(9h9WPhdAN&@{83B-jXtz&S2zIl1RSqGbNAdFH(=q$8|&j zK!j{+7?{C>6H((KYh%pR&jldYufu(?fTg=7I$SQ`(=r5O1Q@^1|t6N_Vp=dKY z^+Tv`5AaYHNgM;sE|!AKZz0Vg(c_$?4rt*nz~<&+(Fx@~K%sm9Zw26=bq-ahDaxXZ z4GrMNp^v&~V#ZaHbrhb2*KB@{6wfkdXf9J=ueHc>O|JtOtM4JJn1)(U{cPkTlS^-Z0*nVSo($+n8+tsK_?u`&3g_ zH5Q~asthz`6uV}9ZA$ZLthQ?|wrh^DYib;5sv2m1__sOCpt)n9(OJ1AakZ&8rJ=95 zWoWfU)2`*|YQrFVt(t%H$lv%g(6+YP z_Tg{aI{U*-<%e5#4?jmd+$nzeb>QLN>cbyjo7?_AL|z7z6KW14+Wlu*{~r>%_5a7V z>yo=Y0QLGDN^Xv&(o(vfvFM|E(^1+N9NX@O&3x{-3l&U_HVu-;%B|;MB%2;{#(5#E zIP+-?gY%F!im#5nT+Uj*JaIwR4_j!lNo#KK?Tp?xBdZaPzh|R-MMpCId`HILJY`yv>yKb1UU}mBu z{4G*(?8k&U&ydMQgV3AI9^s5L`!vkNGx~;&6mDaGItaIFgz{cgFtrFu=H6C)(&f#j z0*vd4yT-q9>^R=9b8>mw?*&o+?oQo#A7y4uF)Je}!l`Z_I+(|OYTUR{Q2-h`g=0MK z9b2um=uGOqe1Za+FHK%cTK2?{aTu2sdmH%CAz7 z^KWU{D^Xg!_v*Y%Q zEqGfK6c#{X>GD^W-A;8#sj-Lx-OmdlQzkJ@htNy|6VdGuT&&sdSu6`8@=PYSOllVJ zWp@Wj>voBNku%uHGt4AUC|*oFMjbeXc8!<_>fcaBG3Br_=-XN`g&5Q7i}VN{kMO}K zabxjXXg0g-%&ogWpPv2x_H!_E_*jykN2d;L^gtd&>>$4iLpc}s7!uIm!9Aa|6Vf*q zf;eswITBA3N+nzQ3+NZ8Nrz%Ag2G|h-)SP}Pzh;t=>wR^Wd0PhYm>H#%U2VuH^yd% z!p{Px_%eN^XM__4{hyJ9UGvK@)?xFxNoX3d0^K}twfLG)KSlfNvV8W|EA_L%Gro`2 z?D6zrS<5w5uH%O(2T#l9Kup0TDoG>so}E7)6c&CvmHgk`xOeB(s2{`E%hvt#pudJ! zQlPI;H?+#^hTOtwh*Y>Dnu`~2=~V)LZ_&3t{xR^4W;G1-t^1YKphMGHkgzTuc%AzJ za;a0yhC)61jX=1C8Ek`h5t2c1@9*3pmS88&Pq`siG-kgM2D3X6$Tm}@ExTLe(DU0H zTtIQ(50Iy#1?>dgq2vGM5qD=@-v<@l{%al5Pw-ATEQ}_T63rOP2xeX=|8(vSr8vk= zzkqSCqGGJZ-x2Q{{K|`7HqyA7oDxgzrEG|Qg>oJQ+VC6s8m}`|6ab>5+tB>o867kJ zow1oMTR@9gX>#_NruP$F)~!UqY}4x{(P&m9UkkV&K2P%||d`?0yG&%&@P^gYzsx(!N<&hDaRl^PV9pE0|}m12ejY!>oJZYfLFWtW1XA)x9mnt} zYjN!5LlU1%moOGtcx1SwwpqDpv8oZP`5`SBu%Ud*!WYv=RAXf58@{ZamP}+*k6HrS zgSGEgy<`p~M)?WL87&y8D|F4*hAl~P2+--)#uZLvFvaT>Rtx=D;%@+jpz%pwZpQ+I zyQHVTdH>PR<^)BV5W ztE(Mwoq06B@xvd$XO_>>wGoH7WqQS02q#Zaa#}*cddM{0E6r_1k_b^UWvdgPZn=<+S z*&oS#+w98Zj=zztQ376!_?LJ@4|8R+W*A4a~ zq^N<{qMkL{0Le;irFkS^iXJ&E8BQl8jknWGjg6ZM#f?P=Pnc{UwE#?IBhQBpu-er#;&qP(Q?@vZQ?jxgW-J&LuYo*3nddRLS z24GHqU`^1w&=b_+3z<#gk9&YXX-toMm+&SL3D46O%HPe`gbf7k(>zWI``PN;5f$aM z5toXum2z{0^L4xrj6pd3F%bY9$=8WFZ&9}GRg4Y4q7WlItjSbk9hR-L7=Cl6YYNs* zA)xE_^e#V38x}bQwclP)B3?ZS@p(gJ8H9j#UyQx&Rw}7Hd=V7TvFhJ18<*RlGmE}K z!4XW{dK%La_>70H@avsWwgK2(s}XCv>1*wkdhP259XC3fSgQl8JjIUmPR96{nu-@B zaUZ|e4h~0!z#h5Nm=+{3eXaPEUE=&%x;|YW5kWP1ylbA^KUPj>h{b7np-T+ddFAu$9( z?&C-mq$mhfbj4-x#lk6qAYm?iu9l~~Xoe=*l6TscLB%%!H3u^LxK-$v2@5|n2` z)VugvhABqp!3%Bdk3gKHLw=@BoW?MSp;3jE_9{)5brK0=_%G1j4>ev9(h0<`NbVhWD7l2B6r{}Cs5nBQI}Jfwj667gyE3_3!6oXQJADmB|WXH zqLAkmquOFZl$PUKL^G5`vTIbTP(uT$tF3{nY5-PmwR;cUVeOl zkq1EcNuFeuO05aW>y%tzk+#<`9`M5HYw@27@t#Q=uk=akRf3Ij8Fz@uZ%mTK*O90 zDTYF9KaO%<%$6lv#1i0520jrLn**@a^WaF*q~ag=P1FHIsY%)xb%QcnklvPAaX8)Y z7&;lkE-C{-&%xY;0VcPc3TeQE5ZjKw4L-Q>a7U729(GItmp;^{*r4G-=Yj(CWqv`& zJ7EkKIEoRsOO~@HWqUR!b{54jOenb9%}LQIUP*nW7$x`YDzMf8mG6hERdI|U^Eft8 zjH7aEQTZ5Nz#+&*bQ+-Qri%!0e)?IL!W_ezb)B)3E?LWgssoyAk;ekduhDcUQer<_ z*Pz=773+hY&E@BNqaU8SJ#B*55R2(Lak>3KY%D_#Q^~XbQY~_3SKCtmvC@Smc=ZY} z2Zqlmm93rv1G#19^Cj=t%4tdH(#_qn&G7O|o!xVA`A%~A>+tf=E9E;YW#2?9emBMc zW~=zqU-tF1WUs$s@w9v!T)ClCLa$kIp`YQ+c` zr%#2#YRz?6%|f_NU-jTC{o1_wZVyW?|4kt$75DFQUTCu8yjzdPl#`j=j$I zZyjYo*)NfL^MJZj?|L5}z-gdfhQ0pQYI)r-gUv#H0DHB6M8l?%ZAfziw7B6xMEQO8 zMlwia+)OE>Y-3_^eJW|Srf!b%&T6BJXp>AaVydPwSGlq%r8;?_Nw~PQJf)_Py?MdA zv38ZGCZhS7cXP8cd(&#O#%ObgC`-F?%Nn|+R}}fExFv9&yKkn21yfQ0Y5jNFGX51P zi)cOcZk_oH46e4KU2EqC$_6WI7aD~Z+;CqyT-#WGY`N2bvqP&SSOXTVb@NDZabUddh@q^ZKH+4kmJ~{AVAn++P6;g2ky_wsgj-V#H2 z(Y0JxX$yMSe21xk+SSK1&3#ofeN$ii$|3#Z zqWvWX{lh-}MJfG5&HcGE{rzA2vmpZ=Gd)S~0Mo(VhSXL{^guM^am!uU!@-9 zPDtvo;yg6wt0#C9WWA!UiB?bN2*Y&O61zMN(KO;#--SAo(sNlDKS#}wa2d2xitntRNM)5_6hEA(dX|X-2cA`vdn9B? zvjS^%opsL(r0hjo`P|)L9P+XnR{8|z7Zn<@y<1+|lg6bw!MDamYWQB#%jQDL3?BK6 z)F}EXo=dxmyv#6RvEwrQ-JsQB8z4GS+*>o;<^RcU38kH2RV_z)f0q5HVzfGtlJ4O$ zvcu^Si0;|>i=8iHW}&*Xzt1s z!yh%uK&&oe-2k8yeH9JLG6i{RY`B+=2aeKkU)!wzD<9{-%JyI8!E-Pte!oI9hE~W+>c6i#|99D7bk{kFX6qnoR_zo{ z{Vsl7x{#9m@#DGL%d#2s;+6yIrwSE=z8ZO3u8)*ogh06d!W&;jYG8Z$XL@#Vx$IRC zhp#=&uhaGFL_w#SA78g?*IlyP(SoK8qJ;GPfeHf z`^bLy4=OcAPip+?sMrFwCPm&*#GW^8v_=a`wrdDCK#W!s_ zM|fm6^OTM6K5}NO@FJZRKR2k&b*)doj1AsRT*BsroI4HNo~KWb%y51dN&S85)OzZ{>vL9bR{0oymgDgRBLhlNVxysGFqo5{mSL=CbckBh}*O7gr|8?8<#nTi#3S@k%!Q)*+CVB_&-fw`M?c7Gh- zYLS{Hz*@>Lj$65qiS1>15}%c8E^a8H|5Dv5s^Qz!U=X$2WXWRR2gaK}pBAf)e$)PL zuq6D9{@hT?^5WiIDcxF$HLGDpy`gKPa2umsI0@x?Fv!M&ABrd6NFD`03b#@H}s zs?4u{6N6PFq`{<6&mCYdOt$RPiJcm|V2lj;BG8Tv0gk3@pN zCW`+X&pHWU1ow+;`CO?jLu`)d} z-y>iGx=Yg*tDJ zpPL;%n=GyI;QkKlNlT+)csD0CvS+!_A6V83pepPOzpYNA-J-@XuG?N|B&^lYqK)3*P<=Z%EUzuvG5mB(cn#B_QC?_HOS=XgAjS6SCs zoav_kW2Ergjbv*57%e9CO8f=`i8CqYfkb{H5o>*>?Vi3pJ>edsazT8@RB_%NM>u*S zMMSCdCT)2cf=>BwOUfz<+y?K23Fzo?qAN7>RWamx39QxRloY=E^C%Mk?^gx(y2sHW zG|5HtAVlG*Y4P&er`I?eGB=M>ho{qX2n6g8REh`IBv6I4)rTpNDyepzWY{*d`Sl!> zVP(vIgbX|)LKI$}Qp{e`*sO&c76Fa-{`F~Xu#%-T^^_j>YGIs)h_$wtXFK3l&xgef zchgqQpjWCc=Nu8LgEk_h@h*${g$GN?EaU9KH+$vJmCPHUN_0PT@SItn`mF-S{BXii z?3S04WPZ;l;?V{VYZ;4D+i{0l<3FFF7>r=OAfY|pa)`|_@d?A1+IlaTjqgF{pm{{6 z;pJfSz}O(k!+-3|rTd#+@x3)b%BT4S9Q$Hm2>x99t?$vS=fqC4Fpm>;Y|as$ilg+#7mxHbn>FZE{mpTG zBxY753^oyt*{u-b;kj&S*h1DpNqTQ)o?MHoOCJoAQN2WPQhF`v9;cDY;|?5~{6(in zxY3Kz4P-T&<0MW|MJ<;c>%lGK_vDaYOBGajRmJL{E@`U!yU6f z7zM!8y`B!P9Y_lEcA}@jm)^aY!HSk)^iZtA*%1X5g>o(=;NNUs6mEZ9frvG%wVuGr zXjD4KynjL{^=Ex}XM(}z8gc_Wd9IC1yn3G&6}BEvI}aBgpdp9TOwjN_5R<~ImZUk> ziVQF{?d8+V?7fwR7i`+fhJGJ=rEd0n@s;{6;GZR6G%)@u=Uf%Mtqvj+oHy-tA$aPW zX<0#ZWmE$M&C23r-p# zlD&OzN5f3}RSll5Jhy1!BZw_2+n{W99$@5@^>Qd1#?&lA6d-W6zRYIZY-yCD=4fwQ z4#b$jn$?OhxiZM#K13_l8H4VJdb3U#UaMt`fq$%q_G?V>@Y|G-12v%wd$~@n9D0i(B_~EXs;ura!rz#uFIWCem5h z&LrQYceuJkNoPxaza%H0tzX!1&NDz3^;t+$w_=A5MyCBbN@40EK4E|ykuc)o0^1wT zdG7LFUF0lPdR=HPOxM$Y5u14&YDEF_^e?|ZNiL)vN7Yo1G9{_yMu)HD3Au7@=h+Z$ zu?&p6;1q*d-NN4)ue*dm?`vozTX+*V!*y7-2Qm1AYN*D+3d+ujRhtVdn8t4 zJU!b?SE*Q_92=Z2R8P5d8H&7dmB3XBIjC&?Yks z?acKEv%j!pE_k4|q#u7(aNAZ#gR|;-RaV{DC4{*1Txzpi^>^z8w4&DPb%Ilb>ha!o zpa$X{c0(QeC`bzb9Z@nnGSUBm&N@>x9%U6pMy~&Vp`*jk^t}@B90G|AzPb z{k)&&HJ)d!ZuFmzl*Y=GiB5*e(=Mqq(5E!Ra;jQymM~m$^3rEz-8(Jj#N%)~GSa)n zy5`&!V2Oe>drl*PBc9d*keX?d@A^Bx9cH-D0p?5TH`SPe672^JNrGKj7}4;x<0mP* zwP+UnYLf7Qv5H+6?9K7(2aX6=V#e=RDD&+s_nP3>ib+9zxAI0Q91<6Q34Qey)lB$D zXk<(_gRK)F_37^Zt#M!AAsl62hM^sUMaNRoCs(9;=zmJB|4Q;@Ek%kRiS_Pzl?>IC z`L$i>ecQ(T2VDLHycUp(A3#HSdp6&oHG}tG8$uNZ z>IJRS51#X$B<~fN@XNv)a}D1J&GDzfH5)>#)(&3T;fi#;ux^F>23CBk1SuzjjJ^yj zi$DxW0q-ylaE$jcafg12y$I)?&A#}d;$%I_Cp_?*2AL(W!MRYdYxbglP3&7|e;#4@ zT8jr#eb(k$`rC_JwaM$P#5$>x-Df8roDsQB1z|;=RRrJP^fS0sbFT?gGbPO5*l^=+ z!1d;a8;dRUU`3z*x)D(fATb2U{QE{6{WR*V!xDiUfvD8ZfB#36fX)VVIt!Ot^+Z?W zc!mH}PFWW_HeQU9%t`N4Z+cR!A}&GQx$QSjW>ynfAg`s*)G9{sia8UcXB$tEcx9b< z$pebUA-CYmyAzL%2#r!rmA0#fMDgxsMq4p>Ia&Aww+~??*ttb=|crT)2{4DX?@R}qU$9Q|2+BH zH-UWXwCn5v{P9lu?VCD}Me4J!;`~d$QH^br$r`g)5(Zsk^@ZJo6H45F;{DRUCGNaM zr;Lo(Vu~0Qe9X6d_6|v) zb)3q90}YtNa)wmkQL7`G9quhjqYt--t0;Nrqg-34t*Czi} zK-DF%zmn6TQ*EWLL70YHF*#l!^9ITP{yw4rX8^kY!GQmqIM?4Q1nA!fzwwH zFh{g{GRQQfaH2I}=UqB`8jJl>Kr3XTj892ON{DY#KUwq9z)E)bEWf<^sYm@%WTM$M zReqYwE;O4D!tXQD3c#+HDDj7H(o*1Z{Y~czvq%U0NU#{+`Qy{iUu@(G(kaJE52(r` zO8y)%VlQIk&)nk;LojZa$Bjp)%LYgRmsAIbvZOhtzmzv)%rj-B_tXow&|)H2r6_7l zw=wb z4)Kl~*_>-h3wASNi4w&NA?WERq(R|J;!RfL+zAJ96YpO43U<_-3jMQ8$38A_iAzk^ zH2zhc{FlkUhLh!3-#vtG-FxBE$kA^+&*x=7x1_&3Ssu}iFRaBAfBA;HU+IgMCvzT6 z8m%UakXxmE7(Rj$p^q*C*3TXOqXAFv4sV=mTJ7^jpW5BnD1eX**V7Tl^Ut&RM7&<1 z&;I_|SmzKDl?N8b&7dFv>()cyQ@bzKp7kp3`kEWlg6bcZKsBU2~&eCgnlVPR9TM(`2N zDG>YQ!sEPa;qh%>n)F^gk52p}>HXr4y>01vYr}<^_K>f~W{Z3J%MV6NPe7bH?B?!< zeDSl4sn0t#WVOE3S@7;r(&7Egh#%u8LEjg&KYuN)|J(2JPNXM!-}0JdVv@*gi{DWg zaBoH1hX6BQA?;gTX8C4IW~nLsy^PJMGklq5E$l!hG2F~;GsL);)-nqd%lU#8=KR*P zFH|f_q$u@Fte=+>d1-AeG`I_V=6UtB!Zr#>4boQFhJiv(&>2a@8U{{!%x!BR-_-&XS*XNF04t!1S~& z-wBxfzEd13JCVkT^tv0*FS=L>HT(04y{BUgo&w^KFc;c3y8+vAvw$l+U%wgOc@Dny zqQf^=p)%m@^u0U&GYaQZ;m*+!R9HK%E=g?X-P1_`w$VFJ^h{*KMso1c#MM_3Z`wPWa_Re7Tzg+jPD?7*n^o&` zXa%m&gc?s-Z@ypp?ckvIs6(RE^4HiLN@*4&8a?RR^hz8-R?7q>q=cucOf0wXTLRC% ze3v2UslRBNJPWf@h+K}gmub%NKRggIsjFdf}D|jtB`3MTVm4CconsA18&P&p*#2LjY=+fQT2840?snkdr0P7&2QS>>XsLgE4Hr_Opa{MKZsuNLl*`yR+`bY|~_z{K4%uNTtHJ&dIb)t`eheW?%{)Fyc{QJCVD-j|S*XR%qIdzRwiCwY*QbdxcJ9*Vha4SSK zVq#2R+bG9Hj@VhC4c|M2bKyUXph;1=mPo*ZZ7Wt%pI%vhh7bh8{(b87Y`fU6G%lSb z8QIkn0@h|Q_QJe$TP5Rd7kn>?Dm8_^2A3j0zMQ4LL*q5SK4;q%n5~*YAJ2pE$0K>_ zSh9?I8(pBv$W-VHKp-kV)4qymaek)Vn*l@6vghXHZvi_Rt#Tk;PA#XSN4l^XKnmZd~pg zvEpOitd5wk%`j-bKsRq!e+){##qanfbo#*8ETnyo(_jQFXaa27y~OH&I#KtM)3s}J ztSIHTyzfQ-%rXu4tilQ~Qokx86QGi#Pn_aq>AcDJIrfaP4|Qf9U>^A|G`<&zb|=4u z+|BqsS4Y>luP=YpNJMhRG8z0zWO`BX89ZA32W`}iB!t+0vd1B|3r1`5J&^~jZgLyi z<(})3hmDd}!5M|9iSJUImulj@UUm}$a8ev=MzM;KXW4FjhupJHmDKhv6gD3>*2p$f z0<7Vzq7awnf+h@J>A<)Qm`L}7^!e!8UfIdvQqZ_n0~wSTy_u{_i$xbnBZ3UN>MpIn7xQBB|2u)q2PHS_b4Tv;`=Y&6x{`Sw%#{Aoo; zuKUnxY;@bHzeIaR6SuRWB(ShCONb+NE*XxYgw@#Llz;K$e3h=W*dAtoR{3%(SkX;_ zEyt8YNn*%rq%H4ZaoDylIa}a`Sz(PG9QI%_XK7c`YeqS$IR~59saDnSq7W*DqBK;h z-+dlfDHmhi6-VbaAazEU{Xlrm0n_1SC6|IjA3tAsd*lr-YZY^215!r01(mHMhCrvg zSBNP-C+ibWIFUV^%L2WWd+VDqsLb=^gUiNo=x+ZI`=H}|g_b5!X zZ6;WogXVCOE8!G?5e?t(F;l@rmhV>>1yO&f#HaB-+GB?wxrw?Vr|P zKmU})+u*9@=eJdx9kcC|>&TAqdRkEfpkhiy!PHh!9jE+&+7@&7Q|#rhzNLGOktsVW zd_TrF)ivPsCha$!RT?&Gb>LCAD*-t4k}hoL{+N-i<*tN`iCWuJXDzt#n65E z3Ca59Io10saNVx_OSg>uG%vk;aHEU-(>&AZmR@PQ->C}lPQK*%AQ(}IG}H1st0DP` zk@&MiEG z_}qEJoBPL4@Y4I=hUZ@UMHs201~hv6<7JivZdN_@kNEvSp@{t9=>uu2NBf3U8dT=X zp>+A^_G6I9R-De>JIg~ylRT@*MLWP{a)Eamu(Ve61ynxyJr%?E=rt2CHS=;9NLMnmNdU19WxJb}zyQ`W6xX?2TUb)v* zZ}VE_`U;TOY)Ppzl=3^@OkYy}Xs^NRM`yT-kT?|Q^)qvQ4|7ZJ;3;5IGp0)eeu!rFVHBSY_P?XMt?pYFk=kNB_| ztTU-yLG;&+5=#R~HKL0>j+)G0!Y`w%Br6RdBRofqo{q(cXCGr){6R68cV}OZ?<*&M zaQpi~TC11!duBkrU{Hj-afF;x%XkQKA1d}D?2k_PSmwoL$Jpd11*#Fup(lm6&tIxM z#C*`}L}r|6xJ6=StTs=ghJ37f#FfIAqC8G<+P{g(vT>3J(4sO8QBPjwQr%d1MRk&Eb>i)|yy~?g1JX$o`T{z}zC*nUs*Vb1uZx8X zZXJf{I%5|p`g-pE@mJ~$Z}CK1>%at^{78ifjT9}Qwb1&0aC(MTv7K>n_oX?V_-8Ek z&2&K#aVSV}$DMyp*lK)`%M2m?~>UVLv)yt$;xT78?;gzYRE6^{Lw$g0I?2(L)i22+c z5yz6T@jh?g!QrfwaSSAN{UB7>Ip$^S37WBQ#jZcUr;pIqc?E@Bm&~}8tk|~>c^Y(u zG{d<_Nl0`rytrk|&=*;7!I3CgE~%#wE1{k}l$Cw$WmKDx$%h?cxLQ$w5jNbs zW`eFzv=CoJ89YunDf%M0#!%14I*flFnnZ?0j0?j)`DSWbq5fR*K$ZDa_*@h)&KNIb zhH%z<+VZDyJ={so*A+dt?ugcl(6^I7W}mTKivO7&+>C-@w=O4_P?A0(#n{T}hIyxS zbITp!Sz{D2r+{+V>K{G1Dig$$PHG0r`HxZN?%lwBGW4-?ATxkBMpsUcK2W9eDNJb_ z+CNbBr>6?kOL?I{1Utd*&*ne*=vdVnmfR%#;N!LIi(d8kL_P%)nuTIfnqb)yrdIAh z@hQoIHQ<>;hUs8}#lCcNi=h#+zUHFmBhPq&U$U*&173i$!P!yT8)R?KOl@M4^mwX# zNeClT+iDJcN7w{8dF@#s@k2_WrJ&d&&PRWd9|h@)!dPssO$J6gW|2 zmxAP#z9ZYAf67^=a7AU~&W2IqimB)8RTR#dz~N6%1+pZ_M6-eus$orwn!Tft7BnA`;C6h;`=mV>{u)?YSKxmZ53e& z?KaU2x@jCRUyA=+>}QvHHvRm=8`=icJN{kk3-J-SC!J^W-&#az8)P|TaNRs=$^7Dy zyD}zMS*2a%I!wp4O(Y0?^Jyqx4y;3VwoN$D*(JGmtcE1bdd7SfuiWXvxAGscf88on zfAxZXO#8F5@eXQ6@&;=v9`~W94JE z?(l$LQ(0*mY-PiPXjX1ac)6>?so9e#r`-Y}8|oYCTKA%?f2k{IWK)cG5J2$|HSUWtzJi*yI!2 z)H!oOL?q6ysS6MDXt}UAZgeR>)1lz*h23XzvlPNr{yNp&Re_k24|6GWRaLTJBBYy{ zoxa^!W$aK-D)%+hTu+5OrCoZ024!Jb%j1_bW*mXSQp0E$r*uaC1y$e1w{o*^9UTSn z8BP0O_t!|~sy*C+nZ3`B_mWcygvvv~K@5>nECT?`pY#a#Rh36NXN#VB%w$EV0 zHe?NDqUf>flW2{)n0br_SJVWn%8ZBU#R5YcCOHE&@Lhl=bJOtW%uKLA&V_GXAeF;nTRI@Zz-<4j{aa%?U^lRrv<=us z@80)y!?Sw#53w9BXnye5QE`N@1FV9xdDqw%7F>*?c8i9tIG1E%NOo#nPCrdwl!gk< z!5nS1*v>4Y!MZEo(dVM7JZ+WeKNs+*;NL}tLNS$e4Y4ZWd5_Vj@hT#&pBzKDLyODr!kELn9 z1b7}l#7tY!p;e9E$;XGl2yQxU@1+&_iC}&R-CN!%opy||zQ9k}*98EX*;uIV{G0o{ zA7wjbgFg>|-pLQLoy$lONHAyC5aNeLY^VLcIf($X4)G2Zq|5a~ph5@G3r%E%5Y-(6 z_*Z}9U(Y|6@%&E%?Edrobvs#mCBXDQCVMC6hBCRO6|Hv*T=3~^8i6ZLUGN@aHcEY^ zJPSEmOpo_)QOIaC%a>sG;#08kpjPQhv-vpP-W;$=a$|p?8|m@1QBSmz@+YFzHuX%% z=RA1Bi^n&RMZ03lltJ72>~rdQ3ps(1HvbNr(Pe^_b!x_=P`lmI&*+;MpM4G~xf@Jv zccqV(92PL;Coc_&jEZ_$K!^pb*Id074Ww$a_aL06x*Hiap%Levo>nDfVaSq)Z(cnQ z@+a!*zU~jwj?6;$sT_6roc=OXRH-K^$Eoj8Q0V>gg80!#Ng3h{{fJDCpP9*6qC7mI zydjy-g&a4e->4Ss9k7;PpgDzI)U#a0yC#R!s{ah`E~wpK2FhR1Rd+Jh$+&V#ONNXb z=J~BJFCZMt=RSQjXdr1fg2>_@q%qK-=fZnOmoSTMiXaBEFcwjHWLxL<^k{xuZX-Y+ zuQvpt3`4&=+ZV;`p8Yk7i9;1S>F0eKos^{q<4Ad7w4dD4bn0$qSb5V{4F-RPlq!D) zWoIWdg%twIT-MyR%Ik+nPXlCqyayr|cc`v7^Qh(}-;I*}^@{u3KyH*Qp*SBwCa~3F z*kYQqiHe_PK1i~)dOSr-5p17oJoEWkfC4Mx$t)f9h^}JuYe;|DVnS+YzW*-AYwTbw;v&ao?#573kK=B~wOnyWwM221S@v-e! zG)Z?~F#H+sLgt+g*$<_5bWR8!S)Eff**qrDz|wwN7CtK8aq;=8+x#_LiBKR77 z%UtZwc9yMrE7(5A8ylX5xn?&PiM*aN!B2S2m9B5rB(uq<-|lfclz)phzl&~Gu6b%C z^Ed_^NT&=z7u7$l3FsTIo{sLF;b)F9bfa)+7=O4*F-3}BP!81pG|*pU=v+$w^6M?( z$aWBk<%=3=$dY~Z8!aNV{tRuc`gLJk#{Vo?1Z0oAxt>jDynME^-0CkyRJcPJ?m{gG zA4}y8z7up|-Otu@e{%9`*FB*`;nMh3U|S`ZPrz=mdDdJpe0Vt~!N2|Rm|xrEvij^o zVjrFP1mCc^%wdU8Qc=$#>{BPm?=DFWuR|8 z_K_tu^=0-fjNfWsuxZ<%gQ7Ek)%yIHOT<-FmH29$wiU z=!w)no+mFch;$EA%kkyE5yd=mGL_QmWdcupr89y2H_r=O{TBPO^35 z*vY^e5Z@gBg5drA@l#gxdn22*?9%VR8v`jS1i4ueuSsn(*L9vbvYV+z^DEi1J?jjP z6C;GD0D8(AAZj35-i61!t`o1sUNS_VkM(+DP)Ge>DPF*W&X zgh(Q0-Aghb)i4U&q)Bs1(6QlpZwz zvW}Kx1q)O_4hv8oko2!@!Ipc?n4{5!an>_Y7(2HZ?SEiWSCx#am_>fUEdHS)45tiy z`D`wTr;;$U(`K-C-lMd9yJ>Dskhyzsx_D$dDTPgu1cCp=XpGBKZsBGy1_U~_*x13a ziQ#tRGyNrdn!X8|#G@_DXU$ZuQ%e{*h1&)4_A9wSY<$9kHH${@SvyE~+?$`x+zNl8 za!34;dvk<{#R@^O5W>_W^i3aEqL-Q9JyqkK9|`#cbvY zoXQ*sDPuCU4Wqr2i}-=V4-z+TrXemMAaow+-)Mt$&J~g93}8BsfB`2Us-AEargk;l zI|N3pTcUX2ghMw$AJZl$0}_ND46u!|ei4Ceab^u&2k)fVPat^oy!wrzP7rO=CqcF4 zqipP(JT}t}LgU6`>Xkcr0p^V&Tv^##_jmGz^sb5uBaF1v0ar!(8b!YZ7@cddF1WJb z%{j9*juyC`#|MxRoBTMO@?TWxAMn8e4E{rvj5`s%5)Zh4ul58XaU|Fk-RjuRx_?Hy zkCp5{OZFx&QPRcAx7;U-fznOp)J=D@d{uAmO&wU3MX{Wj0OwADzf1`*ntf0DPJm&R zidE0wUdl(zwe|#{uijoQvJoE<3=`sg{n$9$)G+eCtw+|KcDqz91(uuUELzz3nLjVq z%aeN`*S;~b+~<-tSB4f8%TCM^d%nN=tKrwxj`3?e=2U{+^2ife&EXW*er|JzclyNG zp?}odJ4iVWt}|=u*ksVXH=I?K9qq8D^u#k>CdgOU4WUzw=gd_d zXdoQNFRsfDGE=JlYa~h9tO-;PD?b~G9_Y#zz}PTdRRwWwuS%}qy{7n74_XG%-mnN^ z7(Hs%5V|G1?rH@NMUKnSojiyF#Sq)n9JKCOjRFw1`Oa560YQ*3VdHmoyRX*8rs514 zY*AjPVDdHZzmY?d-nmAnMM@qZ$m&ak<_*dFN1$eA9E4#3BD-0nUzzt%2w0WE1|Rjc z5{RlcnQh-6&Z7I!6~Rik1Ln<6%v2LZ0MUUJ3EfN6&(w>`!sJ69mNR&pkB2DkyxRE~2>Z~Ko_#e00@o3b zeBB=Pmf4lm^PV|hcGfj4cYP8=%6ju=Q}!<^PpdiUT9v?iD48Cx*_Zh`z;`p?YLzDxLp?=5}&W{-rJt!z$BUy6hXuf06F z{3mkeu6s}lEo6a{zRffWxecxIIT_-49dq}_YW6a}RHVthw-zj3S!`5xrLPYl7IH!q zqB8y*@OrIfFb;Qgu`ac&aQ^FxR|`M4fxp|m?8Eck6$AXtJd%(_Ru*Ge5(Srx7=-+y z<2oyc@?3q7jWZ-#nZHwg${{OfqBX(j_XeuA@|wo+zblyIb!X z!#?{yt;kc%k~QxtNUXD{O059wfj^o^r0*8s)f!=Jw{uUw-IW?Zu)hn8)3*vgPpwef z5m%)N^Hn&f)}^iuq7zt&n()oA@A@e7V3c)R8y4Z;hBAboCnW{Km3C<;hXXkq>(V`H z8J4J(&-?EI-~VmmGXXRKO8RwX1XYhZIBAVlW7Y_yIp);ibGYav zm`UX3L^iO*No>NS(JYk%S-GOiC)>jqv2#e@+NNS$=wkqJ{cx&*Y|^oCL;X+RVVE@N z=#JKhf_5}xSW8y;`MN2W1+#?Ml4{|zn-27&zEk0Ove%IgkUXkE1*X}v*nt|WPPV_v z=->RAliGfTE@csE5*3hJz6R_P37x}PaOhA#woQtvV7yp9eQrQkr)VXaH|2P>t~ojg z#?Z=(c_o_|q56A?2_nuRxx(#SjA_Ue&f2B!-uOlMeT2_KDbSIHhr6aQWH41v_f|%X zf35-N5j|*GQ|?D{N^&=M?-ZU>adoOhbQN&NuK`p`hE|c+CTHk&ekts9WinpieE$v< zMVFa-V~@e|o5Wfqs?M6W=TY2(=xw-M7;d(Rq})jxHclimzYxB}Y|_BP4*G zT;@a{mv|Oh@hBR>&g65FzPZaOOgzF;{HHv~d~%|9aXjfn&xl+B4oKGk@VpOwo}-y= z+$iik6BmWbN7K@#(9Z&XKGR*^9x`i|;zUeAlNVxmi|Fv30#d$jY>UbT+TQ}m{1$FT zV}7sU34_lT=0sj&OBV%WXtpE_-^8j-NnyFx3v}rUF^B*CvF#8V6r}_d^4J@Dfv!6O z4OTJ#T3d+2vDs|{WXUc=eGNXTKQQg)Ca~)>q^ReT7ip&=9)tX)@?{T%@h~^x$xmq* zflyUhZ7F{{)qw`%3t81Q(ONJki|B?g`UEyGSdsL#za3Mt7wCfJ9H=goKSwyUf(nyl zo*SESEZjkz-KdIkw*QPLF8~J*pm{A9H-DMDiU(ROgJ-gAv6mrlHb-Bd>px`Tp^r!t zaBfZW1Y@e7P0TZrlN3*h(kM8L+5C88lnp#X=23OkF@Vp~;kyOZ+}4&bLq3N3hc6Vl z!O)pkDBLC7;<$`Y`JW?fv85WT1ustQfXo$Wv*%#zZ1_Tk>@~hedn>#)`xk8;`&1Hr zWL?YSaHP^f!>k__6MvuDv1Qku0&Sedl4(f?2jG%-Vn=itI+RINmSKngm7~_IyOi&J zK2%gZ!UP!IK$KEdb_6<0g0Nj84XY&%p1A-W_2*6~r?CCKZL|MD0;_x757=10Q zD@Il*fRUykCeeGKR-wOKW@FEOV6+kLRqN_2Q4 z7p_Z~-|2Uk=nIntF!WaQ?Kc&b$Abr3%P|hODK4!%mKmIqUrdTxuhE7V-@z)g!s!A| zhnHR#S|F{gaAU-7-zQY(j~a=)PG+hWJZhS+?_oqtx8#acDAq+BE-Sq9@mCEb7I;^y-KB^(okKgG#^+>wCUw{HBnM)(qqj31o3F{zx>GLe-M2}_ zB--r=z-0KN7o5bp0YKD3f3exg&b{YmV9!k(pju${HfTtt>-94F$6t9^2_F>9E}duR z{qyvX^c^cUI;TfUkflQZ1?JjOrJ_)LcFavo9Rp<9G|LF7GkKh3$BRZ?G6bHdb0RiU zpJdca%#u;e8S{jBn&vZl3NhHVQC6M+mzNn!H=f!Q5X8oC(Wx;Dc_~aR!e-)4HZr=( z`_Pe4Y!2?O6wwvlW65JTv>cpfot1Bz?;x8DoY}@Y6ishKp#_iy!*)B1TYC(sQO7RZ#* zrMxw!_$j5rnfT}jH7-|G$%(B{(E*g(QWmeEB`qx+7$I~!@clXB>PS4&o+`^Ou5|%~1 zBQletFbJ%x zGq>=2@s_h*R;dBAxmUqCu{$US!uGf+4V1$l@DXk3Kb4h)X_U$)87HpK65B9{=&Db~ z<~QbTlWw zdMO^2qvjqP>(P%mJ%jT8sfsxR?-y=i%FMK$(mwKk9%ut6(+>Q<6sVZ-CVYqMZo1nf zd+K;yQnU|5m<7`#cqWkTm~KM;`auiw#{iel{%5v1(~VaG^xY#fb%KRw4-$BElh*Ma z(|?tDm;YdY7p-M-Fi|?=Y>|8Sd_*NLS%eX;(6e~oTKe^1wcc3%Pm_jw_}4dOYWI#a zHv(pAco$igr~SFhnLqJEIx9=$2mTm)!t?jPG6TSczsHmJX4Fzt*PZGZbuY+I zZq&NUxN|%?;I?5{DQu^J_w*5|PIN3E#R=?&tmVLN_upAh=WbnN2_?h!Yyz`sev?p@ z5f(!|yG~w!`p>ovQvi?MuvBt~y{}oZka^2_M!V|b1-;vyyH;v%qBghzGBjIYk;zJo zeX;PdEwK`4QL&nOJ9u*X<@D3DON zw+8Jb?pkT_AYcPM5Ft@Rt!KKJjF6rSy3*KtADYH(v3K$9qKj^#Ov;^PfEl>3bRbKU zrLNaLk8bQZa>c6a4~P}9G6a#PCwvJP@}$&tXl@;C*V`pv>nQS~p9&!+$OIuVzdF_F zaJGL4sTKzmGZsQ5d9d^3|5Jz)xj4k-P7&9ZRbYwM3f?4WES7g{Th zGx7m_f@muDH05L78`A2So^yh55e1_$l0L-V>t2?%p47Xp3j<~E-bYoWEcU(AVb@$m zgOq%|&(J6~6rZm+5}RT|mK3`t=xE^HJIkg!B3yhz>H%(xP`mkPn@@JeJEU_j*b{sP z!4u1I`NxlJEu96yDS*`cO&MNWm$G6OT-wQjO;7-G!s(ca^O0tg`gK&g{2A-4KX^GF z_RS~OmePF-{b3fSOnKwyZ1_9|3J_fbGloxP1(K%0LUh6fDF}>I-ZqwOI_MlWVQgd& zygJKPwZ4Q7Z)QEHArs8HBtCV{u@NDKh^1DxPZS2Z3(g^Ex0xvDs;9y7b|n2TFJ~;86toA@$slF=sp|9{{k6L`X*o5RqA(EusnnSi- z)qLFnN&3v~5Q4!F<_2uy?Vf7kR%+$pZzfY5k-KQ#GleshV47cdTL+JDQAl?-Koo6r#DItd76uf}vXj^}~+WOFvjR7Ts5<<(z(RfC(P zY~Gwdz1|$}oMd2;%-Zl0 z(}qmw`S3s93Is?|Hf2p!X1l{#gdP7oq3>5_RYKm!6zBH%t7$Tbh1fj!CrSUO*Jhf{ zlx7!aN4V|MnC@2U2Awlm2=9_XHr&2??`$BTy_0_gli{K)z@1Zg`N!DDX}ZbthDJFt za3kMlZc_cLp5`9wC7q?cJh>V5@IhU8&p`f8_3M7pk@Z!GN>aXc#t z0pX{}1r2zJ8hvKdG&L^V+p}^BoOtOf#6zx=N?(0Ho+(PF$-_V?Y(8bUz&~SyUL21= z96+WO2KvaP?>xIq&y#n7czaANqb-i~({20nJttjmXbG_>?Hkydt9=J=BVs-JwJ9p4 z9*NB&8{3#(7G@JTK1VajI>HZaz)>8bKSS>K`(l@zisn+yPE zaZQjG$;E&<(A!w)TU0r0qVC;MJoDe*paPGBfR88RzGq{=o~m@n7&@UFW(N_zebIpx z1v`M5hAAw)DR>#{oTtSE|MRr)&huz^Mp}GVP(z?_R(bWE1_)!Pi>423GkTkx=xDe znKj%L)_5@}J1un_L z4hCIX0KTvODF*ZZ$~voctO4RVi_t1KG1HHDQg~28C%Bo* zXT)!Ixvr@8m266(Nf?OhYQ7{rU}+&AT#tw{{FGHwnq}+BG&T(4Z(uP4%c_@$fJ_c~ z)WHDjLO(3dplq}@xW+j z`_e2{DBE6KzWZ(Z+|O(Z_j`;;?7KOh*dtqZRS~A2w6FX$Zva*j@aDIVJedpT1Ke7x zv_05??u>FPnjEt7LTs`Mx}nK`e;TvEjmg?k>5@%Ck{i^0p0aEU1m}n$dYz>lo<{9 literal 0 HcmV?d00001 diff --git a/data/images/adecWatt.png b/data/images/adecWatt.png new file mode 100644 index 0000000000000000000000000000000000000000..b12bf63e44174dbffe8ea6455d583b4b40f448ca GIT binary patch literal 658 zcmV;D0&V??P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00H_*L_t(I%axJMYZE~j#-Dd~ z6L-@jjmajl7Hm%~;z4Oqu*TZpMbLgmZr(~sD_SUmR)d0q{W$c) z)aE<8+0E>{9=eJ-B|ev7hMC{{@EgK_6pPmj(^DUwZfxkEEGs(QsL|I%oX?u33ZFaw zZB8Eq$R_Q~nW@7ZdL~YcxikCwq@5gdE*WM|2LLe$09LG+q|YRkBI!%b_Z9b)A`Ar} zKDtPPKnxHBf|KC@ii6b$m;eRbgorlP&t| z;L+oU$Au7ODgE2ZS50PKYqeUhJkRYA(XwI4*H`8*uS`zfzepsQNbi@pwYhz_)3#5$ zUH69Tbhq5DSN2?QMk@J5=-Nx$?krg8%=1P)(hx$7kf!=2T2^`@q=)j6k=U(T_3*RM zwU6OYXwk9lJMn1jM=Ftdaqz3E*XqUc^2&uL;V>Tq-VZPFPi__p4~$4$JE&B~OQpqU s;(s15EtNtkD}AlgZZ2fAsXPGu2DC@mlbZ^$>;M1&07*qoM6N<$f)9HlRR910 literal 0 HcmV?d00001 diff --git a/data/images/button/Add.png b/data/images/button/Add.png new file mode 100644 index 0000000000000000000000000000000000000000..a956a809eef79b53266de1afc493c49493ab4b01 GIT binary patch literal 516 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 literal 0 HcmV?d00001 diff --git a/data/images/button/ChangeRole.png b/data/images/button/ChangeRole.png new file mode 100644 index 0000000000000000000000000000000000000000..20d71033b585fab32301c13e795a37c81f629a9d GIT binary patch literal 539 zcmV+$0_6RPP)7O6Qv&H=#Kaw{(%?5)n;{ogkuhv~(c z+o||7ycT%^+e;BBtj9X^=jip&z}CV{DH(eTiO6HfB;G(Z`vpqLI29VmufEp1zcv9k z7(k+*@Ds9$Xe$)Z+*!U>-~J$AJ`J|afuq&`*4#^e4+T&ZbxCK|GPt$_LrqIr zyaGD4#GDE6yuo?Y;`)YIg8asNIN);FpItZ=kWl}os+!N0c1MwA-BqOq@GSkOePmdU z;|YYgQ?A>;F%pnvbYE5R!0g#z+peDj{?bsv+%#>+f1VryY~o%laV=Lz7%YF$e;->H z+hBC84spDzCqTI-J(6StbYw!$A^|cs)U`k}FdS;=;R%q=axbcNdC-zI=$cl5j4ZgG z(ni3G${^41Q$zn?dV2Xv^xft}p;${)_75s7*A$DDrb3rRg|0LNh839~h3ev5Jaun= de)safyGS{q002ovPDHLkV1m>K0xSRk literal 0 HcmV?d00001 diff --git a/data/images/button/CircuitOff.png b/data/images/button/CircuitOff.png new file mode 100644 index 0000000000000000000000000000000000000000..c7f56c86e6eaa231009bcb4564b2b6c6dcd4db45 GIT binary patch literal 657 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 KT-G@yGywp$wU*=n literal 0 HcmV?d00001 diff --git a/data/images/button/DataManager.png b/data/images/button/DataManager.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa89ea323bd1cea889a8b5bea2b6c0aa7a6f59f GIT binary patch literal 912 zcmV;B18@9^P)Yu|hAYy0Y8R7QbBMJN?SnaQM##&Jc18xce@F^qk86j~c8smQQV-sGP1yZ3(<3g200>*}&( zqcM|ZIXRI`ARdbjxZQ61md$_I$NN%ahnh2INUr zB%!EiIZ2>^*3QSc-&>4~DJD$TFF?Py9Xf%7kyT&q^6 z!-|zFpqE5Ew%tHuPX%U7$i%CUL1d>*!Zf211HnOf1~`anADSB9{-Xe9WX@cC_|V_C zynY{yMj1(lWZUxyH(f_CE7gFUG!weqpOB!UFsEiC92-El+liJNgI5%QBuT#=KY8*F zsT+!xFM~vSpv7jz?kkH(;wYp|(!uEnArg;a&g>NM>LkAShw<#f@SkI|z?w`s2e(&O z?_5<}%xN@gboJSB>eepUhwej7z>b#*gu+SWD0L4nr-3+Dg;0>Vi| zK~y-)b(2AB<5m=fKRrFk(MWRQ#KaiWKuwdj;B1D#w2&0KE~TsPS_)le?Opf%0bOJf znEsIdfk4P6UX5dHf)g7uF|MUVdXgo-*UcnkN_*gP@8WRoIdHGVf8g}=^vf^|KeuhW zW{hFATK&CPEZ!X-AHVxI*LoUGPEKmu+uOevMe)mOweoD+=BcEVNGTCQJZ4$;b~qgV z*6nr^02`p&?Y^ql>m#MqH^vypaU5LNrBbO-sZ?+r=Sjr%JnyUZ_4S{d&E_9xXJ2w{MNv?#R(W=irYT91uv{)tN+E=xC<=h(Hd7&01-D2f8DH9-)3CjqXmuDqk8BhoZwI2>Y(;pXOs zBuS7`(rUGcqKG(-X*Qb}W0=im~0-ad&rj-?UmSTL^(tio3fz;y9)(OQI+u%Q9@+#u!7M=lNhT z_{nRWUUa$Ac_x} zZTrKs3E%g>t<`GZ3n4a?QoZ?n{^wvYcn|OoeCJiEjNkIs00000NkvXXu0mjfHXw%^ literal 0 HcmV?d00001 diff --git a/data/images/button/DataManagerOn.png b/data/images/button/DataManagerOn.png new file mode 100644 index 0000000000000000000000000000000000000000..cfa89ea323bd1cea889a8b5bea2b6c0aa7a6f59f GIT binary patch literal 912 zcmV;B18@9^P)Yu|hAYy0Y8R7QbBMJN?SnaQM##&Jc18xce@F^qk86j~c8smQQV-sGP1yZ3(<3g200>*}&( zqcM|ZIXRI`ARdbjxZQ61md$_I$NN%ahnh2INUr zB%!EiIZ2>^*3QSc-&>4~DJD$TFF?Py9Xf%7kyT&q^6 z!-|zFpqE5Ew%tHuPX%U7$i%CUL1d>*!Zf211HnOf1~`anADSB9{-Xe9WX@cC_|V_C zynY{yMj1(lWZUxyH(f_CE7gFUG!weqpOB!UFsEiC92-El+liJNgI5%QBuT#=KY8*F zsT+!xFM~vSpv7jz?kkH(;wYp|(!uEnArg;a&g>NM>LkAShw<#f@SkI|z?w`s2e(&O z?_5<}%xN@gboJSB>eepUhwej7z>b#*gu+SWD0L4nre zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00IX|L_t(I%f*pTNK{c6#m{&D zy!+nJKSPm$BBG*Q29i-T8;ROf*sd0VlHm-FwkQpYfm%w;q8hO%f*??$+89NPOoXPW zXjdR%&=5pXAel4Sym|L)5i|Kl!9|O{)xF%qx##>o;2(zo;8G$l z_X|bIq1;X>WrvVr9?W5bL^c;yN}kb<(<`Nb@B8_(A9Q^A{O$G3Y!UCK@}>O;<6W-n zT$VyCN}z~nz%izm2w-MbT5k|UcLh-b%y!e}b>(7VeyeAkB`XL?xM71}jQ>O{^QqiFXB#Df)mkV28oN4b=vjPQqndpcrer1GQLoB;@XRtk}|24EX;f_ zG_770c@r`KfW4>gZFjU<|6s7~er?RN*Pm&vWTfwCOR=s0&gs_XjajaNiCFhYQ>=TW zb-A_0Q=@$$h?PSS*fJ3X%Nbb9HoV56+)YPo{3`itt!3l6&L;+&z%P$p>4{bA962{; z8lsK;vvWTWtz6-~wL$Q3IJNt>QcAZw#(`rr079i(8JGf4HK=QBIIbL>uCF(SnVYS( z2a=a2Un&6j3nT=lTBrTO}AG+eews9ar(+=QpX&znGdHWq$ww002ovPDHLk FV1f{rEhPW| literal 0 HcmV?d00001 diff --git a/data/images/button/DataStructuresManagerOff.png b/data/images/button/DataStructuresManagerOff.png new file mode 100644 index 0000000000000000000000000000000000000000..7695a10e171e9c2ed3e20a05c2ca40f6ecdba712 GIT binary patch literal 653 zcmV;80&@L{P)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00H$$L_t(I%f(SKh!a5+egDtj zNeBd@!N8G1LBvi878VLAY>n7idPO+h;t~){6w;YOLQFQA!bY$Y!Ae0cCt5~O>=dq0 z(8h?6B6=>#y0c?*8)ELz!opw8%zyLWfA0bRSOfs=c01`f&KeP&0dS>KseD)j^?JRN z%)ClO(_I5R&s$MST^EscW=0r>pNui9lgZ?b@B0{yMnR!aSaTfbHZ$+qK#1s?h^!M4 zthH7tb&!Z25z!?8Q7)GYXS3N+t@WM~goy50YYzc9M?_?;{YXT&MC64r#*WA1AfL}4 zw$_4(utW5_2c1r5pVqoTM8}x@u7-Jq(tJNnlu-R-TGMUWP z>2!KNnM}Sj#yqW7s}Ds)E;^0_5m|P43&4CpI-M>nr5fpUI$^Cnp_Dq??RH-=fcdAz zcoyZfTCEikxj;mT7(+xEt#yO{Ab0MMwe~xJ_e=eNnO}>w_RbPB05||%#+Q1%zU_Hl nn}|*`^O2qB4cB$=;=k7~*We zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00IX|L_t(I%f*pTNK{c6#m{&D zy!+nJKSPm$BBG*Q29i-T8;ROf*sd0VlHm-FwkQpYfm%w;q8hO%f*??$+89NPOoXPW zXjdR%&=5pXAel4Sym|L)5i|Kl!9|O{)xF%qx##>o;2(zo;8G$l z_X|bIq1;X>WrvVr9?W5bL^c;yN}kb<(<`Nb@B8_(A9Q^A{O$G3Y!UCK@}>O;<6W-n zT$VyCN}z~nz%izm2w-MbT5k|UcLh-b%y!e}b>(7VeyeAkB`XL?xM71}jQ>O{^QqiFXB#Df)mkV28oN4b=vjPQqndpcrer1GQLoB;@XRtk}|24EX;f_ zG_770c@r`KfW4>gZFjU<|6s7~er?RN*Pm&vWTfwCOR=s0&gs_XjajaNiCFhYQ>=TW zb-A_0Q=@$$h?PSS*fJ3X%Nbb9HoV56+)YPo{3`itt!3l6&L;+&z%P$p>4{bA962{; z8lsK;vvWTWtz6-~wL$Q3IJNt>QcAZw#(`rr079i(8JGf4HK=QBIIbL>uCF(SnVYS( z2a=a2Un&6j3nT=lTBrTO}AG+eews9ar(+=QpX&znGdHWq$ww002ovPDHLk FV1f{rEhPW| literal 0 HcmV?d00001 diff --git a/data/images/button/Down.png b/data/images/button/Down.png new file mode 100644 index 0000000000000000000000000000000000000000..bf8cc2a40d2a9e7048ffe3308ee5899550ca4967 GIT binary patch literal 414 zcmV;P0b%}$P)i$_AQE$Nc%~Pg;hgh=WK*<=0DuhRXm1EWRugy;^Q?O~5*wi- z=AdQMLgTiP`aM0dFC$JXWCh|{pzg{*Q>LHTl^@pxL+G$d*4OBLv^;k+NB^atjU#z}M9Oe8_%D%@2uob?nD zRSf?cB7BH=_r0Z1Hbhs-MN85`;XtTLF2K%|z9cLw7yoQQ^ot4Kk+0-FadY5sfXX!` zu?1@4+G6{vI#;(wtU#s-YaT}9qb1vpjiMy7ZKPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L02{9W02{9XUK)`c00007bV*G`2ign| z0R|1r%h|F300odqL_t(o!|j*tZyZ+@#(#Ha_GP^5UGLh_y0L4!cI{YwAr3T#G!pQo z#7Rk;fG80XAOsRceB?ji8z0J_0H_G50)d1|TWCZoTD4YRAPs7=NpVvrZ4x_Pzr^-> z*E4g^;lqwMYdZ-BRrE`abTxNoq&d%h&U2o72kyqF9Hv+-wl6F!i~{NZbMAVvSUhil zM^yFgPi6JS?Dv2a!1s1dkgvT$kadxw!}9clgtaylrJE9ig#i|aUnkx5ck+(nuM`;Z zzrdqO{AB7lL%sKLYIz^OeB(p>o;0SX$U-X9sP~RT zwgZT~9y-soGd)wFP;F=6;{pn#k||u%kjj149N%4+|A(@Tv zL~wbX)M%dly}SACTSLs(eT>>hN~1{2svD!x5s0E9D1z!ON`T|wetjQ7XGoiSoxbo* zMrSJ&&h_)oYMFEG7jb4S?cE(@PArh0hO4V>7$XhpRpVA~Bv6Tm3aSGiVoXY!1@H+XvCByGV}mO5tP;Vf;>T;WptJkMU+)s&KIgY=E$VlAo> zA`xOEB#Kapur|IAgQgvOn>tjL+@Ys=fAD@P@BNhC)jFQ(AUW^T@xTCAzP3hrp}wg&y80#=BE8rSD4*r0}qEg4bLX@{P!90xzw$KHN_ zu77akM4?ca_iklXqL%JbCo()p@w4Bcd(We&4N$Q-Mz%X!?EfMWb93{&{PS<#vipNt zmA}3E+Tz&Q7oIG2cfUJ3Go#x9IEHBHBkuj+8BQGRWYVv*Xa%tvi*1Xgwklo(8?6Hn zh9OpjFbG($*Qu|qajslmK6Lo-@mwzV=IqRjZt{VaO%g7h;>zWZIqR;W4+U6}ZBB0h zX~Jl<8*zJyNHcjD1k`Ia%ID9o9y)yZsrGF4wdLhy*=9to5ta5+NeuGF+7P?4<9N5R zS)&b8)ux6UTT&F=OukmFQZARPUzwQrb|#ZKxw5*tsfODDh~SqVpyyk^#yANK0%~t_ zq5#ukwTgl6Gx8x!1w*Jny+M3hkX1(gd(v7gWJf1#34S ztu_?ia^53$IkgcQMTiYCks;GoAF%=XPWMyUL=jRs|7MhxxW@KcfrKJHCCnqP@ z*VlJ;c1A@-rReCS>g%UlS!LSU)n;VWW@gTuIkUX5aOu*e&9${hjvQIFbm`^Gm-p`2 zF?Hg^=~JfMyLWH#;>GJ(ST=ESov^Vv?d&{HSa_3_)$7-<-@JMA_U&7sUx17cU@$#C zes*T&inO$~g@xHG1xTUCQ+qP|oxVaAt2>}g1*VT1#;>1gnCS9?zx-w(Nl`B`S zUcP+w>eX9LPIvF#1se7K{re9OAAWfH^y8B!pMdDYhtIEGeg6FU$B!RBf#~PY|Ns9d za)sXj282&ZkY6wZBMU1V2M;g5fT)y`s=l$4vqx}zVNr2$aY;pGQ)g$_^jUKkELy&L z>&{*K_uswu=;`wpuin1>@aglHZ$QI-{sM#FzyJINf_V>ZcL2>@>*?YcQo)$)z@Vtc zCZdqHv`a}T_rd$sO)5&6&l5yM7M^K&;ND(2>$uBGL&YC;k`u)?7QW)B^Qzd@9=Xb} zL!a%@a@OO&S#Hff!Sr*H)waaCPDM|-d66G!PKG8_$)om>ZNM>fge0Y zdB6zh+ZAVE$Gmutb-yYhZeV)AtLb6Mw<&;$S-oF0Mz literal 0 HcmV?d00001 diff --git a/data/images/button/EraseOff.png b/data/images/button/EraseOff.png new file mode 100644 index 0000000000000000000000000000000000000000..b8853fbdaa28f692367a3f1202233b4d507e0594 GIT binary patch literal 648 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl480`XlLR{aydj}LD71-L^0=2}% z#3UspWou|eMn*<6F=c6J#4s@>s;GoAF%=XPWMyUL=jRs|7MhxxW@KcfrKJHCCnqP@ z*VlJ;c1A@-rReCS>g%UlS!LSU)n;VWW@gTuIkUX5aOu*e&9${hjvQIFbm`^Gm-p`2 zF?Hg^=~JfMyLWH#;>GJ(ST=ESov^Vv?d&{HSa_3_)$7-<-@JMA_U&7sUx17cU@$#C zes*T&inO$~g@xHG1xTUCQ+qP|oxVaAt2>}g1*VT1#;>1gnCS9?zx-w(Nl`B`S zUcP+w>eX9LPIvF#1se7K{re9OAAWfH^y8B!pMdDYhtIEGeg6FU$B!RBf#~PY|Ns9d za)sXj282&ZkY6wZBMU1V2M;g5fT)y`s=l$4vqx}zVNr2$aY;pGQ)g$_^jUKkELy&L z>&{*K_uswu=;`wpuin1>@aglHZ$QI-{sM#FzyJINf_V>ZcL2>@>*?YcQo)$)z@Vtc zCZdqHv`a}T_rd$sO)5&6&l5yM7M^K&;ND(2>$uBGL&YC;k`u)?7QW)B^Qzd@9=Xb} zL!a%@a@OO&S#Hff!Sr*H)waaCPDM|-d66G!PKG8_$)om>ZNM>fge0Y zdB6zh+ZAVE$Gmutb-yYhZeV)AtLb6Mw<&;$S-oF0Mz literal 0 HcmV?d00001 diff --git a/data/images/button/EraseOn.png b/data/images/button/EraseOn.png new file mode 100644 index 0000000000000000000000000000000000000000..f12394214dadb66bd90e7c671d87a5810c1571a6 GIT binary patch literal 810 zcmV+_1J(SAP)zz1OUPe zo)1aVX}s1#$L?N9pk7vg&d^@u+F#8>SvWgp*|R{@KeW?!3fxz47$#1qCH6_Y)^y5H zFib~-aq$M`CM?fzU}@|U$SOTo#9WkucPXo&vB2K&eIgE|bw0-T(%|)#nK)Sc{AX5X zIWXIK##ob14q*wyDlklNU<++L7^Y&uFc|~-!AO{IKaDvBOR`X$$6{h|77ub^ps^|y z@hyVorLkzxE2BU^9tFCgFqp3K1eL%6WF<}}X}+szD2o9fg+8#Ph}aT;>%R=;NxN6^ zTbv-8ut4|b3g|{6U|~2MCR^ChTgEaKC)ux7-lsJ^PbRA}nwbcU4XA6=i!6g4>T`XP|J5%#wT3-^=I~qQWyqB2C1H_ z_Me+?4L0-^9XAQ?kmH0TldgX)VE^c=aNbnZcyEq2A2q2uJxpWGE*p|Gavqm`%@Q#W z38dLJis=%!hEL*?QgvCt%%ga6-E0rSv|=_efIkj~u&`hia8X517NcV-o8oKpY%2!R zm>szsnsM8u7~qjeox1WMKkXTaknYw+SY5C^YeS z2csdwiC&Q6hH#OEDXr!rU1uJ%@Lh>*$V47J6bmAsBv4|U6>byYGSUbfk$D~#xucHK z{Zv!lu04uMceeV4v#+L{6@Vo{eGhCx%J0&2Sm19dTTu(y$TBP2jv!^5H#OdTc&DoF zfSX$6?4fzaau?mB-@@gq<{k6mUm5H6LvOo$DP@b7ou<~qR$lC4S9y(2GiMgTKheDM oL#k?5npWtHR9tJvD)=vc0s@|Dx>pGq$N&HU07*qoM6N<$f=L-|8vpGx`w$H|{P9kKkPiT8==sf@Exnark zEmD>TmnY4!F8TR zix)3jzGC_E6(DdSYt@CKojZ5#+O=!{y;(1%q!O@csMuA3*RE1b+Sc_51hlKY#xG z{rmUdzkmP#|F4ukpbGS}NJ)@iFoS@wsI-iVs+yIxi=Tg8_wCzv?wEJ=2m-S;KjdelO z!@js{U5Sd1%~@OgG{NASRo9};Z{8;BPg8MnNi@%CK1$bG7z#dp`BqeXyh&29 z@BaSt`m=*_CNP*Z)|b@($Z23T++tJy{{c6Hr$XleXN|qr{(LjgT=2T-*NMt^`3Jks z&HtqnwDjAwWlZcp=WB)UUhSmgp=oaXk}dqUw$jYCWz%$vk48VSXFO|Sq&10gItM6v NJzf1=);T3K0RRaN4lDow literal 0 HcmV?d00001 diff --git a/data/images/button/ExportPDF.png b/data/images/button/ExportPDF.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6a39f3f2385bec3a40b9e03484f636a5c3bfc8 GIT binary patch literal 685 zcmV;e0#f~nP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L02{9W02{9XUK)`c00007bV*G`2ipMw z5*z@?BqG`X00J#ZL_t(I%Z-!0OIuMG#((FW8>80N7)e1W)#_k_AFUnS1aa)eaFLjp67So^S%n8 zx3{+|m&=U-7XMd%Fc>`bJg-12`@v$JIP_IRc> zCKyDNLIFxC1n3Ee?=<>8TP>d_x4%#C%nTQ)6v`Nk)@Wl;TBCKdr0LCCDPArvavFNKhARO)Zll z(AS43MaSA2-KiA$-CceT4Df4yo;OOh(`s<)-&Hw2Mh_2DxVqwSbCY5`PBoV!vb-#z zp&@k^kNV+fa;vM7KRS{h{r!#eQ_H)qyqlQ#FfuZtTM{6G0Dlq* z$~!xBEG+@xx~^m#N6jxRd@7YnUv1m2J?Mb|H;zMkd>m_Pis#8BU4w%F;%2jIE*ATe zNvA*CwtaIycUnZGT&ajNHz&D`4Jp~SoS&b|!NEbTSS-rxX!Kh+9B#WWtP|93V_crC ztl;}TDiQ&pr>93vPELMLJI+Vfbt|o!PAC+5S|}9Ww%QHgA`}W87Yc=HtG)gUes>uC TL**xU00000NkvXXu0mjf1qvsY literal 0 HcmV?d00001 diff --git a/data/images/button/Filter.png b/data/images/button/Filter.png new file mode 100644 index 0000000000000000000000000000000000000000..9cabc5a3a8e87ef685aa7f1b96ef063fb91ce95b GIT binary patch literal 429 zcmV;e0aE^nP)MzCV_|S* zE^l&Yo9;Xs0003jNklZ~&+wnYNi@8tV0q!1{Pnr(Qs;+vdQ@0uYR9;Vg5*Gm zE#>6yUwdEeJ->JB-r0K__onal-D|v3Mx}&-6|CStL&mZ-KPG<6e;NBmng3|-`-iVSzyJ3B<*5S&dxJOH+PX0)!4>>x2+ZB|;ne+~-+z7m zaCLv--q6Z0L1%~zRKb6S*jc-7e|-1jG_M3+bXRK z7??2>0GaHC%bs1ow=1NcffGseKN9rL`t;_=azOU z;>{3G#t=y`9smiN5C|X?1o;uVr7hj=w!7==7L7*Z#o2wcn>X)$?|t9Q5ctnQ{^lGC z1{x?KM=7Ne!3fi|RMRrYPAsoY{S)AIq;4;pNk6G=X=xL@6+jrq_FIMlx{`pU;o(8u zJP&zH&gAoUfRp2Zp#)T2hj>DPt%UOQ@^gvlE~j^BGAhVJWOV?;KK}_lqfK}AUSMf1BGqC&Q#oqDIn2@s@7`*bc$Si znVugAivrQhJ&?xg#D0DpEeIWtRqa)Yg4;pXvbm^enq30MkzMhA znDvWkgrrqU`h!kK&)sCkBIg(?D2D06HIKZnsw2{N=+4&oeE*jZpWhc*SS65xv##<; z_|)NR%0#?-d35##x|0!?v_sAdEX@Gn@Y?W55vf~T@%R^|OX+zkvJ40eHBrOj#VDXW hI{s)f$LKsI#&-=yDi0k3n$7?K002ovPDHLkV1gJ&b8Y|t literal 0 HcmV?d00001 diff --git a/data/images/button/FurnitureManagerOff.png b/data/images/button/FurnitureManagerOff.png new file mode 100644 index 0000000000000000000000000000000000000000..2b9e1b6800843eeb84278a1c3958b02263f686df GIT binary patch literal 757 zcmV@^v=vK@SjG13vO<1-eQd1 zA)){PoO2WB+?Q^*`~9DQPN#Fz81s60dAS_~0T^Qd0BbGsJje0z@jmDL>Gt;ak3Rq# z8yhzmW1kln7aOyfwH5#h5D}r@@Bg&c-rd>R=>vc_OTM_ccojuaBTZBIz7K0Hq?8~c zlu9KK5tLGpQZ|w#c?sYN0MPpS`t=|P-bGP#uh;8Q9LJcSpNCQklgR``gdhmOIfoDe zLI^Y(4L2H%-sgG#(34U=URhbW4*+SJVmKTE0JPS~^So%q^E@O;f_lAa;o)Jg*=z=J z9Iqxxg3)LMr4+Q*#ZgK@2!TA$5r!c+=jio%Tf4ivZ@jB1OCbcb)@U}HsMTsk;>?5) zI6XZrV2rV8v4!b$iY&`ujDb=LS(ZUcS*(tTiZ*8VN+}cot+f?G!1sL&1_NAPUV<@J z6cZ7QF_=sysMqVrvJ6^lR{*TF-^Syyi{qFU78anj2GQ@YoO6!3xj87MFdmPcbM9*a zD3{B7X_~%}Qg%4!(MzOU z;>{3G#t=y`9smiN5C|X?1o;uVr7hj=w!7==7L7*Z#o2wcn>X)$?|t9Q5ctnQ{^lGC z1{x?KM=7Ne!3fi|RMRrYPAsoY{S)AIq;4;pNk6G=X=xL@6+jrq_FIMlx{`pU;o(8u zJP&zH&gAoUfRp2Zp#)T2hj>DPt%UOQ@^gvlE~j^BGAhVJWOV?;KK}_lqfK}AUSMf1BGqC&Q#oqDIn2@s@7`*bc$Si znVugAivrQhJ&?xg#D0DpEeIWtRqa)Yg4;pXvbm^enq30MkzMhA znDvWkgrrqU`h!kK&)sCkBIg(?D2D06HIKZnsw2{N=+4&oeE*jZpWhc*SS65xv##<; z_|)NR%0#?-d35##x|0!?v_sAdEX@Gn@Y?W55vf~T@%R^|OX+zkvJ40eHBrOj#VDXW hI{s)f$LKsI#&-=yDi0k3n$7?K002ovPDHLkV1gJ&b8Y|t literal 0 HcmV?d00001 diff --git a/data/images/button/HiddenOff.png b/data/images/button/HiddenOff.png new file mode 100644 index 0000000000000000000000000000000000000000..00903d2c917781e8e77b235e8b9ab9ac2f650241 GIT binary patch literal 895 zcmV-_1AzRAP)5z2y~T|of(vIZF=%qth%spvntQv-v;*C=XZaqU!+Vaz z|CA7747ip4c{B_INs?GxTx=>UEAv%UROAj14>uMT7IKM10+-8Gg1-XBf&RAwIy*Zn zySlnwrqk&ssZ)qYmm$6vv z$9z7Yuvjb&&CSg{Ua$AF_V)I}Xf*luWNZ-s$M*cqN1| zgb-tslaqgY06w4Z>GJaOr@)^jqqVj5J+s;T;Qs#pH4rWqi;a>b{np#t`|kMoII=9G z>pG^Ini@&h^{o;-Ha0eTcX#(ip-^}z%QDGi@-CH1l>uMw@9$4J9FFm!p`i~Wk;oo^ zoXKR2ot>RLV4a$pI#5;h`R(nk&Fyw`c6LT8l`5;NtD~o<=V^6yb@lrC`q!$eJ}P}$ z8nJ3-W+twxYGZ$YKjr1+tgf!2C<=bRpL9Bn$z(D-9*?%Nvhx1%@$t3a@Bd(HYwJJ; zn46pXHJwg3PE1UY%jJkfA}ESNQ&STyEiHIF9tH*mr1SH0$H>UY0Z?8n77qbrfJ`Ri z@Or(5)oLXgjS`E+a5x+!5(zX-qq4G++S*zIfq-;*dFftSTKai=d;1PR9vmEGb93{P zlamu^dU~3pqa)hd+PJy7!D6vsv)M={li2Nc>g((A`Fs=#1^@i~{IfS32q8?muKyy- z@?)RRhhZ3o)oPVAO{1!+3YW`8Utb@ELV>HREB5yG48t&_;o;#2vJk=qd@sxLV_nz3 zjmP8DHk<8Q(=;wFE^s=XMj#MC*LAYlEb(}pY&Ltdv9a;U>2&In5MmT~4lDyhilXQM z-QC?E&Cbq#oX_XIr>Cb66NyAoRaNc!`ug{^wY49@;qZMZ6hab0JOLVk?@I80(O(s$FOvWO0{2No zK~y-)ose%xoCO@mKhN#Rc6X)s+&2GkouD^MsGVfAw zAQCFhOQS$vxL$>OQ9-i^1J4&*#-LlpePDcQ&TlotF@`9s3@oF`j?ZFlet79fyd+d>v;qi0A4EqG&VNg z-_p`DmrN#4C6h^PHXClY8>iDb+1uM27Epjmpa+O3FmVqM3gp%C zTrS~oINX}1oz^t%+>>>6`uU!oW#BCEwgT@KI0b{jD?sJH`MThNZw?<`6A*#E!NI}8 z1E0^=3fTVMdA;7MhK7b30gJ$lfLwFA7RScM-UqN)EC3vExm-$VY3auL`uZ+Fe}8}E zsrvf)vhwnNcUjr_LwD~ERHRaMz&lm>{OfkR{fVZgrv2sR<(~`I2OL8~LpR#m+N2|N z&K$aUNxt>gi-63ZI3c4WBj2m4S_07A+#LC*=E33N;kC}rPFcGCoqWEsBR{qVL_mJ% z2uph?BHi8HW;7a2*4Ea#0E^%6KMr647#|;>Po+{1U$`*9?VShl^o7voKH}=hlU#cK zRZ45>33YZTTU%R4y1Ke<0QZ@usow)^Z*L#bG)K5ZKip852o5HJ@ejb$K$_kt{pUP$MHW>Bwg(< zD*J{>CX+$eb<*kdomedPY&M%sC;|~63VaBhRlo#jeWCg3(UDQ#ot?b4v9Vd4NF;ub z$K$C?CiC^|?Ci%A6B9-_90q|?0&mElgZ|h20n({A^ReOLj{pDw07*qoM6N<$g5?jU AUH||9 literal 0 HcmV?d00001 diff --git a/data/images/button/HorizontalCenter.png b/data/images/button/HorizontalCenter.png new file mode 100644 index 0000000000000000000000000000000000000000..6d030500694aaa0db0ec0fa9dc8bebd05732e1ce GIT binary patch literal 385 zcmV-{0e=38P)6X9 z;Ay1xYo+#$snVaHq@<*&rMT3mr>n5Avb40h#Kg(r;o;)q;^*h*=;-L`>gwz3>+J08 z?d|RE?(XpL@bU5S^78WY^Yiuf_4fAm_xJbs`1tzz`uqF){r&y^{{H{}|86)w`Tzg` z2Xsc3Db)Moca7s f6w&z1;dyRf6A%%6A;rij00000NkvXXu0mjfH2Bh> literal 0 HcmV?d00001 diff --git a/data/images/button/HorizontalDistrib.png b/data/images/button/HorizontalDistrib.png new file mode 100644 index 0000000000000000000000000000000000000000..22d7c2368a2a472dfa8758b71c26bf720e4adb33 GIT binary patch literal 566 zcmV-60?GY}P)TCq{xiXkqYvqpWFiH(6D{~}@J_tJHMy_Xx5Ww~4>eaTh>)ygI|#d?w6ack8YDwR5FwT4GZrLSH-UqZ1^ z#KP*1Tl!K&p-_gn4`i|*=2VQM*QTJ9Vq>EWqG?&b>SAhvqto0Kr3qcn1%eR+Oh08n zuLZ|(An!>krTW!h9J)^dr-^pk!rEFU5Gcx!!GQ5>*tQKt5llRu3`%mx6ao&zFtEJ5 zIurALUWmy9zl}e8Z(Boi?4aV~` z&g=s4(Cu~vqk^QfzX?OefOhyX?sye~=QPmG1+3aUe(>`Hc*Kp<4A2<6^gRZYb z+y?@=4>R&B&+@kt<807*qoM6N<$ Eg2hS%y#N3J literal 0 HcmV?d00001 diff --git a/data/images/button/HorizontalLeft.png b/data/images/button/HorizontalLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..91d9c5e58b76379770c9b75d65f817f45bea74ed GIT binary patch literal 382 zcmV-^0fGLBP)skraPT8|@g#ZiF@f?jg7QC#^FWI8O_KCZlk{7g z^Cp1u(GtYxx~cD;^N}w=H}?==<4d~>+9?6?CkCB?e6aG z@9*#M@bK~R@$&NW^Yiod_4W4l_V@Sq`1ttw`T6_%`~3X;{r&y^{{H{}|2o)ul>h($ z2XsskraPT8|@g#ZiF@f?jg7QC#^FWI8O_KCZlk{7g z^Cp1u(GtYxx~cD;^N}w=H}?==<4d~>+9?6?CkCB?e6aG z@9*#M@bK~R@$&NW^Yiod_4W4l_V@Sq`1ttw`T6_%`~3X;{r&y^{{H{}|2o)ul>h($ z2Xs#sVhqXt7v~H& zGcn)ec{*^-<_K?Ah|3jBY00~$>FayWa5^K=S}QSpdG#m~9FBaRh$c%u( bKhOICKrIuErMLiQ00000NkvXXu0mjfD|yW( literal 0 HcmV?d00001 diff --git a/data/images/button/HorizontalSpace.png b/data/images/button/HorizontalSpace.png new file mode 100644 index 0000000000000000000000000000000000000000..404c74fae15d1bbcf96673f5d9089e1fd7f0c08b GIT binary patch literal 706 zcmV;z0zLhSP)OmZRY0Q zGOE??p5MI#K78-U5Px>ZX6K0Ppqp2@Z>{}!6#T0VjzI66SsIc|3HGs`z;5$I3glT z1n{ZVi$9yWJF40Mk_|e67r$xub3f3(bnK>l=Fm0axtZMoxzRl#+W?Xc_k`p!bGwgc z4&M+jq5tW^u-Mo+BG~|vjluZ$J%z$s*VhlP8;YyhhC<<;i`4aKe*Q%rasA)!9skmN z`mSgLPTi5Tm#^}AE|-VwQXZCaE0813W|s|=OwQtDat_E!ol4EYv&5X*F(~R5pyRq& zO|y$irBVTo<3JQe5Ck3;78U_bPDVAuFrZW_nVWPCO~%!>0a3F6Z39AeI>suRrhzQW zm;;810SX4E zOn~)u3K$JWRA<*VpuS6}4nGdl2?)fTfI1Ke(<_(&+SuIOgpG|22!&&+^9pYRoCNS_ zJVF7c6h#3^k{}df07W8k+ErDBj#VrcVJecS0hm{a5r9qs1VkYW^Au1jmEkg(SxBeZ zKhBU>V8Q9(^lboF4Kp(e)F>LA0c2`07*qoM6N<$f|OB1lmGw# literal 0 HcmV?d00001 diff --git a/data/images/button/HorizontalSpin.png b/data/images/button/HorizontalSpin.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e0ecfefbdd821e55f30f3bca31192be1a52784 GIT binary patch literal 711 zcmV;&0yzDNP)XCI0Gfd_9KRE$OxB~~N?L4-6&f{_Tuf`z`eElX*N zH5y5LCRhs9cG&_&Y)i}9$9B8z3}v_F(QzbM1HlkH_)F&So5}Yxzx)dROR3e`Lu$3| zqttg;7d|LQ7K;A?&^6!_lKS@Hd4C%@-?*pn;Gm&sU_d{!6=*T}0Tod6tum?bY z#cqGiU?42r-8akytd0oRpr5_AYgnr_@52)~DQbEfa8ElMjPim|ubpuzwBG%@0K|El z&CZ0w;Rptnr29LA-k_LW&GnB3<8^B9g};VXD!WXlGmd#YR0IG3w*t4-bP#3)fes`= zZ9o04?!}C32cXxR&RDIZKY5-{K?nf`80qb1-}GWK1y?v8W|X8adi^Q84l9%P~{58r=dxU0`RmTh5z7&<;OVq+4C1eZ)ExmYa5*le%j zCtE>rc{50Lz7bJc$fL}PnDvKZtYToAsqXbu`~i$cvUhUQ6=d!c%A?!NU0a1w}jlTR?LxPxtc%h8xQ;5NUvS4V)GGQ_eGk6aS-b0k4Xb_9V zMF^MqsVTp_;sGo@)(DW%nM3XX5H9t&8R=lag|}~z8;zDik|gB>LC6q7+ZJ5e3X98{ t!HvxZztwh6$f~+s^6DpaVU@}y{{`}Ly2e=-eD?qV002ovPDHLkV1g(BNMry2 literal 0 HcmV?d00001 diff --git a/data/images/button/HorizontalSpinOff.png b/data/images/button/HorizontalSpinOff.png new file mode 100644 index 0000000000000000000000000000000000000000..f142557d7a3e9e5f72d364c46042cb3fa1a0df05 GIT binary patch literal 712 zcmV;(0yq7MP)I1S;}eb04Vo^QmQDWd~++n#>R#~#8-n|k|an(FE=+g@7%`Vh3mQ& z0N?-sN~O|WDdp@x0b5&J8UW1szJFsJ7XxLB!FbO3-Tin{%NX=zDJPfrg403}JHMn^|=rPSgj z!1ng`!*n|R*z-I_L{cdgJC36_n@tZ9e;yqjiBu{jGMS8#&*znCnvYgiR;q&r3%>6& z+qNysvK-5@a-QcIV`F1yN~!mIdwa0FybSyM`>EmK;i2*Iaied+!!YzY=O3!os@d&! zv+Z^p&(F^d(=^iu2M2nRB(q8>FNz{KJw1h5t%mu0J~}==F4gPx&kO+O3xxvLG)*~< zLz9z}(CKvG@bC~2@hRv0i*4JW>pCXCI0Gfd_9KRE$OxB~~N?L4-6&f{_Tuf`z`eElX*N zH5y5LCRhs9cG&_&Y)i}9$9B8z3}v_F(QzbM1HlkH_)F&So5}Yxzx)dROR3e`Lu$3| zqttg;7d|LQ7K;A?&^6!_lKS@Hd4C%@-?*pn;Gm&sU_d{!6=*T}0Tod6tum?bY z#cqGiU?42r-8akytd0oRpr5_AYgnr_@52)~DQbEfa8ElMjPim|ubpuzwBG%@0K|El z&CZ0w;Rptnr29LA-k_LW&GnB3<8^B9g};VXD!WXlGmd#YR0IG3w*t4-bP#3)fes`= zZ9o04?!}C32cXxR&RDIZKY5-{K?nf`80qb1-}GWK1y?v8W|X8adi^Q84l9%P~{58r=dxU0`RmTh5z7&<;OVq+4C1eZ)ExmYa5*le%j zCtE>rc{50Lz7bJc$fL}PnDvKZtYToAsqXbu`~i$cvUhUQ6=d!c%A?!NU0a1w}jlTR?LxPxtc%h8xQ;5NUvS4V)GGQ_eGk6aS-b0k4Xb_9V zMF^MqsVTp_;sGo@)(DW%nM3XX5H9t&8R=lag|}~z8;zDik|gB>LC6q7+ZJ5e3X98{ t!HvxZztwh6$f~+s^6DpaVU@}y{{`}Ly2e=-eD?qV002ovPDHLkV1g(BNMry2 literal 0 HcmV?d00001 diff --git a/data/images/button/Image.png b/data/images/button/Image.png new file mode 100644 index 0000000000000000000000000000000000000000..da6119273fdf512729bdd12181ba658a0abea21a GIT binary patch literal 628 zcmV-)0*n2LP)#TKzy#EDq3QN)N1YPEWaB1z{jBeT&$NkdYt)?(E}a!8eeQOTw;%8D~@ zJDxHXep4Y8_M4bnM=-k{Qq*u~z943ype8L2YgQD8;}fwc2XIB7M5|9^e0T>>`^vd$ z>%`pt2uo`Kz2jbJLF%3q3ifXzIZjLE;(Xle?Ht{GgtptK81kkw)Y*@@ZGL8dAT!_sW(Rutn~=U^oMGK0E)u8%ci?Fz^*22=fl}YFll6hRx zPoURJX^S6SwU6w&iFMjA zFkvFMyO@}}tVE2ALZp;(o~lNekx8?ueZP%Eop{KMz>v8-vLEzZOt*^WGevcFBjtID1&B-V<AQ6BJ&VFjsOg?9ZO}``3I%Ll?Qk zJ$onEZ+M-wXX~0PbFNjzF8C^!ucJA;Ht>IbabW7n?%CmYMAoGmMm)Opl?@c>p00i_ I>zopr08jN1u>b%7 literal 0 HcmV?d00001 diff --git a/data/images/button/Landscape.png b/data/images/button/Landscape.png new file mode 100644 index 0000000000000000000000000000000000000000..c395ab9c68ce288998dbdee2ce22e0fd4cb725ef GIT binary patch literal 551 zcmV+?0@(eDP)|w<4>|#tIorYj000McNliru-~$^ADI$kkDuMt202y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00EClL_t(I%f*tzBMPnx zf+VAoh?;xPX%oaWLgL03-raNF!+ANd-!c#CkM+~n?cKo`etiE%b$D>-!rAdv0Q>Ia z7X8Cxy9zjTuotuap4qwQt%vnTZt}{dB0-f(bmaeWB|5TT+1&cV^o^S=HkaD7&l&?3 z6?%f(VV~l>M?@)$0)RX?TC3}r)N}6qMHc28YgVNs__S+0gviX)1pP;cn4FrXXtzla zs>cV3F%YwW%QCEp5L|b_=gkjnthHEQdCRryGo+;a{8e!H$T3hwfl7V=o2by22QZy| z&p&<1<%z2-H(#@|yh!cjsZK`0sE~-1WWka7zwYbJdA0C@JVs8R8K*J#gq}+5V6xy4 zDY3f4326eiZr|a==orQrmfke+E=7`mY8JtYmUwTwI;f4-00D)O>d2quPENGMB7(Q+ p-u_qwYgD*<@BW_VU7E1}`V9d!hmc$QkFx*(002ovPDHLkV1o61`waj9 literal 0 HcmV?d00001 diff --git a/data/images/button/Linguist.png b/data/images/button/Linguist.png new file mode 100644 index 0000000000000000000000000000000000000000..8a2085fa2395fc8fd9f00c82448d766066fad7e8 GIT binary patch literal 1050 zcmV+#1m*jQP)=1E)zu zK~y-)Rnu)ulm!65@&EHYcN{Nw$idz5dU=q@`)Mw5{pV&)5L+B7r6Wd=^C0`lSkN5vs{@^Z%kK5!gxc=z$bNKYSz&84WDuJHT%O`Hg3;}{v{rJi3XDapYZlT^3*#p12f{>q=z)JLz? z=YIMMk0z!tH8{>x`5x{KOfxTN(3`Y0W*6btg%h8Wz$f zi8nA6O@%LDkxa}!5b0W6f^RO!l)Qi{L?nPfFf4+Fgm~sh$NAcoNtjlkP3`ATXRusl zik2)YtsbMIMP5~i-8D^&MkGURW4WM1@D9;&U&5T2O_(%BTCxGBQ^kZlL2K6#stu`b zMY7}(aqKLv&D+@6S4U2lpAU`D6}5!&a0`Dt@bIi!z;LskwFSHIEZESDMloRWASo%@ zEx&bNipf(aF%f4Zc%hrhEG<*6VHQIp>7Pi!@xVoaK7q)d3vB3Y2IG`-Ut z605BZ2P5Z2?Cx1c2M6f14O5yCM(qy{iu`uw9Cjv#?lLpk$3L?Y&q(d$i!NlJ7rzj) zPZR{fzPscF>+Jn8e4%0FM$K{NN!=ReZg zc+4pbI-OX|W-52?ve_;+W_yHC%my8E?s1Z$q7hr$Xv!)?R#e0d^^hX?kd4OSrR!Fj zFLug`%3?Niy!snndw)mHyPiqw)$6y)TvLAZUN2HmApmsBix{LC0{%s&V~j@v(VDl< z9z3c%bmaF(j{s2oe6cw``H@;(tWL=c*C+;+R$2a7h+@$jY7;Z^%mAsW`TuwS0><)( U5KQ5L2LJ#707*qoM6N<$f*rN|1ONa4 literal 0 HcmV?d00001 diff --git a/data/images/button/LinguistOff.png b/data/images/button/LinguistOff.png new file mode 100644 index 0000000000000000000000000000000000000000..98e2802983bac09d78e629fa0d96d620006e1b3f GIT binary patch literal 994 zcmV<810DQ{P)3db*WaXNRou(IM}w0WmzN=iI?P_o}N!-Ssv-==s?pn zT3cH&37osf4C!?|BqO>6Rqv|4F%Aj;5w2EXxAGG)+pS z5{X2DYPCuv5}{ZuQZARdy1GKdVzI{X@Gz>X(%#-qqtU?Y^^(nIIX^$gaUAmbJhp9f zdU{HGdpnAv5RFEWBni2*v-90lDiw{zVhAC~<#MR1imvNOlEmHJ9XB^OBoYZUO=Ej| zo1>#60)YUfQVDr%Z0!E^_4P=-UdJ>|48uTGRr>q;IXykaaU9Oh&Tt%uOeRBfb2EOw zAHy)Xy}kWL%+Jq%Erg(0ERxIRNT<^b3=FWhw}&jt6pKYPO(UPrqw6|8pASV*FijKS zGtt-A_k3bvV$CoN00Myk$H&LS<8fZRc!93#SeAuh807PLE-o(6G!0$XpKWYxTuSGc zmvnb^vADQ+luD%@RI62@(J19|nQ%Bvp-{ka99-9>QmGIO1`$G}ySux)e*ar-NC4k| z`4#Ux{*bx3xwXT?!`VO}K)qfk6bhm1I;Lsj^?ET3gJ3ZD%=1E)zu zK~y-)Rnu)ulm!65@&EHYcN{Nw$idz5dU=q@`)Mw5{pV&)5L+B7r6Wd=^C0`lSkN5vs{@^Z%kK5!gxc=z$bNKYSz&84WDuJHT%O`Hg3;}{v{rJi3XDapYZlT^3*#p12f{>q=z)JLz? z=YIMMk0z!tH8{>x`5x{KOfxTN(3`Y0W*6btg%h8Wz$f zi8nA6O@%LDkxa}!5b0W6f^RO!l)Qi{L?nPfFf4+Fgm~sh$NAcoNtjlkP3`ATXRusl zik2)YtsbMIMP5~i-8D^&MkGURW4WM1@D9;&U&5T2O_(%BTCxGBQ^kZlL2K6#stu`b zMY7}(aqKLv&D+@6S4U2lpAU`D6}5!&a0`Dt@bIi!z;LskwFSHIEZESDMloRWASo%@ zEx&bNipf(aF%f4Zc%hrhEG<*6VHQIp>7Pi!@xVoaK7q)d3vB3Y2IG`-Ut z605BZ2P5Z2?Cx1c2M6f14O5yCM(qy{iu`uw9Cjv#?lLpk$3L?Y&q(d$i!NlJ7rzj) zPZR{fzPscF>+Jn8e4%0FM$K{NN!=ReZg zc+4pbI-OX|W-52?ve_;+W_yHC%my8E?s1Z$q7hr$Xv!)?R#e0d^^hX?kd4OSrR!Fj zFLug`%3?Niy!snndw)mHyPiqw)$6y)TvLAZUN2HmApmsBix{LC0{%s&V~j@v(VDl< z9z3c%bmaF(j{s2oe6cw``H@;(tWL=c*C+;+R$2a7h+@$jY7;Z^%mAsW`TuwS0><)( U5KQ5L2LJ#707*qoM6N<$f*rN|1ONa4 literal 0 HcmV?d00001 diff --git a/data/images/button/LocalizedOff.png b/data/images/button/LocalizedOff.png new file mode 100644 index 0000000000000000000000000000000000000000..9f3aa16cdbf428a1acc4d7ac2f0e0720357507da GIT binary patch literal 758 zcmVA2~T5aPI&B0)t6J zK~y-)rIWo*8%-F6&;0GotXWvc*s(ui9Lpf&0$EhFj(%gYI}d{yzwUaS#MwwbtK_ zG0RaDEgNGxLWqyeW^*};qE4RYjisff>Dk%Y2%<|2j?7GYbd2q ztJNTcfVCF)_xBJ&;19c&bk6lS=U|M1bB>LT4P;pcAq4U~hm;cDdlW?hDJ2+VAR=(i zK|~)o5%rTKfe-?#tE&(~AWc&+#<01$iP30;ot+&RW1y6RQVR3=9E>qI=Xw%Acd=NY zUaupHB5=+z91bC+#B4T$loHKm6V5r*YBf0L@c8)nS3;jN#@0CJNRkBBT2xhqMxz0x z6tXPCXf(obIDF;s^z?+HC_qGDjIDEHOsusA0NmZ(AKk! zthES&peDmGTzYeZ43qj^m;w4tgO7+I6gjx5CV*`-z$`ISvu!J?>)-0 z1ON~b&d<+reSM8qtA#Afu(!8|larI5mzS460F=fUZLKw77;0&ZxofxEbs`EFW6~H? zNhyD%Y5H<|dpm!4c(^`1JpA_Z^75UCW@TBTEXz6()rqKJySuyp6-Dumh~lcMV&_~@ omgRJ@Sj?u=Y4Wc#vA5p&7s6g4GTwJqDF6Tf07*qoM6N<$g3xnQ`2YX_ literal 0 HcmV?d00001 diff --git a/data/images/button/LocalizedOn.png b/data/images/button/LocalizedOn.png new file mode 100644 index 0000000000000000000000000000000000000000..77ea8079e0f2a9b7d9cb202a61c292db787d7de2 GIT binary patch literal 816 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 Eg02!$h5!Hn literal 0 HcmV?d00001 diff --git a/data/images/button/NewLightPlot.png b/data/images/button/NewLightPlot.png new file mode 100644 index 0000000000000000000000000000000000000000..36ce14064409beca38e66d8604eea3776a8eba0e GIT binary patch literal 774 zcmV+h1Nr=kP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iO7u z77sVqOJ?N&0013yMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HRA^-&M@dak?_?!z0007A zNklvqpLJ+uAc_vp?jEVHoLc3@y)pn;LGU|^zPEP|2$fd7CR zFDpB+1_~P($bx9P8wi3e7>JI}IA2c~=k@D%s|?=j9t8_7_j0K^oO9|3!1CYsFNko* z%?~?(JB~5c*rD56vH9+cm2PYBak}w2lQ6ZSI{R1~-DeuxA0pMj-E(KpAMJK}jLXUm zEPu{0`&UOh|1a9;?c!+YXzY9eKP5V|ESCQf0m`yG+G%%L-&mteC1yFAUeU-df)4?s z^Xmox+pqS|q%!-h$luz-YU0OpS4l&K_H32BF5Z@^31OYaf927=Dg3Jzqi7Zm(V z1aLEONU0>H60w{h8Q}H#VF@B91Av(UP^MAEA{pjNbM`dZ;5dj(rraSL9Ajp#KN5*k zVJx8nFj7jC)}XL?Jj??D(Sv(jL_n0F?Oh1#VIpA+?_koTuz7O-9Ypc8Nj6v@8!R9a z0fjL2QY1W!-%1b>Bm{ye&Jl9&vv2M;+k+EKcP{}>_Ii=E-OD~>>wjuU&uf56f~pcE zfPfG&7RY^;_|pTDZy`YM#1)=Adg|@g?mvfmpFh+dSPc+SRbqXsP9u#YB>ja^=rhtj zH2ZwoYWdUumR958hxy(b1!7Q4LT$QGT@h#kUj4{ElELa`%K#=41PDQqx>3fflNxC3 zkqBmv*R1271VL55Ypk+Tv6-YtD$~7QeFTUa-*0Yh9P9NCeB1iN_-$`*5u>gShsAIL zP!z@0zn1UcD~jUhy~K?p>`b0GF*e_&R9?Gr{iXwa1sxY9i6+BW?*IS*07*qoM6N<$ Eg02!$h5!Hn literal 0 HcmV?d00001 diff --git a/data/images/button/NoFilter.png b/data/images/button/NoFilter.png new file mode 100644 index 0000000000000000000000000000000000000000..5196d433399591e4bdc6073f8330e903d420b0fa GIT binary patch literal 714 zcmV;*0yX`KP)ypVO?pVPv2K+D9LWRcsZQs`+Odr^PczR0AyM`TbVrn z2p?KocSb8K=Yu?-dR|oYbF{4NSJ-6w7_F+BXS0j}iMqP(M+U?4c+FuX8yoT2=fjuw zcBH&s#Hy979eghKma^am0n0hI&k0^k7ibtugPW zfN84M&(hDGLE`i&bc@1buS(Sv)ajg0^!hz9OYTyv)`dxr2Ql{vFfU`$0U`S4aA`57 zE}Tbaj`+kr#w}LT@T@UD>m)m9?dd(6BBxzT~VqS(1!GocvsD1*dbzqn_j>V#qz9;k=gvrCajM;RM9?;=vQ}b(~JOOcn5KC*x&`P&FTY w-(`+VHOul!i_y4pB`Yh%w8$2h>A$b@Z`Lt11j{z4y#N3J07*qoM6N<$f}?p$y8r+H literal 0 HcmV?d00001 diff --git a/data/images/button/NomouseOff.png b/data/images/button/NomouseOff.png new file mode 100644 index 0000000000000000000000000000000000000000..87db6bfb39fd25fdc3412a61dc8de5ce0c2dd2b0 GIT binary patch literal 861 zcmV-j1ETziP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00PBHL_t(I%XQOFNF#R`#_{iO z{$!HO1VxiJDrD2foRm!<6$=GHig+$w#Y-=qq|nmqI8fTd9yijvw3l5Lkv)tEwcyD^ z#d`1$N~0#J+DQ(ZY>*_K$!{+zDZ72|&*yo0;T2L!`X`Y{e7Ur=^sVpvpAHNR=x1kV z|D2wl{(g9P_$zQGrSu)g83vvMr=lMaLd1*3;%^fZ6Hi;M7TIi;ot>TD%*>2ZE|-Ii zjg3F*_4;Bim-_)wfvVEqzOb;cIzK=Ew9#lVH8sWh`Z})bDwbtYC=}GWxw+3qM@L`X zhXI}|eeGg)cJ>P)1j%HQ!NEalwHl^ra&vRT-Q69Y=c%z+EC~d_H@0n;`ZtJ|8bSy`Hk;+-iJ-~6CC%`AYUJqT@86O`fnM_hHmoW?jRaFUx z!!(;sG)>d~1Kfw7>AGHOG#dWoE<{iw z;>N+i2riVOBaBEbT@(~M|9}g-N@+E;NjuFXWyV~uczc`szO$$;vC}#G=W`woM{r;| zIy!!un3$NX*XuvDw6vJZ%gcW)EiL`AxVZQXSO)3}qQC=SNgT}Qa=EuXJw1J{>ypW2 zSXfw)!^6W`u~-adW@g@wM5pVzw70h-gdmg2kk98y1Obuj*U^;1ibjw80$BkY0F8iODwRG9A=uj5 z!gXDK9v|n{_&6QeEJ{kG5d1kcrLOEY;2^NGy1H8RJdaAHLb+V#?>BGw@$qAnlqgMO z<Z1Kq7%{+s6L_;c)nql#*^K ziQT=szqvX!MR0UCqmL zw+NGC8ymls%jILey}ieqo0~(P=OLw3`F!5XX0tPMb8{DfulxV6;3-f8?g&`lgLPd$ u9gD?Ay1KfOD=RDS9mn|{_yp7&5C1QE#S{Ha$c0@10000T1&IN>LhQF)UK;PY2}YM`7yy%_`snBg{|aI#c`cX3a90)BNT(8R{rO)D_V)I1 ze0+?*1^L+pLUWNg_WUZ?D@PezjRkyx*=*j~+}uJsy@$iYLu4`;oSd9crk?x65c|?t zD2_TR!NgVt97ZL&ySrht*|4~{jP>#T1wnK(P`Z$V#k5!kS+644Pm|BrgT9_8ibTw1LbH8nLPUT1xy z(a728kQHJ}DOkvT4WV8G78Vu|3WX33hq=67FFYO(iR!FR3}=H~4G2Cf1A8q$hUsA| zBuT>D+#Hh0Boc`PW@cs(kH<+=lSjW1!`UHsJ;JUku!vWKaj_YKARsR<@4rOspsN<+ zZWUNmybH0t3J#MJDwPVgwe=Vqn?NKILoAj=JU&aA_f1WD&a^g`L9kRH;<*j>F4(|7 zj7dQatJRAB{z0s)e1s%zVS9TQySra0^L}(RL=0W#!*Bg{V8CzDBiY!HaB%P)namI5 s2KA}bHxQFM^Tz@?@?|McQGV{sPh>m2>23B>@c;k-07*qoM6N<$g3g>p*#H0l literal 0 HcmV?d00001 diff --git a/data/images/button/Paste.png b/data/images/button/Paste.png new file mode 100644 index 0000000000000000000000000000000000000000..3f71b1c789383aacdc29032a8b6b0f680921b91c GIT binary patch literal 598 zcmV-c0;&CpP)#*HAYs8O5+gQ(y_1t9?!YKJ^SHk}aYBoCplC5M zoyYe6x#y<6iZ&r19F(H!JAa+Jf-{26W)rnqjjK+l19t7L;9nSx##bJXXDt?sQLR=H zi9{GY5e|nLS`&#x@Or&-tJUhi5a{*#ZYUIDq*5t}*=&ZvU_izFCo~!jg25oeHrqTW zfXQS+sZ>HN7DGH9zo<&30);{Wolb`f0WDG;x-S+BESF2PS}mm0X|BrUGItG$L_&gh zY<;8>3Wcu)6pxJtVmuyWI-PQ&Xf%pvU~q(Fp9N~Qniota6Fvn+C+_P%@Uz)OyYmab zyIu79ee~J+tT&s#0;N((GvEdD`J59Z5(yB^b{pMZ4};+lqlX8K**%l#^q4>l}dpa4u^cQ)oO(e8-2Uo9tCo_90r2{ z#GyNFqUjT3I{YNv?RMDj_h1<2C{U?X&}y}O0uoS%OeOO9Ir)4Z1a&82y02Ye{ z1SO*AcX#(F6bg8J+~NAo^>^+t@!|G%WwY7fbUHbS-EQZ8X}G7*bLMh6xLmGp>@kbr kKX^$)V(Zgcy*Se zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00S6FL_t(I%XN}#NK*k6$NzVC zzM3#cgwE?+g~La#QhV6L9#&c)MoxP{m6{G-u3<0~>w&S#J9{ytHjOnV~Wo129tCjx5Y&KJFPWJ05!BQCjMyr?g^CV1-pk%3pWjz4=8HVv~5a9vf zj+j04Xw%NB6353*`%_(qAuA_r_3-e-8fHP_;`gCpp(;Tb86jr;6M#vRM8aTV!aG`B zb6%p=YPDTmT?ki(ga7Ut(>=JAS6onf7v;I;y%&$QQtt9fqmTXm{r&w8A|jK?MAz!; zCv)O*xx}+)&n%HhgWP)ZvRJVuasD(mB?kafv_*X^R>s}Fee)Q{agp8K-8ffOg(yuF z+S*!SG`@sFp6ZZ_O-c8u|U@Q$vKx1Pg9_saY^4Kt$+P=QNdictB)tYHF%IaA3a*0Db{)41?W* STwgK(0000$7c`2`!xga!wNg@r|W*k(ldW@Kb!hP!2EW@cq&6&2(c7Z;Z$1yxj3 zG}hI&IIy>bo3uG|w?|t~@Z_G5Xge{WNj=N33Q7U9V6Q7LZsH+ja~rTfmDzxevi+s~iBeEatMPw(9TPoUa8o-U3d6^zLWd-t(2&YacyZk+k-;=5am|0h6tT#v6h| zHW(IcHWX#a3Ml&c@!Ey3(5u%zd@Brmlq67OU|9Sq;QGbD&jm)tg#t+e+c)rY6@&>2 z1{Qwf-exYIJi%bwC;l&!5)&tW`TX^+RYQm%GMpMKR v(h?HHCYVimlFoGN^odg(Dv3OY7#PkUmpH2U@8u7mKNvh+{an^LB{Ts5CM2vJ literal 0 HcmV?d00001 diff --git a/data/images/button/Portrait.png b/data/images/button/Portrait.png new file mode 100644 index 0000000000000000000000000000000000000000..2680326142da63db77caed0ca9cafff849d077bf GIT binary patch literal 683 zcmV;c0#yBpP)|w<4>|#tIorYj000McNliru-~$^AC>bwH^5*~m02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00I+9L_t(I%Z-vvNK{c6hM)6y z$2-?_!k-NL*;-@};jU;A?aYOXLezpuc-enxYS5qa#O!5Pr+j z0N;PDar#^zNs{jP-x$r@^aIYEI@@(;eBv9hf6J2q&O3@pLSYvbla%~sOwY+4nsY7t zZrvSU_1=q00`DAQpwV*Y4g#Yo7V_jR3||@+ON)yg16N1h14r~$f{f9~njv_U(%?M^ zL31w0(9jT4N{rT|Y0_0qU>$*x2&xe>4IvX_qjVlT%*D&s=)W+C_aKEJ2n;jRk9k>{ zfwKf!5tx!PMzgu`hox69c(X81n90x>W!cl1C5l3_VFR^8v?*FiR9Qh_n0YeA;Faq{ zQN-J&d5qQ-Un_~TX%zsTmZp%lvKj-=?DRwOf7fVj-OJSEecE%`ir>-{0={|&F108n zajwK$`TU9Q<0rUr^EO&*2KsyX`D2x~_6~s3+th9YI7^@u!k4Js$GUm+^cis+1F-P= z9dR7v%f3+x=l%m2BdZ+&X;L6C3V>oEk5-~|(||Fu7T}%3C{@~d9c7flJGVW7Lu-lm zvMzwu61N>-ZOZcUN36AV0hChM@)`xe?A&v|^5rW+h`IpYdk!7wr0;yM_y@eQ*?Jhp RbrS#p002ovPDHLkV1lviEVKXs literal 0 HcmV?d00001 diff --git a/data/images/button/Print.png b/data/images/button/Print.png new file mode 100644 index 0000000000000000000000000000000000000000..5977b3dba72d9c062f36c53af5a47f519f653868 GIT binary patch literal 566 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47&!ubLR|m<{|^*_gN}|4I2*_S zawkrlxO(;KRjXD3*;}@3S+Zowx^?TeZ{H5&u3Wj2ot>SNlhe=7FFZUvGBPqMDk?fU zIw2t;DJdx>B_%B_D=)9Gq@<+0yu7lqvZ|`8y}cb`=H$tfr%s(ZbLPxBbLPyOw-9LT z%9X3vtXZ>m?dJ9C*KgXiaoe^%KwI|gIkn(W2M!!Kc<|uSqeoAjI(7Q= z`7>wET)uq$+O?ZEZrr|e=l;EW5ANN2`0(MAMwE%KaKh8YF{I*F?75p#jR6v^5AW*~cTTYM5;U58=5xTLhyUImsoOHQ z;{3JpEewS_4AgJbJiHKoqnr6-)$NY>9sgT@oUB>!)8KJK#gADVZoD-AyzD*8&S#Ac z3gPUVpH}UTJNILrOv{SIDG_FKy_QC9%aI6NptJgj!Oa-G(*~)h7d2elGHuZn*Ny8m zbbS{$+Pqu-D#b>oPyJQN`bh$_y-%`Cn_^|y@!_Y>!n<$#f89+|JMYf$P-^wzpG9^i pmK#FNzN=UL+7nh#@Y~Q_O1`^8h3zsIgDNPxJzf1=);T3K0RTr+DVYEO literal 0 HcmV?d00001 diff --git a/data/images/button/Remove.png b/data/images/button/Remove.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6199aada673025719def20303939cf9e2e51fe GIT binary patch literal 730 zcmV<00ww*4P)$M0(AOOPHK6!fLgi3W5NZ zW#RF7V6)la^?DHwhmlI9PRTpon&!ap;nDNyqLjs(aU;6ByJ0e!K+`l_E*C5o3ub3$ zF+V>Kv)Qb@>2x|g(HoG>D>w%zio&R4NrHii$uW0ET73@jRm1 z{(A&SfM$3klKb%anI>>W17>Dssszy1D3a;9Tn^NZ5B@+9UnmNjTidX%tiocoV`=## zJd_V}?-!cDjk6H9jYi{2C=}9GP!t6|AFTmiY6sg+7uGi%SXte`_~aCx4Gw!r&z+8c z)U~dzuDg1Jp?6?lVEo0)SMLUgpPL@{^-bJ=@X*lNdFvke=Vp7uZzG1!@Bjb+ M07*qoM6N<$f)tri9RL6T literal 0 HcmV?d00001 diff --git a/data/images/button/RemoveZone.png b/data/images/button/RemoveZone.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6199aada673025719def20303939cf9e2e51fe GIT binary patch literal 730 zcmV<00ww*4P)$M0(AOOPHK6!fLgi3W5NZ zW#RF7V6)la^?DHwhmlI9PRTpon&!ap;nDNyqLjs(aU;6ByJ0e!K+`l_E*C5o3ub3$ zF+V>Kv)Qb@>2x|g(HoG>D>w%zio&R4NrHii$uW0ET73@jRm1 z{(A&SfM$3klKb%anI>>W17>Dssszy1D3a;9Tn^NZ5B@+9UnmNjTidX%tiocoV`=## zJd_V}?-!cDjk6H9jYi{2C=}9GP!t6|AFTmiY6sg+7uGi%SXte`_~aCx4Gw!r&z+8c z)U~dzuDg1Jp?6?lVEo0)SMLUgpPL@{^-bJ=@X*lNdFvke=Vp7uZzG1!@Bjb+ M07*qoM6N<$f)tri9RL6T literal 0 HcmV?d00001 diff --git a/data/images/button/Restart.png b/data/images/button/Restart.png new file mode 100644 index 0000000000000000000000000000000000000000..19a1665baf0a3d62cc5f72801c02ee31d832ef03 GIT binary patch literal 802 zcmV+-1Ks?IP)DEsaU~GX3SIsdMei7bh)})pLEh`3!Xi^UM4W+LIZr$zxaOz7mw|A28X|&gK2(h zZfSoyEkX7Ar7SOshe$kJ@wtDv=f<5!bjpH@N4L9nR{6W;bYuBbX#H42w#$q|FGoYkR7TQxAVVC~AgvlcDbQ{K}v zz)cqHtE#WH+tMnPL>x$^K&cL@=%%l{d{cK)X)1KPX3v;gl4lwwgdERi@@M$WfsL{? zP3)eLTi{~|fOrH9%Ru@V9LpV0qngA+;sn5whQ6+jjvrr!>i^mx(;;26*la$T(-0mV zM6EV|5;_BFz$$UjH5GQd1)8dx zW$%Zmk#1*hIjlV+=?;EPa9k=7g`$b#;sWMW{kp}nRc!428shS@9j29Ip{OZjyKMj{ zG9;eH^E^zu)Bdikvh?_!mu@q(n3*v73Z?HG|HJ$KtcH9J10IQl4im gAunrc0{^W1Pl-aB)o!U!^iJPX2-yDW~-xn5#GXPG7Kd$?Hm6gjYc)yd@*-0`VkWB4D zPVXW`(u8GM=XhY*yM%z>k7`53k-*<;O%?T47tKx&ZKVgLtKr47=U|=V0q-Rbo<4p8 zMb+>snbmpC$XUFRbBLvK(6qliOC2%bUUcKpgNNw$G<1|M6hbH0?x<+CRWw=(YK;zR zbh0dU#DMFf3-|p29M;>Y^f_c|EtIP*{61>pXQhEsxz4lH5d#Zz^Vqy|7vFwW5q_7_ z*?KF3+m`WiJBj`8WuB#u7?^X;;`Ys3`1JJ$a$oxFmyl)lO8B^UfXwFuWC_bsM+`U} z4s5L7I1%cIf$7O9tX=b+2zA83G8q($MHCAK6bOCh^7%Y$W(&+?MxLXN z7#O$NvF!13@pv4bMK}M6iA16wzdTlp1*>!usUrr=MiX4~3tTiB#mv++tR^#Jv6#*h zT^^PVY~Ew17%+~GmM83XIH?%k3S-=A!-zDDNF<^&>zLu+Z>+6jY38cp(0A*NQkvw&_a$Lu$m@vk*3xIX&WJJ6XQlUEcgrBC1tN&fL)0V1rtr! zvxW4ss@8?^(x&w&$T^y~GvkHGi6$(b%$J!rZ@woP0^kFn5_is0Z`8 z3!Sr}tqtw1t?247!es1J2=jP4K7mrHghHW!VzG#Fxy)d9e9dk_s5=wV!npo;gassV z1gTUC!*)BO3kyi6(>J(XF7E8Va&G*&#A14&4)i`kB9XvDn+=h07|CSv2GQYwg*s1p xxwF22Udl#;L5;`bh(@D`#bTiIH9F_Ug8%AAiZha4I`jYl002ovPDHLkV1k2i4vPQ) literal 0 HcmV?d00001 diff --git a/data/images/button/Search.png b/data/images/button/Search.png new file mode 100644 index 0000000000000000000000000000000000000000..ee69755db6e180770d4ae6d0a4ef253fdf6831b4 GIT binary patch literal 559 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl47?}cmLR|m<{|^))4=^$^0yVO* zuyApKED{h95EK;T=H}+(;}a4Rl9ra1mzM{s5f&B}6%`c|6B8E~mynPEip$8zC@U+g zsHmu^DyyrjYiMX_YisN1=;-R|8W|ax7#W&r$eC%#n`x<-nVDH=$Xn{D+8AiKIyrbK zGI)7;`TF|$X>$7c`2`!xga!wNg@r|W*k(ldW@Kb!hP!2EW@cq&6&2(c7Z;Z$1yxj3 zG}hI&IIy>bo3uG|w?|t~@Z_G5Xge{WNj=N33Q7U9V6Q7LZsH+ja~rTfmDzxevi+s~iBeEatMPw(9TPoUa8o-U3d6^zLWd-t(2&YacyZk+k-;=5am|0h6tT#v6h| zHW(IcHWX#a3Ml&c@!Ey3(5u%zd@Brmlq67OU|9Sq;QGbD&jm)tg#t+e+c)rY6@&>2 z1{Qwf-exYIJi%bwC;l&!5)&tW`TX^+RYQm%GMpMKR v(h?HHCYVimlFoGN^odg(Dv3OY7#PkUmpH2U@8u7mKNvh+{an^LB{Ts5CM2vJ literal 0 HcmV?d00001 diff --git a/data/images/button/SelectAll.png b/data/images/button/SelectAll.png new file mode 100644 index 0000000000000000000000000000000000000000..a97255e7f2d62baf188a24efcacf77276e386f18 GIT binary patch literal 614 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 literal 0 HcmV?d00001 diff --git a/data/images/button/TurnLeft.png b/data/images/button/TurnLeft.png new file mode 100644 index 0000000000000000000000000000000000000000..facad55991648ac293c1fe0499fce25df973dd0c GIT binary patch literal 648 zcmV;30(bq1P)V6SF9xM)JXRXn0qIhArs$weZCZbrs(M#?Q2 zW^_o)bX=#8e78Fxd@>qzI39aEA%R^xv1~=eRyUkJB7jOSglR#*S38(lK$Mt-yG}8U zY(&IZHK!sES7kr9gKo2#hreDrv12{BS~#CWD|sOhS57gEY(&H}8goJ=h)6AgQZk-r zKfGT&ty?&xJ|}QLD0pm2x^7Lnb56k|5MER=qEW8wARJD+Qz)v$iLjl zz}(Nr;Lyb4(8%G^%HrJC=#OU>tpET3J#(cSyTHK1!^F?f($mz{)z{hS>+${l{r&NIL@@vW0If+xK~#7F zW559f3{;T0Z1UDgE=YVqQ@`9iJ5?!WC|}qnCMzo^J8Xi3NBWpS_?)5&Vhjut4gucgU_QHu zl7^9_q>*o^hYnbPM^Q66(A70CI>Jc?EWoJj7Mqftof7M&54D!p*fA&}A;{5~7v^?W iIb912T{%{){ssVB_a0D-)dbZ50000V6SF9xM)JXRXn0qIhArs$weZCZbrs(M#?Q2 zW^`Pqk9@asN6b4Rd@>qzI39aEA%R^xv1~=eRyUkJB7jOSglR#*S38(lK$Mt-yG}8U zA`n+>M8#M&r)594gKo2#hreDrv12{BS~#CW8wARJD+Qz)v$iLjl zz}(Nr;Lyb4(8%G^%HrJC=rKey-2eapJ#+${l{r%&2D^&mh0If+xK~#7F zW55Mebp=obT#~Hi+2A~8DK)#iTt8DmD4$!)JuW>bD=WrE6wGJQ_D|2q%*;rSvf={^ zNP8ux2HU44dYW)Sbf|~LhZxv~Tgoy)jWF|xbQV`J7UJiC3YdEbI7l!sh$)D0LIiX? zLVXP-B@H!{gxSFYGENcEfv&EB(VB`p5Nq|_VpFoSQ)1ne86kRjjU0m#5`r9!cwtUw imD97Z(34}u>TLjZM;=c#q?daD0000w5Wx^^P;Z< z|9A@dJ}~4lNDyTJLjwaNZxruow@$Y|CiN!&Sz}rMv!}EF=C0+v0g@wV0BaEI48KW! zf83|I|JQHV|Ib#)_Mf4Y;XiL9-*3)Fo^^N)VDMu|^zHHe6TKw*zw=Dz|GJZP|1&i( z{b%T6_|MSK@LzPQ_#dWvwsNcnFnBN+IW{={EZAJ|KYVHUf4jMM|Fvdm{b!f})I1l6 zmjdw;Ans%S&Ctx^0@DW%G@}Bex6KEd|7CB?{vWh7=)cu`tN*I=RUw+!0r74i-o@~r zbq(u3v1wAD8QK{n5eE1&w0gC8{daA3{cqK3^VKKZGXFWJasB66!uy|p zgW!MREu#O$R!jU>U!wV+xsPo&+yEe8WC&p3BndM>Vq_R(CIA5^XsGGoKP&(M002ov JPDHLkV1jwc#ccop literal 0 HcmV?d00001 diff --git a/data/images/button/Validate.png b/data/images/button/Validate.png new file mode 100644 index 0000000000000000000000000000000000000000..909a2f0d792d204c4d5abaf437cc7c38f87d9858 GIT binary patch literal 575 zcmV-F0>J%=P)`uymQ#!p8kUzWO+MDwJ-S@5_Y2Ap)qaCVU4UKc)nNG zU)C4QDjRy0N4SVNe6G}}1w&aaNTq5*9Anh#4LlUx5Y0+f)KaBEBinRbW5)NQCXVGt ztiswArM7*n|HkPYju z8;P>cz#Z8=w8*maf>n(u=qgbox+(b~=_S{UJdt&3w?q#ltt5ypsJ)U!Nv9=vIqv=` z!72`x-oM8Q49gTQ30`PKbk=cTI{`$s4yOfgFkJ@P3zF;#Ry3kY=Vy5^Dj7*vWUYzL zN;b=Qljy2sWnAPKW{a-*omHO0GQNmrbb4n5uVo9OW#1(8+M<-7`#egenDsqLORfDxu8Q$=)(Eo@Bqdcmzf&hUzY zcCz#{0000YdQ@0+Q*UN;cVTj6004N}D=#nC%goCzPEIUH)ypqR2LLwM23QbN%3J^d N002ovPDHLkV1lr~|1SUl literal 0 HcmV?d00001 diff --git a/data/images/button/VerticalBottom.png b/data/images/button/VerticalBottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ba85191dd35472d20029d9f06aa68f40fa70a6 GIT binary patch literal 412 zcmV;N0b~A&P)n^-SEwoMO*W{x~ znl{Pbc>#m=RbmGo8F-W5{|(FrfZVFrUxcn#Q7WlWRUM7S8(OUoLB0P1FijKvzJYGH zi+1~y0IUU!Mk5Rc1A++2fV>eiU^1Dc$Z$A>=Xnf(VHk46eyVpmo$mu#-?A*&wv8x? z0Du7`XCwA{JqA$fVzJ1I0pszQMoi21eFo4^VHl=8*L9ZwJ|Y9+IL2%?gX1_5LNI`2 zN+E#044_55AP6Xk0o2UKr2BFpU3BKx6tdi#C`^Z_*J`x{Qm@xx+qN8_X0=)sP^na! z0~llAoMSi~0)PzA&}=pZLe=SXkW5Yh4W?;gFc?f~+ViZPuot(meenT$&KCW*e#&rg zox|ppfgPWTy&DThcQ!87FPuF%um1uYUXDXw4qGm;>jL|?7LM<2C@yeLz-$KnejmMF z502x&vaGobMxznB-7XBnpgiOuQb06BFH>N%0R5;>*|ghjIWQiNX%l?~9n~)Y0Da|O z$Eb11MdCjJT0#p5Sn4WgGH*zyGvb-ezApzvqj7II98vuKpb`v*6-|3oT);a4R;q8W W5GiqsqoqOs0000IZce5yZWf)~t#lGwM9@iyZL#8J;#7-+qZLz{n4~6YFX1lNoIxBU zX|)|390m7ahZ=M5-6b#gCzsEci{24PB_Dizzjw#)Lbz|b!t8Gda}5ZyocA=0g$XW19ryan7G_?XxSMEWVbj9#2jr8$aduG) z9N$Y@=)>i-fiC0PLP;tNOmKRhsN;_a#+S(6z(}GfVHooHqHi!6HC8W1XpIv+4Lv1q zd;>*MkAqvptv^W_T>T!Rkf+M5c-@)(@bvhl`w&m|&2>f4}Wip#iGWpI~Ur#!* pSe(}xM-*j8RX;e@>KFT{-ain**BH(6P=5db002ovPDHLkV1fm14#WTe literal 0 HcmV?d00001 diff --git a/data/images/button/VerticalSpace.png b/data/images/button/VerticalSpace.png new file mode 100644 index 0000000000000000000000000000000000000000..20cede1534570ce54f70bda03ab3d86bf40fba66 GIT binary patch literal 601 zcmV-f0;c_mP)FhHC>H`2xqnjEI zNRlMf>ops&;y!$AlANM`{IL$|M<>;jE+Cr~L1mgIbX~V$8dOzAHtPXGQI!uy)NjG4 z0_vfNobCe%_?LKIbN~nMZeK-ULfH)5l6!#(dD9nRwUpO{r3LWZ9MW@f%um0>@&b#u zMX@!IcTD=SFRbo45SAEb=&EE6T~okZF~D5b?IF(Wz1had9fHFT+c@#Wz_}M4TuPX@ zzSzP2g4JPmtLRF5cYuiK0BD4k)pvX^!VQ9v+XSHp1fx@JI|AvCVEJh8O8H;nGKXx6 z#UeWmZZ-x!HIGuBNBQ+DeBF5O&paltQrjPvyb^ieUxlK`Fbo5P5Y%dQtgU@?yD&Vi zd>S5?VbAA*646bx!m=zo-fFdID_uY+s>KgQl<)Syo*%(`a?DqvUatqsvgn)XX=t4( z%m#eesV=!leRN6(^&^ke3;%6lx4UHnO_a+N;OUI}GkL#qm*bYevK(e+Sj1wp_Bw@3 nMnJLn2J7n^?yaAGs`>mkVG3LRA11wJ{vWMK~_DIy3Wi*=8FJ$*^(x z{Q9mPNK#3nRwY<077NiR%eh?N0FK)iWXP1og5H+n?b{JBJL`!DISIC)8JI7?lI(_M z7zWTZ4czYUz;1uNV6|eT$%HBp1Uaw`z_PKdc{&fZpYkx5%Vk)W1(8SuY(OZA0$#5V zjE_$QO{U?1*^G7}$jieOz}i|o)sAPN>2n^+ZW0y?2K0J!*kG_Q8rArP?dM-SbbI5w7)#$FBB@r>{H~n=h-x)r${> zhVwl_@@%(oXjg4K_dsYqqZHsxbrPQH;^B!-9`?V>LLV(;S_gfg%`gYrhkk%A^E^-v z{{)Y)0O%uv;Q5=y%?Q|+eCc=x50BhWz>_i{o-V=I8ZX3oQB0+?sr-5&o6M}Io&Mh| z{X{URwugE&ICZoFaD@^n*RP`NK!ED^Sty9I1sk&)Kehk>0)ReL`>B_wG3kf(g+mp6x8(Ip6ooCzu%<8ylYi>@)ML zY&ILYv(*@W-=7g}p=jCtAZcGq0j)z<`0PfvBVT1{xJkxHd>tJP9O1R{bl z2F#2w4B`8JTPa0Ch_{_iXVrCGWdlH8U!Mtr0K>z>D3{A!&-2jh^+*UIt}ZdN0C4Ma z%{z`W4B(kyW~{HTTL%XRtIV7n85wy}E|(vqQmGRFI6FII0PsAIXJ=;_0E7_y%fige z%zb9QLqv~>=mj%BC!!@HdbG5(^zC05ZLRfFW_~?5I0&T_h-fvPPGfX*^mJuqMM)_k zrG#Z!kW#|7ZP>OA$8kPnGMS$iwzs#bSS*StiqPNRkGZ)ybUK~TvMk{^j&vNyisP8- z^?GY>Z|_1%`Hq?2!=VPPSdnwlD9=DUeRg6s8qqtR&4@$vC_yWKuB#wG3LRA11wJ{vWMK~_DIy3Wi*=8FJ$*^(x z{Q9mPNK#3nRwY<077NiR%eh?N0FK)iWXP1og5H+n?b{JBJL`!DISIC)8JI7?lI(_M z7zWTZ4czYUz;1uNV6|eT$%HBp1Uaw`z_PKdc{&fZpYkx5%Vk)W1(8SuY(OZA0$#5V zjE_$QO{U?1*^G7}$jieOz}i|o)sAPN>2n^+ZW0y?2K0J!*kG_Q8rArP?dM-SbbI5w7)#$FBB@r>{H~n=h-x)r${> zhVwl_@@%(oXjg4K_dsYqqZHsxbrPQH;^B!-9`?V>LLV(;S_gfg%`gYrhkk%A^E^-v z{{)Y)0O%uv;Q5=y%?Q|+eCc=x50BhWz>_i{o-V=I8ZX3oQB0+?sr-5&o6M}Io&Mh| z{X{URwugE&ICZoFaD@^n*RP`NK!ED^Sty99i2vilqWSOtD_4B{Z`k|-~cqhZ}OM_v2(uu&tCfNe|T6?y+v@O~D40adU$o!Qbv Q!T7O6Qv&H=#Kaw{(%?5)n;{ogkuhv~(c z+o||7ycT%^+e;BBtj9X^=jip&z}CV{DH(eTiO6HfB;G(Z`vpqLI29VmufEp1zcv9k z7(k+*@Ds9$Xe$)Z+*!U>-~J$AJ`J|afuq&`*4#^e4+T&ZbxCK|GPt$_LrqIr zyaGD4#GDE6yuo?Y;`)YIg8asNIN);FpItZ=kWl}os+!N0c1MwA-BqOq@GSkOePmdU z;|YYgQ?A>;F%pnvbYE5R!0g#z+peDj{?bsv+%#>+f1VryY~o%laV=Lz7%YF$e;->H z+hBC84spDzCqTI-J(6StbYw!$A^|cs)U`k}FdS;=;R%q=axbcNdC-zI=$cl5j4ZgG z(ni3G${^41Q$zn?dV2Xv^xft}p;${)_75s7*A$DDrb3rRg|0LNh839~h3ev5Jaun= de)safyGS{q002ovPDHLkV1m>K0xSRk literal 0 HcmV?d00001 diff --git a/data/images/button/VisitorOff.png b/data/images/button/VisitorOff.png new file mode 100644 index 0000000000000000000000000000000000000000..532abe7d0f88c765fb830184afa0225d685e2d17 GIT binary patch literal 622 zcmV-!0+IcRP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00GuXL_t(I%Z-vhs~SNR#m~;T zvwtG%3gRn-Aj!HU-@ziKt%1N}u}hOCq)C%+VI8or3u%(ZI`GO=f~1f|5QN~1B6-5D zS$Ae`iadqntuLN(=FIP&d+!)Tgi{(0hnJl5>t3(-<&?)L0t^O&r+J=#-R*YeYPAa6 zwzpdAhfx&W{Oe^Wz#p~NWdPuu!}C0^R4RQgGM0)CEz4>IK>*9L002aU&1Ta&3osgu z9MAJ^IOkQ(cO2)tVHhwBH1IF0;M1& literal 0 HcmV?d00001 diff --git a/data/images/button/VisitorOn.png b/data/images/button/VisitorOn.png new file mode 100644 index 0000000000000000000000000000000000000000..20d71033b585fab32301c13e795a37c81f629a9d GIT binary patch literal 539 zcmV+$0_6RPP)7O6Qv&H=#Kaw{(%?5)n;{ogkuhv~(c z+o||7ycT%^+e;BBtj9X^=jip&z}CV{DH(eTiO6HfB;G(Z`vpqLI29VmufEp1zcv9k z7(k+*@Ds9$Xe$)Z+*!U>-~J$AJ`J|afuq&`*4#^e4+T&ZbxCK|GPt$_LrqIr zyaGD4#GDE6yuo?Y;`)YIg8asNIN);FpItZ=kWl}os+!N0c1MwA-BqOq@GSkOePmdU z;|YYgQ?A>;F%pnvbYE5R!0g#z+peDj{?bsv+%#>+f1VryY~o%laV=Lz7%YF$e;->H z+hBC84spDzCqTI-J(6StbYw!$A^|cs)U`k}FdS;=;R%q=axbcNdC-zI=$cl5j4ZgG z(ni3G${^41Q$zn?dV2Xv^xft}p;${)_75s7*A$DDrb3rRg|0LNh839~h3ev5Jaun= de)safyGS{q002ovPDHLkV1m>K0xSRk literal 0 HcmV?d00001 diff --git a/data/images/button/Wizard.png b/data/images/button/Wizard.png new file mode 100644 index 0000000000000000000000000000000000000000..403714afe5803fd67067f7b3dea4077667eb8de5 GIT binary patch literal 661 zcmV;G0&4w+?*Gu zPM!J_8XC%ctB*nQ)p7=-)AJbuzn){*_Wz~wxA#xQ4dDj-=wxoYpUc#>#EUzvqpihc z^XAQN<>lo&uU@_SKQ1mV3)$Hq@cXXf%b!mL>KOiSVPJeSkN?!S>4N>Cwz~4qN=#2Z zX%1*=X=w?muC5N1mzV$H;^MLq*?^x%I50?0PtOQwk(UTJ+g@#LtuG!^e$4svNJD~pS+bpf0@2YhFzG;*A{kB2z-{%skf3Fh6eoSx`{?n5k@Bk5o2#gXi z4_oA7-nAR{y`QcewJ?I)#Rv$bq@)5kI5;+GYis`jDv`ip044?k79f^VP*89X5D;hr zS+1z4SpC1jfrYRE2tzo4SQY4kXeK76r>3T+H(wVS)W0q^yhzvpgdsefoSarHEG(OV z2K}GlCRYSBVD{Twb3URBfC3RVHnu__{g0cQdjh5x2phr(#M(e_+~winc@1PUVH!Z# v5N05r3B(|dKWPRa3{eK+7jklP*)TBxo?|EnW$m`~00000NkvXXu0mjfoXS1q literal 0 HcmV?d00001 diff --git a/data/images/button/Yoda.png b/data/images/button/Yoda.png new file mode 100644 index 0000000000000000000000000000000000000000..8311d4b828d6998581735286c2e762986c78a36b GIT binary patch literal 800 zcmV+*1K<3KP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00M|fL_t(I%Z1TfNK*kA2k`$n z+u3$DckwJQrFjiE%M^sr?1C8;GrAChnmq&|1W}f6K1b0*K~(e*)vFOyr1&5yg*+1oSuXsTYgXf?|b<1eS8E`)WV{7U*D^)yDBB>4VguknlIn( zMVeA<25-zwCRq3EvBTEW@wJr)BEM`A__!JnTie^O+RP^2a{OpD=@@a%B?ClqbFHIE z$%p*kc9D9mOZxNsD0 ztsOUx*jgW_I)O}XynZj0V>wGIAl$Mo4k|l_u2tn9Der^`dUT9jUwM8$|pFj|?nhINOWqB0<8KNM7QYzu` zEWuh_fimkJ-QGhdg#UhlAaU_vy$zF--ytRvAW0HFUl6SS4-8BmemUPPrUl0Aud^gs zJgHVI@UCYNG))7L!3IOf$}2^{=LKyr@ACY#ccug+K6)iPrvM)JG^Sj0kR&;(qSP^? zQIEcU2WEcEK?VUi9yycp3r41JT;y4NbbLWWLos&lE_|t0D!B29i7q1}BC^3pmX?;Q eY8zS>l7WBcR0$nHn!I@c0000e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00Lo2L_t(I%Z1UuOB-Pr2k`HE zdE@2ohM0IKScM=8B29@)A!v|JElug*5=on_n?r|e{sW~;7mJ(iU*J|1Bu;in4dDWn zO!2f*MJ zxm*s0LZM&l>+8@o4OdrJsMqVTZF{FsC?p>RG);R&Ddl3Z7($^CY}-aEl|nciM!(-L zJ_^XPyxnfMaeaLaK@b1{ilP7jbX~{M(b4Ky;Q07B%@|vqnVCT_7=-J(;CUXRD1tEt zQ4}Ev!uzp+<2augW8irn{eB;W5Olj;)M_!$jg5_;V>ifTGNR)+tA=4)(yE{xyPNG_^{v8YK@9!&~=e?wqqEsq@=XvO r7Z(@Xlu|g3qc@w)#OCJapJCu1Gb#!XQ&ZP@00000NkvXXu0mjf(tl5L literal 0 HcmV?d00001 diff --git a/data/images/button/YodaOn.png b/data/images/button/YodaOn.png new file mode 100644 index 0000000000000000000000000000000000000000..8311d4b828d6998581735286c2e762986c78a36b GIT binary patch literal 800 zcmV+*1K<3KP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00M|fL_t(I%Z1TfNK*kA2k`$n z+u3$DckwJQrFjiE%M^sr?1C8;GrAChnmq&|1W}f6K1b0*K~(e*)vFOyr1&5yg*+1oSuXsTYgXf?|b<1eS8E`)WV{7U*D^)yDBB>4VguknlIn( zMVeA<25-zwCRq3EvBTEW@wJr)BEM`A__!JnTie^O+RP^2a{OpD=@@a%B?ClqbFHIE z$%p*kc9D9mOZxNsD0 ztsOUx*jgW_I)O}XynZj0V>wGIAl$Mo4k|l_u2tn9Der^`dUT9jUwM8$|pFj|?nhINOWqB0<8KNM7QYzu` zEWuh_fimkJ-QGhdg#UhlAaU_vy$zF--ytRvAW0HFUl6SS4-8BmemUPPrUl0Aud^gs zJgHVI@UCYNG))7L!3IOf$}2^{=LKyr@ACY#ccug+K6)iPrvM)JG^Sj0kR&;(qSP^? zQIEcU2WEcEK?VUi9yycp3r41JT;y4NbbLWWLos&lE_|t0D!B29i7q1}BC^3pmX?;Q eY8zS>l7WBcR0$nHn!I@c0000V7q-Q27UD9B#o>FdgVpF>vAko`x}?0%q-WQl7;iF1B#Zfaf$gL6@8Vo7R> zLV0FMhJw4NZ$Nk>pEyvFmZytj2*>s0J!LNs)w7u#IC0=WgW`#jx0hH&8ndVC85kUt hIAJ2ZiA#ckq4=J_^*w9afz~oGc)I$ztaD0e0suFxI+_3g literal 0 HcmV?d00001 diff --git a/data/images/button/distribute-horizontal-x.png b/data/images/button/distribute-horizontal-x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd98af144f73ed0d1eba1a545b7eefab2bf9b0dd GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Wq?nJ>;M1%IWyj8E&aA(!{%eh zP6_9|pEGCSqD9MBu3Wov@EeCwUtT1e^n%oywRV|Laa|u?%3S`S~HGCQv5% zi1}{W>g$SOx7I{F6c)A=HhZ6_cD{$zZllE72Yx(jw=Qu0vzYtgCuaZb)tYyJW-@rX L`njxgN@xNAImKWS literal 0 HcmV?d00001 diff --git a/data/images/button/distribute-vertical-y.png b/data/images/button/distribute-vertical-y.png new file mode 100644 index 0000000000000000000000000000000000000000..e85450a3253d97c7e48aca1622fcd0ca7e83aa2d GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}a)3{W>;M1%IWykZtpCxz?Z=ia z+m0VUed5F!pom8G$HvV+=FVL-Z{DJnE7z=Cxpw{f%^Nmsg{V1x{0vapOeA+faN1|~aC&ceXLLczKj4BMOL^lVwOLqgoAA>7Z= z(J?Npi(T!25(A?SPX&Xpy74Ry_FY0{CU(l!%6x}29+fcc|I99am}>>dXa-MLKbLh* G2~7a10(!mx literal 0 HcmV?d00001 diff --git a/data/images/button/handler.png b/data/images/button/handler.png new file mode 100644 index 0000000000000000000000000000000000000000..187cf758b1bd959a7a637d3e3ff895518c510d0b GIT binary patch literal 271 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqY)RhkE^E1Rfc`4pa3pb$riYeb22er|4RUJ1juGt>41#X3A) z977~7r=H))+n6Z9^5FS@)%OfstgO>EG`g)6;q1;3y{4eWX28m|mC?n7>+b5GB0HYw z?Ytvet`KB@N$ryDCFM(ILHw^gYGVSD`#9(AaLWpxcr7FGr8Kw6Y7c#%!rz)a8&-8^ z{&4?0(KgLKu~qO~Xk_(K#@#}FhA!bdZ}ye+Ole*2AzQ&bFH6nG&VTM%pqm&xUHx3v IIVCg!0E;kJJpcdz literal 0 HcmV?d00001 diff --git a/data/server/furniture/000-0052.lpt b/data/server/furniture/000-0052.lpt new file mode 100644 index 0000000..bb643f2 --- /dev/null +++ b/data/server/furniture/000-0052.lpt @@ -0,0 +1,9 @@ + + + + + + + +

+ diff --git a/data/texts/AboutAdecWatt.html b/data/texts/AboutAdecWatt.html new file mode 100644 index 0000000..eaf6678 --- /dev/null +++ b/data/texts/AboutAdecWatt.html @@ -0,0 +1,31 @@ + + + + + A propos de AdecWatt + + + +

AdecWatt V1.3 (version du 4/2/2018)

+
+ + diff --git a/data/texts/AdecWattLicence.html b/data/texts/AdecWattLicence.html new file mode 100644 index 0000000..e563d27 --- /dev/null +++ b/data/texts/AdecWattLicence.html @@ -0,0 +1,44 @@ + + + + + CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL + + + +

Avertissement

+
+

Comme toute oeuvre, la reproduction, même partielle de ce logiciel est protégé par le droit d'auteur. En particulier, en dehors d'une autorisation explicite écrite, son utilisation dans le cadre d'une réalisation lucrative est une fraude. Ce logiciel n'est pas destiné à être vendu (y compris de manière hypocrite en infligeant des bandeaux publicitaires). +

+

+ Ce logiciel est sous contrat de licence de logiciel libre CeCILL1. + Cette mention est indissociable du logiciel. + +

    +
  • Ce logiciel est libre. Vous n'avez pas à payer pour l'utiliser. Des bénévoles de l'ADEC56 l'on développé.
  • +
  • Ce logiciel n'est pas gratuit. Vous ne serez donc pas vendu à une propagande commerciale pour financer son utilisation. Votre utilisation ne sera pas non plus tracée en vue d'une manipulation politique.
  • +
+ +

+
+ + + diff --git a/data/texts/ManualAdecWatt.html b/data/texts/ManualAdecWatt.html new file mode 100644 index 0000000..67d814e --- /dev/null +++ b/data/texts/ManualAdecWatt.html @@ -0,0 +1,106 @@ + + + + + Manuel d'utilisation + + + + +

Manuel d'utilisation

+

+ Ce logiciel sert à réaliser des plans de feu. + + Ce manuel est en cours de rédaction. +

+ +

1. Première mise en route

+

+ Vous devez mettre à jour le logiciel avec la commande : . +

+ +

2. Modification de salle de spectacle

+

+ Ce mode n'est pas terminé (changement de taille, de plan de fond, ...). + + Sur la partie gauche, sélectionnez l'onglet "Immobilier", puis double-cliquez sur la salle que vous voulez modifier. + Elle apparaît sur la partie droite. + + Choisissez dans l'onglet mobilier des éléments à ajouter. +

+ +

3. Ajout de mobilier

+

+ Sur la partie gauche, sélectionnez l'onglet "Mobilier", puis faire glisser le mobilier choisi dans la salle ou le plan de feu (partie droite). + + Par la suite on peu : +

    +
  • ajuster la position en cliquant (clique gauche) sur l'objet et en le glissant.
  • +
  • ajuster l'orientation en appuyant sur "Ctrl" et en cliquant là où l'objet doit pointer.
  • +
+

+ +

4. Modification d'échelle

+

+ Placer la sourie sur la salle ou le plan de feu (partie droite) et appuyer sur la touche "Ctrl". + La molette de la sourie permet : +

    +
  • agrandir (molette vers l'avant).
  • +
  • réduire (molette vers l'arrière).
  • +
+

+ +

5. Déplacement dans la vue

+

+ Placer la sourie sur la salle ou le plan de feu (partie droite). + La molette de la sourie permet : +

    +
  • de monter (vers l'avant) ou décendre (ver l'arrière).
  • +
  • et en appuyant sur la touche "Maj", d'aller à gauche (vers l'avant) ou à droite (ver l'arrière).
  • +
+

+ +

6. Modification de plan de feu

+

+ Sur la partie gauche, sélectionnez l'onglet "Immobilier", puis double-cliquez sur la salle que vous voulez modifier. + Elle apparaît sur la partie droite. + + On peut comme pour une salle : +

    +
  • ajouter du mobilier
  • +
  • changer le rapport d'échelle
  • +
  • déplacer la vue
  • +
+ + On peut également changer de salle en choisissant une salle (onglet "Immobilier" en partie gauche) sur le plan de feu. +

+ +

7. Fermeture des vues

+

+ Pour fermer une vue, il faut cliquer avec le bouto de droite sur l'onglet pour faire apparaître un menu. + La fermeture d'une vue est indépendante de la sauvegarde. + Un objet non sauvé pourra être rééditer plus tard avant d'être sauver. +

+ +

8. Historique des commandes

+

+ Un historique des commandes permet de gérrer l'annulation et la réexécution des actions indépendament des objets édités. +

+ +



+ + +

Bons plans de feu !!!

+ + diff --git a/soft/JMapViewer.jar b/soft/JMapViewer.jar new file mode 100644 index 0000000000000000000000000000000000000000..7fe9a63748e18fa6546b72fa1d1d8e2fff129595 GIT binary patch literal 140423 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

6rd~`? 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

gY8n z%kjc_7^wF2*n;-4^=*j#tu|so2OVo)E%!EJE{DB#C z-q@zb7fSDom->O+CY2+M`y-`&t=IQ`P~q zB6^FZS@$zj)eby`KF1Wc-Wax$idgOxHs=KJL8U+Spg*P7pMl<&f!?3-&?eLqGLu(Z z*y;{x@y*!w2-W83pHpI||H9@Vlv7$8&l7&O_CUPJWE+$yKP}R|W;}zH$Zd5|VTG3; z(YS~Rw+Iqaae%z|#_sXf&PlI~48Oa^B&(Cy>!}+Ey#tC-d!mCerK-sChv%(xG5k5Q zpL}3C4`h%OS5sUh)jt?$Be+iu%9n2N;?gPp@r)OO9WDt5eBSg$Tg%K7p)7m_CObb< zTC8Gf#9=+osuEUfhkxVQrzy+sa81){O*8U-jtrWgM*ckU#hONNj;t4@Jq-ga3p~KP zv?cR>#dJZgys{jxLUG?;tW0rVy_nt+X_QfyURO=d|1j2nUM_BpFL}9|(OG@DS!=mD zbD6{cTEIdFlSN!QTFRZls6(2SlnC5X!j>@f95I7FJ3mCCGsue zqV>NEOeR^kym!9>Q`E1(g!TW)2KE-VwkD2B))v1B`u|+C`6%w#&C6r(pkoAU;t~C3JS;%O`@kt@Ogu@S;{g5BD2d8s{wVtgw_2Qp! z?Oc65eSE+J%+zIz!CjEvug;cO?$(F1Sf5WJM_U840K52GdzTcP$MBc`X6iSr{p5S- z23tx!8NJ6|sg5dN`SsUwQtkh#TtFDZ1?HfrTT|%ez=7*v_PBN6@eHZ%a_WviCU47S zV{R$;aV|@T<{*nCY}{voE$LW_N0-atSkzTc<*uj#Qb&>Q?I-UFlLn$$$R4rhD5hQMV|3g{OCJ6dnrf*zjj!}vfX3f{ zkTLQ?dxBx1NpIHa@0ACCs28+cL^t_O3Vizl%T551s|9`#y_UcK@LL3t`-)p zaRLtZd?IH)Uq&@+pySlnUcLdK^OTE zEmZjZx(5dbN_(rPhz(+cKO{cxoBE5obF4Ap#mOH1XY!|X^I2*Zc**)Bf96Z-6BeuP zG5W)o%_Akc^;H}GZ+%Je$L^@|_kbMzK7J)802>P@BRZx3c2ES2jDEo<|H(r!k?n*V zpoig3oku^)uc?A@&WGmvTNamwL0L~9jG$637>Tuefbj~z3l-n@7Xi=P?fL9-hcuu$&Q+<~-hfqM%}!B@Cr0#ad4Ta#8*5mHbw%UCC}MgE>(U1O+ba^x>PujEu? z?vZhS`)r2=WPj?g)rC4`N%L$_yv!&{<%D%(EeM-g;tzQ&zrFs1!<3gjV4#k>E6~pt z@ISCW>ULo{=so|JlID9oNP!Cp004mm0D$rTe5e0QON&;6^hPm5{gG=JGbR%PA_N&w z7+8}LgiJ!C5}bzlc#FlUsA2KQRuSbXyBiVa98_v z@o83zMZRb>Z)<+_rmsyU1nEDg-gw@4-FW@DdGB!FZwkQ!w~3Z7&W5a%xmSk(bvD#O}CUPK?NB^W zB5XAf!Yht9jLur+z=fO$XLWwkBI=>C9hzJms8ThMQGZ7JlfznGC{i*kPfz1~85Dpe zHz6O$WWMI3!O+t&Z9EyJ6m?|PZ_}rqG((#31a?zB zX>SbnmBYBp;!9RX>i{!~Go~_FM?xn)i?M1meV`q@W-`L#ebbx*TyVwqwycc82F(R} zIHz8Obx6R{3@tG2y?|DR7~7nHP@pfLU@7q8jP`{WHbtP3co}g=0h1L@I;}U(Af`)$ zu-f}3gY@hAPFT~Cqqt9Uq-c!KUs!MJd5oN8mRVU?+JzEXI z163Lcx5cFs45jx`8j)$!7!kEryraS089w0b3A~vvKLAsVT(c@Vuw~sO)nQ(_u7Q0mMbP3EELOQ z(zoQ`&(cgQAk2|yHfcmq9*&R`XLLS_Klu#m0Vfsf^8Xs}? zs3c5KX+6S=M9g9qRfS@1E*!Q3Y1x1xqb7;6qegnbs6w%X>S)|pC%r)VbX=KRL@qWu zdG310cy<3fL#kLI^r)>wjnPa-ep);_%D6k$tJDD7C*hA4_c=RDWw4)MHZo?d^M{Dm z>B2qJ4ET^1T})GJ>%?wEI8|=|g(x-adX7jcEx!h-oKzZSChS&v{CcF7i4)^oZqt|K zpYpA#Mcc+ncIeH3xh~&$=PC7=@XTY~kYJa7hOJ{`?(8~^EW!Ba%k+lUiz@z^U+mO7 zi8x5KV_-3D(WwIF47(&ZXv~@LorWY5RrPiKWxL>t>R{TFoE%h~9=-O7&cH?LT2BwQIDk^9IP{ zs8$hWenMh3eJ>g1NthQ6&-KTuCjK}+PAXA4#d!kl+7zRhf6P6Nxj72Dt$&HPF4I9P zsW;|7y7~sOhk9(-Zr7}Z+sF~rYoYQ*Ejl?uB~;rFj+M+ejt>~_?a41p!P+;vmn9p< z-7`CiRBn1EE3c4Y+J*+5_2h^gKsd=zPDgt4|{RBBl}`t*>z(a z&GGUD60*}pk&b+IYZE?&y*o|mcxusVIK$MSB25flQc)g}F${zVLxXJ+e%$N89B@l_ z$b69s8S&e@JiF%n4ja+c*cmG)IlvymwlpNSS5fkVXl&HsQAcBP*9x&Gj^{e5k|i3q z@2p&=Fb}Uic7Xvd5Dz088F~T+?X(1bT{UZzj)@*VYO@bZyHDOY?mYMam(YhXW_pv! zSF8QcXh=5)X2Ii2&@ST=3N}cp>8!5^^H1#7zcC zjs-6$c!R`96Cnz^YJ5>+16ry5D9=ZiRI8Pk(mavlFeOvdd6cd6J}PCLN&QhOB1OX?GP*cp&^(EU~-`2KFM z7A^2s?ku)_z8$*+d%cM`p^!ho&V3dEzA>|WlB>A{w{lJ=QWQSj@Ki9Dk6AALPO1CR z1;T_+-n@1e(?J_ok(>)ZhPFtXbn3Gx&4Oqmk{S`GS32S z_W)ZC1Y;6GKg~W~MbSB;I)r?(=wMocV)D4wgx61I^~8adKsgDrvRE;mBbTO+)WwW| z*1UYw{ihTrzvT&+ReJ^<7VD~tt#g}K%!*Mpgg>kq@kIiLyD?dBT(^ux`etF z62aK}f>^);#>LhL|AdIaWfbGqoxH$i63aLPFEDIpYSohk4j8IRvbf+(Z-J&6)f4-n#X_IN z$*cbnw{*{9P%E7dU^?r;;$q}K)D(YYoOVV38zdzP4eQ?$-t#RWFjsjy2E(vugAT+X z!hm{aMDPx+HKx-BeS$xBM)Uf{oJ>@R8*B%l8=>OHto`IOzRZ*th15-UfeY;FE2PPB zJUTo`bB0;T9auk5mubQfk-1FknYtwQ(~9wQ5qq30BGpIRpput0uE1D!!jOxs`-^1v z)Ffdk5fz-qTy0JV2j0=gOhZ&-pxod`Ht+-dfBt1${w^nf%gs?!AOHZ=|Jz9AY~XAn zYv*iXYVn_~q1CDvO4uu?KQx;4R2DYCtQZ`tDcN9=sTMjTgbh-G4FB5xW{)xe;;ckA z^p%h$ zxtejpsJ-NPUALcnPTyp8`hCw>wF2S{TM1yKEyuwX04)GE^&<+2QuC39SVM3e3Z?Z| zVbEH&73^6e5Na>nI>5?-)x$1u@)G*;l^-bWzbpuF2VZdVA{SMcx_GO8`pOQT1g-{K zI2@rfdn*X}A#~o6I83DuO{+0;7amk{=Aeq^AQzkr-Lg1*UKpmV+`{I6%P?@)?rA{* zO{-6jPiwAa1+0Hd9apXKCblYFkxgwHZ{tX5h?OI^lFgg?l3G!)E6JXuQAwwtg+DJC zrB(@ln}@HjRhbM`dzUM6=Qb}Oi*db`>StaA&@-FMYB>|TluC6y{3OyTCNvK#p)|v* zze$jtamag2%5J>Lg7%m%aDZC2CK?xQyk9l3uru+Pn#@2ALRr3N2c>hGncCDp2U+^g zmrQWImtJWH#H4#z&5msxv?Qa>Mw{R=rPDik3}A0z__x*0$J;`EU~8-8sSo`djn1Kh zq)KefW_}5%9IfWL(ooZHYuU0#U967Y{U3zAV|1lq(ghlH(y@JF+qP}nwvCQ$+qT^u z+qP}HlbiWwKFqAU?)`cGowcgodUoxq+S{@OLFD-hSQ1PN!`INVXF|M^8X9(+bP`o~ zJczerwnKP(LKb2A(xfFlkuWRPBtckHKt;i^Z^}gRNCk|5DV_VWUQ?GV(WK3ZP}&K#Kgl$M_r`G!u*oS zbdP^0H8mO=AUXu`TWz0*E83c8n!JpZo7S@uUu67O6Qrn?hc`Z3y{D_yQiiLkRMcV$ z1F7uWye&j;8&jf;dUuQQWkv)CIUJUC)iZJgV-&MJ!X-Fd_%2r(lRfD6;tdbz_AvYi z3nP8-=QGU54>~kkZ7mZh*P77Xm#A#X2z~(g3b~@ssRNm9F-7=b zgmDx$(~VNsK#?m}+VC{<$3_p`jg+IcsG;2sc?`u&0`-#Wr>Y92?4V zpjPjeD#SYNi#-+>s|D!g`zTh6Bk*b}kJSe;;oh;q81vWj%ZDl^kq%z>P(hDrj0x!w zZiN}uD}ojLJ9E-8zU#Jv$Ioh3h;XkzLeXaw<6{qr0VL&iv`z-$2N%Xm?bO@f^cN=+ z5ywz~x>F`f1Y0yzu%hP)T=XW-{Dbc0LTWm}4UWmLZYgaa<2zCvGh>_;lZmRIT9d2G z)T0r+-}t+MDp?UBCS|5aQ&G8NadfDJQ zm4cvd&v~d`<&C+Th!05h3>#EJ?9yyn^*DHfWOC1n@BQxLAsIJ)NR6~PCVqVg9pPqR zvhKZ|3AmD;6yPnXKR^{pdSF^0_1B&VQE7u15YT=W0wJcYA_eb1M!wZu@P?aJ@3@A*8AEt%jadQ zSz!{yl#HYK%Mw3Zj7o(^rn5JZ2vi2-g~<;Ih)wbGgP}Bklh@xR>$@lz9%{v^$Qv$F z)~$VCnu3JehjgHRRNK)8sT~IokEGN&C1(kgyQS%F(fQOkO{4y;eE#r?`1DHeA+L_) z4vkzoSF3KNCFt7v0A-#hm=xOx6uI9ud@-Q=INxh`q^o#=1~&Gf{M1?*^tuW!w_)&G z@p~69z7A8ZTvYx2Yu&)F+LgS-D~EYPptd|WR1X|`NhjA3cS+R4E}eZWUV7i_e$l*PoiSPI2v9~LQ1t&FzNE&L_u14u@7@WWB8ibx3hM`7&>U9IlFTR&sdfknlnZ!nk<~Hteh@lLk&{74)>? zGkf>SG+p*E`@DtBFo$YKZi`^TU*GsC!8Z=%=KPV>eGD|?-709JA_<`JDE%;ooSU%y ztu-O3n$7#BBg^bm9Egt+X4N{-ju0|tZFy#I<$jSEs9JS{zhJDk=JdS=*1@*c4LZFx zpS1hDF@Ld;zC@FVr0j$L(y2einX$gYX?}wJ;T=F?Q5QxV>L%nANfn_vnfw-Rmv;7< zRkakQTZP#Tgk=U&0kxJ*Zl*?K=9c6-y@Fha@8x#%tZ z4cLy+!kJ~U?di?X80?8{$>UFs4cEZ@p~_>mNoNfg8G0?>;E2=xfNH^?NKc%F^n zp!~Qjx*Pay=Ne&dMl1 zED(Qer20Dc+RJB?tUY^A0Dx0LK?wEWGD3O48;iMn<;~v}okb1wgx$LE5ELz`Qh)N` zzH;UUl(Z1{TTzHCK)GW>OWrfFCM#w1BymfV_-Y`L;RcWED=R(6KcEC|suYf(s{MYd zQ_42llyuUOWRquT-ik0T zbkC1vQqmO&60y)*7c{5bTEp}Bsx^@wr^FC)_{D;yE>WpkFIpS!Vyz!vfMftpDplA? z`VR8%fzbraOvHQ#X6rjJ|I6F`S73zfY-|i{|79*7t?T{hYp(&^U6Mz*=%AUVIIcw)f%Cb*Q%~`cB@!}$`P>UPQ{uo@~I*joJB7*4io3|e2 zDwjUFTB!dv2`lYr9-`}regQ=?`{hp?#O(VPJ8GfW_f+l#PB}Oln^AqXKKz{up`~HT z@Uq=|cC;VTu$ZbyNG`_VT)PZKl|%KloCHEOMEii;Z9J?KrcU~_Y-1Q%std6k_Jp-f z2A9@HY+BLXwvqgUzM-&4jwI_UrS(4m{Sm)d-=!<4TCwKe9;)fK+){S&f&%EEcOE)9 zvJH7lJ9C_(tB?$HC}ftIvHHzsMV4Bz;(QpV?t)}#y!tNuBDjgaR!w%-XjKeD{17lUZds{Jb&o* zq~@BB+1A`=GTrDlUV}$XPQ0`+*@45%Bi2javVmHq*nQt_Ec# z(7&Dy6Avu~vx;Zk{&|31=?_{VYP|I$2|P*W+}a3BBqPtX{7`Qk-bg zdR4{R%7%R%(yg#BQL$0B((JPCWP*n~L`-r{dEy~}Q? z5*F;xkzSA6yh)r9Km0Lo>zc#25e=iQP``#HLwB(KEP}B_mWK)f`q+M}?*}b8%%gdk z_M{ejAOkd0TC;r5FdA>Kj$*?N1#jaGhczf5>DpZdO&7&kL>e_FSk3qm>=I>u4g zwxhXXUt?teEt0sF+7V6nXC&s?Eawq-o;DQr^igx)&TQL-cZpQqIp8@0X@n z3xhH>*Ec}?ilU%37yk*vhtKMU`0|%4SN~2S#?c41+p(6swjlTnl|=qSL^e^vA4uuY za;U7s8oFnQGXpaFKfKuUz}4R>f%2n~(7kj)JM6taUMF9t5WJhgv2HhD6TvSgo{^*_ zJNI7nwm3OHx>H{PL4D5{hkeQ~IHSp@ zJnGnFxEEg}qXnF+^y8p_I8*2;h6RxvUBflkJ?2v>&U|`QMfY%`@DaW+fcvW*qskpY zu=MZ3O8U`|v4M)nQ#^ZB*Ha#tAYoZY7~je#cn8cv_XLw)8bd4f4o?>#&zMhDo7?qp zc!|%odn_~#Es+|6Y3UV%k=vFd=VF3}S*eQCNkZ|eB|`Cc^EUCSxrBqQtOF@olG!Ec z9zh1OUKkX7D_=}sbwaGgg_DkI`0*Un396X~>?X(w1^tTRG?Ju|)Z!KipkW`8MgD9} z0Zs=kMekpv8d4V!V827mj3TDru}Tcj{Qms`NXZZtx%w^~@ZZn!_a^lJd71xNGpbeJ zwNQ>xea+kqR$SU>!uDtq$ooJnEdh!OSR|GTwB_Vz^J#FML{S&jjnKe}4@lB;+G`n7 ziE$5>nR8NWme5j2ndW|%+cS7?53Qfj9&2mQ6L5|F4G8O{@7(V`+gaD%*BsXz$6QQ) zug{@)pfA+6KNSMg5kkisJQW9(2+Z9%gMfb1R@#-lm?EIQq=@H08qk@lXvb%3aNJZy z94m9{`P+rwfaoUelAzN4REWI}s+0P~?5#Gi4UKqM0aF`xp@ONKxa)$tUE2d7xai3Q zc};O=BI{qL+(L}gPQ^{?HZ>k)w>CNvw|osb))O zuF7f48O88c&c*>#5vxwZjXX=gkY_cSB!_s`nJazpap2)-u_L!iAFZbaOXevzCaolE z?DzDZlShz@Hifa0#EZVq|4nCLTA;ktIK)qBrOON(X$F!wsxB#DgKNiVH6%j9*;~C6 z$C0won208KO|iw-1S96=%Hiwk0-a|9p-)dcb*3abVYF5$^*j`Hp`m##5hg2DIXqB@ zSlp2JSY*how`oQi?LRtDW{^EP5BXeN;OVX2D(&GKA*eA(u_ zX0J_o9N4|G*+9ujlC2{B-9F5gWzIT|k4O(S+V-j9nyX6~l6FfMz1rf`G;N+P&p!!l zfq?~9cIgnQx#1+=37O7KxKgbwC{~1NhHCJ6QoFL^6uQsUaP%wI)enNQv3rJ-T5sMZ zb?a&jOz}!>G9r~zz(?iI=+5gRfs}I2s@~QFz$&_4HCyN(No5%Z>ckDG8X7H8giXHXU|@k}p{qh_-ihplgspQ(Pazxam;u~+Sa;4UMG1+YpEsP>1pjbdB8BE^v|6VJEbzv0iKc# z=pGuSi%}n1QaUdDi*o3fPEd}a!|$9k1?#<%@pN=VTwjIvL#Bup3&(4xy<;gGPB;+h zOQOlw#V00;_TMHL-YMd8CZZZCQtuj2DjA95r=~_Y`qOT@)>JK7Jh(K~EZiui*(zYE z-Uc0;!V6>0(}9gRsb-tV{5X?o<>P#VNPROe4v&>Ev2HQ3fAzsr^n_~0R9TJ0E{EMs zuiph?cShuB*kku6xqN$G^9+=NW@#iqh!R4}JKpHDF2>qZx3YEEqbN4CAbH-7s|VZUbuu<>vbI{LX}kYC4o}3A*!52d%%lyw0odw(){Hvr(qTPZK)X zK>f;o<@z#5cLHA51`YgC!;G~dEab)RHj|YWD_;tyH4~Z0EJPGT)WB&HD%J0EBE*-C zSy%5pwI$$Y7uO(WP5Ij|Uv@AxNiHpkJ9&Nqs}D0qkVF*V=xb&S2_R(4kEYIdM3gi* zjcuYSI12$(bX}93n2=SRPNRh!;(B^5JeriA-^y~`e&`z%V!2Z17}tqVO%N+LgYgPJ zhVf~0B?-0Z6B%1&8J<3P*!R=gVjSO?0Ne%!c?5BCvvqnW^J_3{f8h-T;H>H^|vaUMxP;NK&_cHxQE5EKJbf7B0sJ^j$k>O zozbJV`s337WK0wY!pxM%_->Pn$4@d$a22f&_`5cl#KIJXh_of;$3<~n^6`U*cl6Ps z2CrX@`-8UagI3-*t*eNba>p*F!kyZB9M5fq*Rb&?*1ekbI<~S2Zt`pCW!1rXjnQjm zfme-Wp^^BG%C|U_igz-AQ*<*abu}VWLxoF}aM$abs6dnnK50*{XfU$1|2-1PaKzBC z%20rRw#R#+ePU0X(BFMdka6G>e#pEl0Mi-9pgBQ=>xN(zzCfIJEeJb7wBuJB=GOs(uJ^3p#hlzf=`e)j%*TDfqVRpY_2!;vib$oZ4O6#=%=} z>eMB?Dr|x82bp*3@(Uji3vLF)%!1|J&JbN|*7me+5)=ndKQ@5F`mjI*Sn6IsubV;N zZEeZv-tF_sqS2sJO3(Bv_h9{$Vk@(B6K#E<2ESF1`Kgo5gfGE0vYH=SOU_axGPyhO zN_WkoUS-aZO2u0y_z@DIn}Y6=?}nbIrJze*V%%q4Ph!v>4SS zj!-#YDM!0R8EX?KRL;63CfUl~(MBi!>W#dpk1@(J73Pufoq2FPfe|;dwB_Ez0YJZi z{~a5kC?fqn_-+gfzYQqbtDkxR#3e1y6s%AVG;D>&bj53^{=puqY$3tui?sX&-U5zTV!CvjMp&gyq8` zODjr~rb`db#%MW66HOYEhB!=!I&jIpJ@2)}{&X0)p^p$#;6@8mlOd~DQW$drd%Lrn zta#8LJ|xoVy(Z>GlI0PU4)#$uzDt1`b5=%lU4@ zNuCzmeZYgwv$z#c?|G~@FBbGTHu!fD#9WG^%UDASH{_6jao)91u~EKr&G{Kzu{+OY zKTDQ0n!K^zn}s5Rlj>Ks*E}@FVE$m-nVHTPpFol|+OGWJIGPh64vCAH|s z5Uw7r!2X#1|ZE!%T~&iWxO`e zFB=D19x)eBGMF4r+$=Bw=SWMoG&i(REd#tQn_N{%pKMUJWfp%bWy00c&<^O3%+X5z z{iek3&*oA*?fGspedwtxe=EzItMY!_e%=Dsc9Ymclc8Nf-x*1i;56Ai>44e3r0CX z0;j-yehVhynlx(6`v4BFGil*MfT9oRLJr2>sa$y&GZFC!CfQfd(Ws7vZh&C z?EFJ6!caX#uSsg?Q}}tjbmJqYyFe7&h?cEY#o(%8%3(sVgDX-{PKkj}I_?xN!^h z5h{lKpu&NoU^waG*-$~Od3%}(ebw+#Qrz@3rrWe$&Vxtou5+<=%#f|Q-*_IjEGfIk zjPNfp5RovKltqXO#Gvbj;#A9t(fFi((FDbfW-{CcC+f@Xs2(%y`gO|z{6SPMxFUpx z7@g`o%SdwKv6~pHm=HY-Sm|-Bs*286z}>3Dc6CI3=$BIO>1Z@Egn0nEG3sW+ zX#txfDW%kFQo_DiWSESZA35P&H`vy_`U(Mf-A$PZ zc!L2~8J~I@Nd~(KnKWmJK8}S%XJa~ki(y8XD6LcAYVn_^!igRvN?&NKUioN3T1DDx zztQlqnp}=%yK}1=)^6hMkBGBoG;n@c$61Eprz!ZJ~KgqOfy zZHhv(MoH6{7KQsTZ3s^v05TX;@J&AR9R0*fNubK~f_EV`OhF18AWg*;^K1H1D_IM? z1sJF*_A&7v0l+h~h3?dN~6ehA!`F4y17tMcECAJM-xeg7}n z`_DemM`c?H@U06%`&vKR(Bz*mS61HwLYgmArfLZ(B1LUu{$ik%_aVPZOhql@YSiGr z7fHu^?u7RkY-VO@Z#;Cn$~THxy{&V?Y%wQmYB$C6oaOZAI?L($@B1IV&mZ2TNb1;aXKD@C$eDfv(Er=_}`MY683zb5-a|_jtcOycjC=bwwbc9UI6e zQvzN<;1A+b=R=`VP^%ywrVepBUF(e104l&VRvMx-N=xT1g|s_vt`l!JZ9VPUgH`BC zHK$#+r|Y6LlZO=ZjM*0cn+07$^r0sn%e} z5fL?7{q5Cmq892TSp#dJ-78p)LUa#>G7XEBQ&%>VLyS_C zs6^w}?JvE#@&nJH6$^2el*lp~WPvk5Z70Nw2 z6{xTpOJLTvC0Qu?E!+Xu=3$0`wpgsU#R0X<-qAF$oGloFLck&gcKf;W(4y%{iK9i% zv=;O?u#F4NKv*sH{S#eKdj91G=&>4MY)b|&85@OF`5;oZ#)+9Bl%mYuRH0aDn2RHVH&Q27q9ceEUJ$g$DL?)!fzvq?X_S`%)utSRFbY@xBfGNgIG9?N~ zn4!JR4xu$}dRdz;mwT@MO@AHi7#G*Tjn%?b^Ng_Wi@qqG^0gEKIaM|iowjh8wCL6# zZR!i8A8KAY6HL}ltNg%gIeU1QA$dw9_J!j*Gp-XI+NkFm5+%9Dw&*zXEsmy}4AdGK z<1`CVJdEPaT5TE_vE4_MVSk-a+DPFei}Ew)Sm2{GS^jf)94%k^B_8 z#%~G9yt={y7e13P-eCzHf^trj9-?^yOChfb7LZ5TPVc2(`ai>JA;0L<;ogPLrZJ?k zg){&V*aRy<9iCxY!zVhCFMXe+O@C&dxu&ppFN%?5Dzi(n+MdHr9(eS!I2P) z!<{PmUIusX`v;Q4o-x4>5p4H9YJ(0)-1R|xu&H>;9F|QL#ri5XPegIFgGDwcnh3|t70I4NFBGsUXf$-EY zhfv+L&8ZOUNV6(pgu*YEEt>lkyvAk3mSOr|b2wco+3WNULy-mr0OI7<$iDi<6|~=e zvSEIZMtjkRx4!W4TZF}$1UZg?1^y=x+&NstN%&qx`S>P@(Es1+#XoCAvf8(H&@$@h zPy%-Yvu@mK6l||)Vl_f=TuJ~=go8BwO2{6+WuDB?oPOj;0%kM}sl@t)^LDE9_I$Sq zGI5eKnax_sd&U*tgWd@T&*pC~qG+_()86BkNiVyr_p7IFFEP503L)1Ms6ffbD{D9xhZbB@w<(T+%)~i%HF&|bUTrhzllw~H3rp`y;TO6 zm9tb3wwO#!Cfon6rhi0%*pMeOO!znDjAL?u5%3rkH>3xq8>$+?cIjdFBprq-jT-E zRC{c)>215ts{g=Ys4BNs>`jO;>U`WtDwZpP9fNhh^wL+oNE@neim%&)YpSL(G(ON) z6s%*i(@@r~ZrEmiY%gHT?0&*YF5PQSTtK_d9nm1=v9GI87N5{Y_0KX6Ccw^-Jw$Tg z5=*MSmNHRXa{b!An@p;T%=ERQ6ggRf z8bRbKl*1y8&&;m7Vw*71a9Y#Xw~OGsIw7lWW3V!=a{oiaNPe%YP>ayC?#~Qh`j8U%ZHtmPs+IeNJ{?IcdX%anfHSDRr2bLw=4uVQOiloT7j@f~gFf z#jfs>E#O#56-TdCHmA;HLmsM0`eC7P_}C`GY_$^D&AhlDVbz8lh;@~akH@8wwR}UV zJ!Ai~#fm*Fav;;~*t`J+6&6f;?gpzX1)vC`ti5ytlS8tpeRnaDA<>V$bll)U*%?rK zA2LlA6H@6eJMjUY5AITbp81jzVQ2LM_q%e}t4;L%7_-4OG0Q`@|M?aamCpQoQJ9#_ zuZkeB8>@lwVkj;Go#o>P-{K7urf-ZMeHWH5MWo*DGL$NH7C!8sUOSePm+TN^#t&RN zix*H`!ar881$(hrpFw>0OKNOCVEuaaD&a0N*{3`wI}EuN`Ir)ANt`M8Y@^gXRmlXH z7@yu>cgrlp;u|2T4N9iex^kZK12>fG#@}gmYboKDIrW+9p+;=Uw=hW7z0fQCqE(s| zduLAsWv++v(8+zPao45iiVQBz_*m3oBZI9in$|n9S#JV3H&kbIXPvXU6(f4Dm1u zzS=!L=^{Pb>CCwbaA{UM@jM=({o`mE5+;wM7@N6{AFnBaOK&{wQ*ZU}P^w}*UwHk- zVXd0+y$s4OP&6ob8vIn{iX%A-2Nn>yt+T8c|R>y#GHIUp+o zzPl@=*gO^AXI9b%i`NBep8?zI1v@|AXWVk0#Y+wI8OYaB#o=vQy1)ol>p@oXlf&9{ z&Y?^Xn$^0EN1(6Ov5iOC&ux|F5ND7WtmhSY4mc+k5Ii$}uW1r; z9yNJ3U&!B)H>sumjjTNo!=zAw5r0>HnF=##2JJgs^!xInx=w?NocKyE->%xjJ=W)p z%a8LDybp5zsNVwDIDzqVDl@J=09f3&xj3r92Qf)(s|S7gw@S;V(@)Ym|vbfKgr*F2+%A%b*<3zi^&B8*s?ndhWzd z%x;o8v6y0{jb>XH_z9xCq#_kbtb&DV4BKWr*#Y!b_ZK|o_09WR6q03mhB6jp>4{_7 zrD2k|8gKIjhLzkMYMecs@?+~P<)ImU=KjI&i}p7i^};Sha{sQeZ3J40_}spEasQ>W zEp+y}zTm=969B-yQW@sZ6IujjBrhB=|Va%-To5! z(~kC+c@_`poRcr|11TG2iv8x48lEV zzp%VtUIwIm=_hnBAMg0W&nv<{zzZOwrEwQZRcv5vqV_0~a;n49$~ zmN{BysQMT&D(FM4-eO}IWGH)ms_?UFvajK|(n1h@nB_nO9W}Sf$upu=o%qbXQpgx6 zjrINdKW1Gt*%=aU-^&gX-;MkK-0dk_*nHpX$$XpNIyu|f{>xt5=6l@%gaN_F#6P)s zEHo@27viV(f9*RM8WIZdn0L|5n2#zZYz`*+je#=U?!e!OVVYqPk#=NGNt=~icgyne zZf^l&7bXj#xxmvdajfY#j+%}S#zcnjul+D0k-v%#D9u9#KgxH?6kg-bf?ywm0TWK` z=);%&(J)#Vqa_B?z_xUo=TtgOSuk`_&dSMwY~JFB{%Ppi>Gd4s%8Q9)mR}m(krVSy z*#Z5Qufl-&W7h}4V#|+gUYatlb1pw3F+4x1i&<3Un3z&kx#E-1=5JFx?X@doH29ey zQ;gYpXqAK^q7)L?g(NjT*)9PcLA={6O4&y!seIP_ z8bKf*NULrG9a?&(Yk(@S$Q?;U&hCnni=Q9(?jOQKyosHcXv{fZ7AB#i;0lVQQPp?? zEy4#z0-AX}0a&Vo*U@&>(us=0DlJw6qNT(JL@Gz?fegkZoyHTEKGW`pf)!F>@Bg45 z0d&ek|M0$*g!(_D$^Q!1zebZP8cyrRC_E85QZ0*<5?QvySAv#YGBC`=B#{2jcJ_)r z_vrSxy}0N9V8~QLSFGfH4VSb>k9~L^YIZQup|kR zZUdyPQDdOg1nm39GGnwTGoT)r1`90k#sM)#oKW6V7bIYvbE(mlqGK$zo#jy~&s&%~%u$c}?4q%i#o5+J2VEKKL%0s8xG4c-8-j)+B(Ey8a#AW@V3@R+! zLDREORWs2!u<_C2lBxiU>&ks>++sWZ0ZPp)a)BXa4X{t6Vhz#Ntd?)ZzG8Z#HKifx z9IAL{3bTW6Ki<)FR$ERM)#lG7xV7=h-)mv`p=6-Zfg+7<)ge6!~l-6D!QM?oEk{kV&Hv`Qt+#ic|E z!8XGu66Z5bP(oIsa7xQtLF~Mxhq#HNqpMHsI;Sy|C0;3RAb@bafp{vhr+e5&PKoM~0T> ztYYICl&BhKv4jS$+A*wI0^3Eo*wJSJo5fWX7WV3+W^-dQK$P5J?O(X7rb%9)SZlF7h1xG`uB6RkJG$37m zuUNrY6~4z|75f{xqBy9k5iukDSEWge(=yY)lNGdKbyNX$*6#epO&%yO^TjKSBLq&e z4abXoPB(TK|4+n#<~~88K~!9LZf#R2g*l*m>@H(R^5@Z^&aT88`H-depCim!bLP2Z zG*cDpO!gbl7OEF0AM6YH8>XgFQC}{LH#?(c#+3&)zrSl_VLq@C*T>Yd8;}JOp5jK@ zrzLM<4pBr$l?G3Uw+`_4kW;Mrm+(O zG*qwwiT!(6aDTI45uBhj2sIAv%cgb(v-{g!IHH^$C%*dgyD%8?s;S|~^kt*S( zg={inOZonkxN@OMCD6InsL_Bfw}QF#*=>gLB0fn=rSe+PatWgPJ_vLb&8){n(z;Ue zTQ?XFCSH;zN4a;A0Fio@bgshc!A`pO@DcXZ}evj1o&@;l_)y%}cL~ z#fg+QpHEOi6q6PL;Iu7}?wB|3$V*!OUfNx^#DkdUO1Av%$TLeMbu{82yqy>fJKl0= zZeEe8Ua%ZKmnd=~w)vs65vxFN5ulp=+Y$v+r1=f?qLEGtoRGhlyZTN27s?z;IT@qC zEvLz$hUj00)=K3+_zm6T6y)ohviK%H4G1?^t*<@v|%vtdj7uh#VN%TdA!3_ zIJ#HXJ9gz)-C@)H7PBB3zUEcFr^JyXwqt*PIY#GuIHt=?DZ_~)v-Z!>E%Dm`;n6~L zGxy7tEshtNqfLyKG8Rs@0hMx0E#(x|^zh*I1Ci+mF$&)P+(-S}nf!m*e$WGqwv^D3C-2H0;u!?VNdXB!hQ_^ zAS{ApGL+p{Rf)H{1~g%7m`H5Lw*?JBZhPQ�YA1ek5y#C3*SyO!GWzuk-o(zQgTM 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

){jb9(brH_w(+@x`ZeEW1W1T!I*&7ZvSo7+^u{0 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

(7Aw)aE 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,f|1cMue&*10YX0ez4-eFkU>Nl5a|g$B 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

ZoKbe7#WXCFCTS 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

Jd@kjG^Xm( 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 { + + // ======================================== + AdecWatt adecWatt; + RemoteUpdate remoteUpdate; + + JAdecWatt jAdecWatt; + + JAdecWattMenuBar jAdecWattMenuBar; + JAdecWattToolBar jAdecWattToolBar; + JAdecWattDialog jAdecWattDialog; + JAdecWattSearchToolBar jAdecWattSearchToolBar; + JWorkspaceSlidersToolBar jWorkspaceSlidersToolBar; + + HtmlDialog manualDialog; + + AdecWattManager adecWattManager; + HelpManager helpManager; + ToolBarManager toolBarManager; + StoryManager storyManager; + ProxyManager proxyManager; + RemoteUpdateManager remoteUpdateManager; + + // ======================================== + public AdecWattController (AdecWatt adecWatt) { + super (adecWatt); + } + + public void restart () { + adecWattManager.actionRestart (); + } + + // ======================================== + protected void createModel (AdecWatt adecWatt) { + this.adecWatt = adecWatt; + adecWatt.addUpdateObserver (this, AdecWatt.BroadcastTitle); + adecWatt.getUser ().addUpdateObserver (this, User.BroadcastUserChangeProfil); + Bundle.addBundleObserver (this); + remoteUpdate = + new RemoteUpdate (AdecWattManager.protocol, AdecWattManager.remoteServerName, AdecWattManager.stableVersion, AdecWattManager.urlModel, + new String [] {"soft"}, + new String [] {"data", "data", "server"}, + new String [] {"help-fr_FR", "data", "texts", "help-fr_FR"}, + new String [] {"help-images", "data", "texts", "help-images"}, + new String [] {"help-en_US", "data", "texts", "help-en_US"}, + new String [] {"help-br_FR_breton", "data", "texts", "help-br_FR_breton"}, + new String [] {"help-br_FR_gallo", "data", "texts", "help-br_FR_gallo"}, + new String [] {"help-es_ES", "data", "texts", "help-es_ES"} + //new String [] {"test", "data", "test", "server"} + ); + } + + // ======================================== + protected Component createGUI () { + jAdecWatt = new JAdecWatt (adecWatt); + jAdecWattDialog = new JAdecWattDialog (this); + jWorkspaceSlidersToolBar = new JWorkspaceSlidersToolBar (jAdecWatt); + jAdecWattSearchToolBar = new JAdecWattSearchToolBar (jAdecWatt); + manualDialog = new HtmlDialog (jFrame, "Manual", "data/texts/help-"+Bundle.getLocale ()+"/index.html"); + + Frame frame = new Frame (); + frame.setIconImage (getIcon ()); + JPanel contentPane = new JPanel (new MultiToolBarBorderLayout ()); + toolBarManager = new ToolBarManager (getIcon (), contentPane); + + storyManager = new StoryManager (); + remoteUpdateManager = new RemoteUpdateManager (this, remoteUpdate, + new Runnable () { + public void run () { + restart (); + } + }); + remoteUpdateManager.check (); + adecWattManager = + new AdecWattManager (adecWatt, storyManager, remoteUpdateManager, + jAdecWatt, jWorkspaceSlidersToolBar, jAdecWattDialog, manualDialog); + helpManager = new HelpManager (this, "AdecWatt"); + proxyManager = new ProxyManager (this); + jAdecWattToolBar = new JAdecWattToolBar (this, + adecWattManager, storyManager, proxyManager, remoteUpdateManager, helpManager, toolBarManager, + jAdecWattSearchToolBar, jWorkspaceSlidersToolBar); + contentPane.add (jAdecWatt, BorderLayout.CENTER); + + return contentPane; + } + + protected void newJFrame () { + manualDialog.setJFrame (jFrame); + // XXX pas RemoteUpdate ! et les outres ? + } + + public void updateBundle () { + super.updateBundle (); + SwingUtilities.invokeLater (new Runnable () { + public void run () { + manualDialog.changeFileName ("data/texts/help-"+Bundle.getLocale ()+"/index.html"); + } + }); + } + + // ======================================== + public String getTitle () { + Unit currentWorkspace = jAdecWatt.getCurrentWorkspace (); + Unit sharedUnitStory = adecWattManager.getSharedUnitStory (); + return MessageFormat.format (Bundle.getTitle ("AdecWatt"), + currentWorkspace == null ? Bundle.getAction ("Empty") : currentWorkspace.toString (), + sharedUnitStory == null ? "?" : sharedUnitStory.toString ()); + } + + public Image getIcon () { + try { + return Util.loadImage (Config.getString ("AdecWattIcon", "data/images/adecWatt.png")); + } catch (Exception e) { + return null; + } + } + + public void updateTitle () { + updateBundle (); + } + public void updateUserChangeProfil () { + User user = adecWatt.getUser (); + if (jAdecWattMenuBar != null) + jAdecWattMenuBar.changeProfil (user); + if (jAdecWattToolBar != null) + jAdecWattToolBar.changeProfil (user); + } + + // ======================================== + protected JMenuBar createMenuBar () { + return jAdecWattMenuBar = new JAdecWattMenuBar (this, adecWattManager, storyManager, proxyManager, remoteUpdateManager, helpManager, toolBarManager); + } + + // ======================================== + protected boolean tryClosingWindows () { + Config.save ("AdecWatt"); + if (adecWatt.getModified ()) + switch (JOptionPane.showConfirmDialog (jFrame, Bundle.getMessage ("QuitJAdecWatt"), + Bundle.getTitle ("AdecWattStillRunning"), + JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE)) { + case JOptionPane.YES_OPTION: + return true; + case JOptionPane.NO_OPTION: + case JOptionPane.CANCEL_OPTION: + case JOptionPane.CLOSED_OPTION: + return false; + } + return true; + } + + // ======================================== +} diff --git a/src/java/adecWatt/control/AdecWattManager.java b/src/java/adecWatt/control/AdecWattManager.java new file mode 100644 index 0000000..77a6948 --- /dev/null +++ b/src/java/adecWatt/control/AdecWattManager.java @@ -0,0 +1,686 @@ +package adecWatt.control; + +import java.awt.Container; +import java.awt.Desktop; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.awt.print.PageFormat; +import java.awt.print.PrinterJob; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.TreeSet; +import java.util.Vector; +import javax.swing.AbstractButton; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenu; +import misc.ApplicationManager; +import misc.Config; +import misc.HtmlDialog; +import misc.RemoteUpdateManager; +import misc.Story; +import misc.StoryManager; +import misc.Util; + +import adecWatt.model.Acc; +import adecWatt.model.AdecWatt; +import adecWatt.model.Editable; +import adecWatt.model.ImageDB; +import adecWatt.model.Item; +import adecWatt.model.PermanentDB; +import adecWatt.model.Unit; +import adecWatt.model.unit.Workspace; +import adecWatt.view.JAdecWatt; +import adecWatt.view.JAdecWattDialog; +import adecWatt.view.JWorkspaceSlidersToolBar; +import adecWatt.view.JWorkspaceView; +import adecWatt.view.PrintWorkspace; + +public class AdecWattManager implements ApplicationManager, ActionListener { + + // ======================================== + public static String protocol = "https"; + public static String remoteServerName = "adecwatt.parlenet.org"; + public String testedServerName = "adecwatt.parlenet.local"; + public String currentServerName = remoteServerName; + public static String stableVersion = "v3"; + public String testedVersion = "test"; + public String currentVersion = stableVersion; + public static String + urlModel = "/lib/plugins/adecwatt/adecWattBD.php?version={0}&action={1}&name={2}"; + + // ======================================== + static public final String + actionChangeRole = "ChangeRole", + actionRestart = "Restart", + actionSave = "Save", + actionSaveAll = "SaveAll", + actionImport = "Import", + actionExport = "Export", + actionPageSetup = "PageSetup", + actionPrint = "Print", + actionExportPDF = "ExportPDF", + actionClose = "Close", + actionCloseAll = "CloseAll", + + actionSelectAll = "SelectAll", + actionCut = "Cut", + actionCopy = "Copy", + actionPaste = "Paste", + actionMagnetPolicies = "MagnetPolicies", + actionPatch = "Patch", + + actionHorizontalLeft = "HorizontalLeft", + actionHorizontalCenter = "HorizontalCenter", + actionHorizontalRight = "HorizontalRight", + actionVerticalTop = "VerticalTop", + actionVerticalCenter = "VerticalCenter", + actionVerticalBottom = "VerticalBottom", + + actionHorizontalSpace = "HorizontalSpace", + actionHorizontalDistrib = "HorizontalDistrib", + actionVerticalSpace = "VerticalSpace", + actionVerticalDistrib = "VerticalDistrib", + actionWizard = "Wizard", + actionHttpServer = "HttpServer", + actionLocalServer = "LocalServer", + actionTestedServer = "TestedServer", + actionServerName = "ServerName", + actionManual = "Manual"; + + static public Util.ActionControl[] actionsControl = { + new Util.ActionControl (actionSave, KeyEvent.VK_S), + new Util.ActionControl (actionSelectAll, KeyEvent.VK_A), + new Util.ActionControl (actionCut, KeyEvent.VK_X), + // new Util.ActionControl (actionCut, KeyEvent.VK_DELETE, false), + // new Util.ActionControl (actionCut, KeyEvent.VK_BACK_SPACE, false), + new Util.ActionControl (actionCopy, KeyEvent.VK_C), + new Util.ActionControl (actionPaste, KeyEvent.VK_V), + new Util.ActionControl (StoryManager.actionUndo, KeyEvent.VK_Z), + new Util.ActionControl (StoryManager.actionRedo, KeyEvent.VK_Y), + }; + + // ======================================== + /** popup Menu. */ + static public final String + actionDisplayUnit = "DisplayUnit", + actionModifyUnit = "ModifyUnit", + actionRenameUnit = "RenameUnit", + actionTransformUnit = "TransformUnit", + actionCopyUnit = "CopyUnit", + actionNewUnit = "NewUnit", + actionPromoteUnit = "PromoteUnit", + actionRemoveUnit = "RemoveUnit", + actionRemoveImage = "RemoveImage", + actionChangeImage = "ChangeImage", + actionUnchange = "Unchange"; + + static public final String + actionDisplayItem = "DisplayItem", + actionModifyItem = "ModifyItem", + actionHideItem = "HideItem", + actionShowItem = "ShowItem", + actionTransformItem = "TransformItem", + actionCopyItem = "CopyItem", + actionRemoveItem = "RemoveItem", + + actionHideShowItem = "HideShowItem"; + + static public final String + actionDisplayAcc = "DisplayAcc", + actionModifyAcc = "ModifyAcc", + actionTransformAcc = "TransformAcc", + actionRemoveAcc = "RemoveAcc"; + + // ======================================== + static public final List + fileActionsNames = Arrays.asList (actionChangeRole, actionRestart, + actionSave, actionSaveAll, actionImport, actionExport, + actionPageSetup, actionPrint, //actionExportPDF, + actionClose, actionCloseAll), + editActionsNames = Arrays.asList (actionSelectAll, actionCut, actionCopy, actionPaste, actionMagnetPolicies, actionPatch), + placementActionsNames = Arrays.asList (actionHorizontalLeft, actionHorizontalCenter, actionHorizontalRight, + actionVerticalTop, actionVerticalCenter, actionVerticalBottom, + actionHorizontalSpace, actionHorizontalDistrib, + actionVerticalSpace, actionVerticalDistrib), + yodaActionsNames = Arrays.asList (actionHttpServer, actionLocalServer, actionTestedServer, actionServerName, actionWizard), + yodaNoCheckActionsNames = Arrays.asList (actionServerName, actionWizard), + helpActionsNames = Arrays.asList (actionManual); + + // ======================================== + @SuppressWarnings ("unchecked") + static public final Hashtable actionsMethod = + Util.collectMethod (AdecWattManager.class, + fileActionsNames, editActionsNames, placementActionsNames, yodaActionsNames, helpActionsNames); + + public void actionPerformed (ActionEvent e) { + Util.actionPerformed (actionsMethod, e, this); + } + + // ======================================== + AdecWatt adecWatt; + PermanentDB permanentDB; + StoryManager storyManager; + RemoteUpdateManager remoteUpdateManager; + + JAdecWatt jAdecWatt; + JWorkspaceSlidersToolBar jWorkspaceSlidersToolBar; + JAdecWattDialog jAdecWattDialog; + HtmlDialog manualDialog; + JCheckBoxMenuItem httpServerCB; + JCheckBoxMenuItem localServerCB; + JCheckBoxMenuItem testedServerCB; + + // ======================================== + public AdecWattManager (AdecWatt adecWatt, StoryManager storyManager, RemoteUpdateManager remoteUpdateManager, + JAdecWatt jAdecWatt, JWorkspaceSlidersToolBar jWorkspaceSlidersToolBar, JAdecWattDialog jAdecWattDialog, + HtmlDialog manualDialog) { + this.adecWatt= adecWatt; + permanentDB = adecWatt.getPermanentDB (); + this.storyManager = storyManager; + this.jAdecWatt = jAdecWatt; + this.jWorkspaceSlidersToolBar = jWorkspaceSlidersToolBar; + this.jAdecWattDialog = jAdecWattDialog; + this.manualDialog = manualDialog; + this.remoteUpdateManager = remoteUpdateManager; + + jAdecWatt.stateNotifier.addUpdateObserver (this, JAdecWatt.BroadcastWorkspace, JAdecWatt.BroadcastSelection); + jAdecWatt.stateNotifier.addMsgObserver (this, JAdecWatt.BroadcastUnitStory); //, JAdecWatt.BroadcastEditableSelection); + + adecWatt.addUpdateObserver (this, + AdecWatt.BroadcastStory); + adecWatt.addMsgObserver (this, + AdecWatt.BroadcastUnitStory, + actionClose, + actionDisplayUnit, actionModifyUnit, actionRenameUnit, actionTransformUnit, + actionCopyUnit, actionNewUnit, actionPromoteUnit, actionRemoveUnit, + actionDisplayItem, actionModifyItem, actionHideShowItem, actionTransformItem, actionCopyItem, actionRemoveItem, + Unit.BroadcastSetSelectionItems, Unit.BroadcastConnection, + actionDisplayAcc, actionModifyAcc, actionTransformAcc, actionRemoveAcc); + } + + // ======================================== + public void addMenuItem (JMenu... jMenu) { + int idx = 0; + Util.addMenuItem (fileActionsNames, this, jMenu[idx++]); + Util.addMenuItem (editActionsNames, this, jMenu[idx++]); + Util.addMenuItem (placementActionsNames, this, jMenu[idx++]); + httpServerCB = Util.addCheckMenuItem (actionHttpServer, this, false, jMenu[idx]); + localServerCB = Util.addCheckMenuItem (actionLocalServer, this, false, jMenu[idx]); + testedServerCB = Util.addCheckMenuItem (actionTestedServer, this, false, jMenu[idx]); + actionHttpServer (); + actionLocalServer (); + actionTestedServer (); + Util.addMenuItem (yodaNoCheckActionsNames, this, jMenu[idx++]); + Util.addMenuItem (helpActionsNames, this, jMenu[idx++]); + } + + // ======================================== + public void addIconButtons (Container... containers) { + int idx = 0; + Util.addIconButton (fileActionsNames, this, containers[idx++]); + Util.addIconButton (editActionsNames, this, containers[idx++]); + Util.addIconButton (placementActionsNames, this, containers[idx++]); + idx++; + idx++; + Util.addIconButton (helpActionsNames, this, containers[idx++]); + } + + // ======================================== + private ArrayList enabledSaveButtons = new ArrayList (); + private ArrayList enabledSaveAllButtons = new ArrayList (); + private ArrayList enabledCloseButtons = new ArrayList (); + private ArrayList enabledPasteButtons = new ArrayList (); + private ArrayList enabledSelectionButtons = new ArrayList (); + private ArrayList enabledMultiSelectionButtons = new ArrayList (); + public void addActiveButtons (Hashtable buttons) { + enabledSaveButtons.add (buttons.get (actionSave)); + enabledSaveAllButtons.add (buttons.get (actionSaveAll)); + enabledCloseButtons.add (buttons.get (actionPrint)); + //enabledCloseButtons.add (buttons.get (actionExportPDF)); + enabledCloseButtons.add (buttons.get (actionPatch)); + enabledCloseButtons.add (buttons.get (actionExport)); + enabledCloseButtons.add (buttons.get (actionClose)); + enabledCloseButtons.add (buttons.get (actionCloseAll)); + enabledCloseButtons.add (buttons.get (actionSelectAll)); + enabledPasteButtons.add (buttons.get (actionPaste)); + enabledSelectionButtons.add (buttons.get (actionCopy)); + enabledSelectionButtons.add (buttons.get (actionCut)); + for (String action : placementActionsNames) + enabledMultiSelectionButtons.add (buttons.get (action)); + updateActiveButtons (); + } + + public void updateActiveButtons () { + remoteUpdateManager.updateActiveButtons (); + updateStory (); + updateWorkspace (); + updatePaste (); + } + + // ======================================== + Unit sharedUnitStory; + public Unit getSharedUnitStory () { return sharedUnitStory; } + public void displayUnitStory (Object... objects) { + // if (objects[0] == null) + // return; + sharedUnitStory = (Unit) objects[0]; + adecWatt.broadcastUpdate (AdecWatt.BroadcastTitle); + storyManager.setStory (sharedUnitStory == null ? null : sharedUnitStory.story); + updateStory (); + } + public void updateStory () { + boolean saveAll = permanentDB.isModifiedUnit (); + boolean save = false; + if (sharedUnitStory != null) { + Story story = sharedUnitStory.story; + save = story.isModified (); + } + for (AbstractButton button : enabledSaveButtons) + button.setEnabled (save); + for (AbstractButton button : enabledSaveAllButtons) + button.setEnabled (saveAll); + jAdecWatt.updateUnit (sharedUnitStory, false); + } + + public void updateWorkspace () { + boolean close = jAdecWatt.hasWorkspace (); + for (AbstractButton button : enabledCloseButtons) + button.setEnabled (close); + Workspace currentWorkspace = jAdecWatt.getCurrentWorkspace (); + displayUnitStory (currentWorkspace); + updateSelection (); + JWorkspaceView jWorkspaceView = jAdecWatt.getCurrentJWorkspace (); + jWorkspaceSlidersToolBar.setJWorkspaceView (jWorkspaceView); + } + + public void updateSelection () { + JWorkspaceView jWorkspaceView = jAdecWatt.getCurrentJWorkspace (); + int nbSelection = jWorkspaceView == null ? 0 : jWorkspaceView.getNbSelectedItems (); + boolean selection = nbSelection > 0; + boolean multiSelection = nbSelection > 1; + for (AbstractButton button : enabledSelectionButtons) + button.setEnabled (selection); + for (AbstractButton button : enabledMultiSelectionButtons) + button.setEnabled (multiSelection); + } + + // ======================================== + public void actionRestart () { + if (adecWatt.getModified () && !jAdecWattDialog.abortModification ()) + return; + actionCloseAll (); + adecWatt.reset (); + jAdecWatt.stateNotifier.broadcastDisplay (JAdecWatt.BroadcastUnitStory, (Unit) null); + } + + public void actionSave () { + if (sharedUnitStory == null) + return; + sharedUnitStory.save (); + } + + public void actionSaveAll () { + adecWatt.saveAll (); + } + + public void actionSelectAll () { + JWorkspaceView jWorkspaceView = jAdecWatt.getCurrentJWorkspace (); + if (jWorkspaceView == null) + return; + jWorkspaceView.selectAllItems (); + } + + public void actionImport () { + permanentDB.importFile (jAdecWattDialog.getChooseOpenFile (permanentDB.getLastExport ())); + } + + public void actionExport () { + Workspace currentWorkspace = jAdecWatt.getCurrentWorkspace (); + if (currentWorkspace == null) + return; + permanentDB.exportFile (currentWorkspace, jAdecWattDialog.getChooseSaveFile (permanentDB.getLastExport ())); + } + + Vector clip = new Vector (); + + public void updatePaste () { + boolean paste = clip.size () > 0; + for (AbstractButton button : enabledPasteButtons) + button.setEnabled (paste); + } + + public void actionCut () { + actionCopy (); + JWorkspaceView jWorkspaceView = jAdecWatt.getCurrentJWorkspace (); + if (jWorkspaceView == null) + return; + jWorkspaceView.getWorkspace ().storyRemoveItems (clip); + } + + public void actionCopy () { + clip.clear (); + try { + clip.addAll (jAdecWatt.getCurrentJWorkspace ().getSelectedItems ()); + } catch (Exception e) { + } + updatePaste (); + } + + public void actionPaste () { + Workspace currentWorkspace = jAdecWatt.getCurrentWorkspace (); + if (currentWorkspace == null) + return; + currentWorkspace.storyPasteItem (clip); + } + + + // ======================================== + public void displayClose (Object... objects) { + if (objects[0] == null || ! (objects[0] instanceof Workspace)) + return; + Workspace workspace = (Workspace) objects[0]; + jAdecWattDialog.removeDisplay (workspace); + jAdecWatt.closeWorkspace (workspace); + } + + public void actionClose () { + Workspace currentWorkspace = jAdecWatt.getCurrentWorkspace (); + jAdecWattDialog.removeDisplay (currentWorkspace); + jAdecWatt.closeWorkspace (currentWorkspace); + } + + public void actionCloseAll () { + jAdecWattDialog.removeAllDisplay (); + jAdecWatt.closeWorkspaces (); + } + + public void actionChangeRole () { + jAdecWattDialog.checkAdmin (adecWatt.getUser (), remoteUpdateManager); + } + + public void actionHorizontalLeft () { align (Workspace.Alignment.LEFT); } + public void actionHorizontalCenter () { align (Workspace.Alignment.CENTER); } + public void actionHorizontalRight () { align (Workspace.Alignment.RIGHT); } + public void actionVerticalTop () { align (Workspace.Alignment.TOP); } + public void actionVerticalCenter () { align (Workspace.Alignment.MIDDLE); } + public void actionVerticalBottom () { align (Workspace.Alignment.BOTTOM); } + public void actionHorizontalSpace () { distrib (true, true); } + public void actionHorizontalDistrib () { distrib (true, false); } + public void actionVerticalSpace () { distrib (false, true); } + public void actionVerticalDistrib () { distrib (false, false); } + + + public void distrib (boolean isHorizontal, boolean isSpace) { + JWorkspaceView jWorkspaceView = jAdecWatt.getCurrentJWorkspace (); + if (jWorkspaceView == null) + return; + Double value = jAdecWattDialog.getSpace (); + if (value != null && value < 0) + return; + Vector items = jWorkspaceView.getSelectedItems (); + if (items == null || items.size () < 2) + return; + Workspace workspace = jWorkspaceView.getWorkspace (); + if (isSpace) + workspace.storySpaceItem (items, isHorizontal, value); + else + workspace.storyDistributeItem (items, isHorizontal, value); + } + + public void align (Workspace.Alignment alignment) { + JWorkspaceView jWorkspaceView = jAdecWatt.getCurrentJWorkspace (); + if (jWorkspaceView == null) + return; + Vector items = jWorkspaceView.getSelectedItems (); + if (items == null || items.size () < 2) + return; + jWorkspaceView.getWorkspace ().storyAlignItem (items, alignment); + } + + // ======================================== + public void actionManual () { + try { + Desktop.getDesktop ().browse (Config.getDataUrl ("data", "texts", "help-"+misc.Bundle.getLocale (), "index.html").toURI ()); + } catch (Exception e) { + e.printStackTrace (); + manualDialog.restart (); + manualDialog.setVisible (true); + } + } + + private PrinterJob printer = null; + private PageFormat page = null; + + public void actionPageSetup() { + if (printer == null) + printer = PrinterJob.getPrinterJob (); + if (page == null) + page = printer.defaultPage (); + page = printer.pageDialog (page); + printer.defaultPage (page); + } + + public void actionPrint () { + Workspace currentWorkspace = jAdecWatt.getCurrentWorkspace (); + if (printer == null) + printer = PrinterJob.getPrinterJob (); + if (!printer.printDialog ()) + return; + PrintWorkspace.print (jAdecWattDialog.getOwnFrame (), printer, currentWorkspace); + } + + public void actionExportPDF () { + Workspace currentWorkspace = jAdecWatt.getCurrentWorkspace (); + if (printer == null) + printer = PrinterJob.getPrinterJob (); + if (!printer.printDialog ()) + return; + PrintWorkspace.print (jAdecWattDialog.getOwnFrame (), printer, currentWorkspace); + } + + public void actionMagnetPolicies () { + jAdecWattDialog.magnetPolicies (adecWatt); + } + + public void actionPatch () { + jAdecWattDialog.patch (jAdecWatt.getCurrentWorkspace ()); + } + + public void actionHttpServer () { + remoteUpdateManager.getRemoteUpdate ().protocol = + httpServerCB.isSelected () ? "http" : protocol; + Config.setBoolean ("HttpServer"+Config.checkedPostfix, httpServerCB.isSelected ()); + // XXX ??? + javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier (new javax.net.ssl.HostnameVerifier () { + public boolean verify (String hostname, javax.net.ssl.SSLSession session) { + return true; + } + }); + } + public void actionLocalServer () { + remoteUpdateManager.getRemoteUpdate ().serverName = + localServerCB.isSelected () ? testedServerName : remoteServerName; + + javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier (new javax.net.ssl.HostnameVerifier () { + public boolean verify (String hostname, javax.net.ssl.SSLSession session) { + return true; + } + }); + } + public void actionTestedServer () { + remoteUpdateManager.getRemoteUpdate ().versionName = + testedServerCB.isSelected () ? testedVersion : stableVersion; + + javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier (new javax.net.ssl.HostnameVerifier () { + public boolean verify (String hostname, javax.net.ssl.SSLSession session) { + return true; + } + }); + } + public void actionServerName () { + String newServer = jAdecWattDialog.getSimpleMessage ("ServerName", testedServerName); + if (newServer != null) + testedServerName = newServer; + } + public void actionWizard () { + try { + System.err.println ("coucou: wizard"); + java.net.URL newURL = Config.getDataUrl ("data", "texts", "help-"+misc.Bundle.getLocale (), "index.html"); + System.err.println ("coucou file:"+newURL+" --- "+newURL.toURI ()); + + java.awt.Desktop.getDesktop ().browse (newURL.toURI ()); + // XXX + } catch (Exception e) { + e.printStackTrace (); + } + } + + // ======================================== + public void displayDisplayUnit (Object... objects) { + @SuppressWarnings("unchecked") + List> selectedUnits = (List>) objects[0]; + jAdecWattDialog.display (false, selectedUnits); + } + public void displayModifyUnit (Object... objects) { + @SuppressWarnings("unchecked") + List> selectedUnits = (List>) objects[0]; + jAdecWattDialog.display (true, selectedUnits); + } + public void displayRenameUnit (Object... objects) { + @SuppressWarnings("unchecked") + List> selectedUnits = (List>) objects[0]; + if (selectedUnits.size () != 1) { + System.err.println ("coucou pb selectedUnits:"+selectedUnits); + return; + } + Unit unit = (Unit) selectedUnits.get (0); + if (unit.getParent () == null) + return; + String name = jAdecWattDialog.getName (unit.getName ()); + unit.storyTransform (null, null, name, null); + } + public void displayTransformUnit (Object... objects) { + jAdecWattDialog.transform ((Unit) objects[0]); + } + public void displayCopyUnit (Object... objects) { + Unit unit = (Unit) objects[0]; + String name = jAdecWattDialog.getName (unit.getName ()); + if (name == null) + return; + unit.getCopy (name); + } + public void displayNewUnit (Object... objects) { + Unit unit = (Unit) objects[0]; + String name = jAdecWattDialog.getName (unit.getName ()); + if (name == null) + return; + unit.getNewChild (name); + } + public void displayPromoteUnit (Object... objects) { + Unit unit = (Unit) objects[0]; + ImageDB iconDB = adecWatt.getIconDB (); + ImageDB imageDB = adecWatt.getImageDB (); + HashSet> units = new HashSet> (); + TreeSet icons = new TreeSet (); + TreeSet images = new TreeSet (); + unit.findPromote (units, icons, images); + iconDB.renameVisitor (icons); + imageDB.renameVisitor (images); + permanentDB.renameVisitor (units); + if (!jAdecWattDialog.validation ("PromoteConfirmation", unit.getLocalName (), unit.getLocation (), + units, icons, images)) + return; + iconDB.promote (icons); + imageDB.promote (images); + permanentDB.promote (units); + } + public void displayRemoveUnit (Object... objects) { + Unit unit = (Unit) objects[0]; + if (!jAdecWattDialog.validation ("RemoveConfirmation", unit.getLocalName (), unit.getLocation ())) + return; + unit.remove (); + } + public void displayConnection (Object... objects) { + // XXX jAdecWatt.getJWorkspace ((Workspace) objects[0]).updateConnectionLayer (); + } + + // ======================================== + + public void displayDisplayItem (Object... objects) { + @SuppressWarnings ("unchecked") + List> selectedItems = (List>) objects[0]; + jAdecWattDialog.display (false, selectedItems); + } + public void displayModifyItem (Object... objects) { + @SuppressWarnings("unchecked") + List> selectedItems = (List>) objects[0]; + jAdecWattDialog.display (true, selectedItems); + } + public void displayHideShowItem (Object... objects) { + JWorkspaceView jWorkspaceView = (JWorkspaceView) objects[0]; + @SuppressWarnings ("unchecked") + List selectedItems = (List) objects[1]; + Boolean hidden = (Boolean) objects[2]; + jWorkspaceView.hideShowItem (selectedItems, hidden); + } + public void displayTransformItem (Object... objects) { + jAdecWattDialog.transform ((Item) objects[0]); + } + public void displayCopyItem (Object... objects) { + JWorkspaceView jWorkspaceView = (JWorkspaceView) objects[0]; + @SuppressWarnings ("unchecked") + List selectedItems = (List) objects[1]; + Point pos = (Point) objects[2]; + jWorkspaceView.cloneItem (selectedItems.get (0), pos); + } + public void displayRemoveItem (Object... objects) { + JWorkspaceView jWorkspaceView = (JWorkspaceView) objects[0]; + @SuppressWarnings ("unchecked") + List selectedItems = (List) objects[1]; + jWorkspaceView.eraseItem (selectedItems); + } + @SuppressWarnings ("unchecked") + public void displaySetSelectionItems (Object... objects) { + try { + jAdecWatt.getJWorkspace ((Workspace) objects[0]).setSelectedItems ((List) objects[1]); + } catch (Exception e) { + } + } + + // ======================================== + public void displayDisplayAcc (Object... objects) { + @SuppressWarnings("unchecked") + List> selectedAccs = (List>) objects[0]; + jAdecWattDialog.display (false, selectedAccs); + } + public void displayModifyAcc (Object... objects) { + @SuppressWarnings("unchecked") + List> selectedAccs = (List>) objects[0]; + jAdecWattDialog.display (true, selectedAccs); + } + public void displayTransformAcc (Object... objects) { + jAdecWattDialog.transform ((Acc) objects[0]); + } + public void displayRemoveAcc (Object... objects) { + JWorkspaceView jWorkspaceView = (JWorkspaceView) objects[0]; + Acc acc = (Acc) objects[1]; + jWorkspaceView.eraseAcc (acc); + } + + // ======================================== + // private Editable lastSelection; + // private Editable lastCopy; + // public void displayEditableSelection (Object... objects) { + // lastSelection = (Editable) objects[0]; + // } + // YYY faire remove/copie/paste avec + + // ======================================== +} + diff --git a/src/java/adecWatt/control/LaunchAdecWatt.java b/src/java/adecWatt/control/LaunchAdecWatt.java new file mode 100644 index 0000000..fb50daa --- /dev/null +++ b/src/java/adecWatt/control/LaunchAdecWatt.java @@ -0,0 +1,77 @@ +package adecWatt.control; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.PrintWriter; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; + +import misc.Bundle; +import misc.Config; +import misc.RemoteUpdate; + +import adecWatt.model.AdecWatt; +import adecWatt.view.JProp; + +public class LaunchAdecWatt { + + // ======================================== + static public void main (String[] args) { + try { + Config.setPWD (LaunchAdecWatt.class); + Config.load ("AdecWatt"); + Bundle.load ("Help"); + Bundle.load ("ToolBar"); + Bundle.load ("Proxy"); + Bundle.load ("RemoteUpdate"); + Bundle.load ("Story"); + Bundle.load ("Controller"); + Bundle.load ("AdecWatt"); + Bundle.load (JProp.AdecWattUser); + + updateShell (); + + final AdecWatt adecWatt = new AdecWatt (); + SwingUtilities.invokeLater (new Runnable () { + public void run () { + AdecWattController adecWattController = new AdecWattController (adecWatt); + adecWatt.broadcastDisplay ("Console", Bundle.getMessage ("Welcome")); + adecWattController.updateUserChangeProfil (); + } + }); + } catch (Exception e) { + File softDir = new File (Config.getPWD ().getParentFile (), "soft"); + File jar = new File (softDir, "UpdatedAdecWatt.jar"); + RemoteUpdate.launch (jar); + } + } + + public static void updateShell () { + try { + File dir = Config.getPWD ().getParentFile (); + File oldLaunch = new File (dir, "launch-lightPlot.sh"); + File softDir = new File (dir, "soft"); + File newJar = new File (softDir, "AdecWatt.jar"); + File oldJar = new File (softDir, "LightPlot.jar"); + if (newJar.length () < 1024) + return; + if (oldLaunch.length () > 70) { + PrintWriter pw = new PrintWriter (oldLaunch); + pw.println ("#!/bin/bash"); + pw.println ("cd `dirname \"$0\"`"); + pw.println ("java -jar soft/AdecWatt.jar"); + pw.flush (); + pw.close (); + JOptionPane.showMessageDialog (null, + "Votre logiciel a \u00E9t\u00E9 mis \u00E0 jour.\n"+ + "Vous devez relancer l'application\n", "Information", JOptionPane.ERROR_MESSAGE); + System.exit (0); + } + if (oldJar.exists ()) + oldJar.delete (); + } catch (FileNotFoundException e) { + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/control/LaunchUpdatedAdecWatt.java b/src/java/adecWatt/control/LaunchUpdatedAdecWatt.java new file mode 100644 index 0000000..10c7a9c --- /dev/null +++ b/src/java/adecWatt/control/LaunchUpdatedAdecWatt.java @@ -0,0 +1,22 @@ +package adecWatt.control; + +import java.io.File; + +import misc.Config; +import misc.RemoteUpdate; + +public class LaunchUpdatedAdecWatt { + + // ======================================== + static public void main (String[] args) { + Config.setPWD (LaunchUpdatedAdecWatt.class); + File dir = Config.getPWD ().getParentFile (); + RemoteUpdate.renameNewFile (dir); + + File softDir = new File (dir, "soft"); + File jar = new File (softDir, "AdecWatt.jar"); + RemoteUpdate.launch (jar); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/Acc.java b/src/java/adecWatt/model/Acc.java new file mode 100644 index 0000000..04ce42b --- /dev/null +++ b/src/java/adecWatt/model/Acc.java @@ -0,0 +1,198 @@ +// XXX test eclipse + +package adecWatt.model; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.geom.AffineTransform; +import java.awt.geom.Ellipse2D; +import java.awt.geom.GeneralPath; +import java.awt.geom.Path2D; +import java.awt.geom.Point2D; +import java.util.ArrayList; +import java.util.Collection; +import misc.DimensionDouble; +import misc.ScaledImage; +import misc.Story; + +import adecWatt.model.unit.Accessory; +import adecWatt.model.unit.Workspace; +import adecWatt.model.xml.XmlAcc; + +public class Acc extends Embedded, Acc> { + // ======================================== + public Collection getModifiersSet () { return AccModifiersSet; } + public AccTypeEnum getTypeToken () { return AccTypeEnum.Accessory; } + public AccAttrEnum getNameToken () { return AccAttrEnum.Name; } + public AccAttrEnum getModifierToken () { return AccAttrEnum.Modifier; } + public AccAttrEnum getPlaceIdToken () { return AccAttrEnum.Placeid; } + public AccAttrEnum getModelToken () { return AccAttrEnum.Model; } + + public Workspace getStoryUnit () { return ((Comp)container).container; } + public Acc getLink (Editable support) { return new Acc (name, placeId, support, (Accessory) model); } + + // ======================================== + public Acc (Editable support, XmlAcc xmlAcc) { + super (support, xmlAcc); + } + public Acc (String name, String placeName, Editable support, Accessory model) { + super (name, placeName, support, model); + } + public Acc (Editable support, Accessory model) { + super (null, "", support, model); + } + public Acc clone (Editable support) { + Acc result = new Acc (support, (Accessory) model); + result.importFrom (this); + return result; + } + + // ======================================== + public boolean search (String text) { + if (getName ().toLowerCase ().indexOf (text) >= 0 || + getLocalName ().toLowerCase ().indexOf (text) >= 0 || + getId ().indexOf (text) >= 0) + return true; + return false; + } + + public String getCircuit (Comp realContainer) { + String result = super.getCircuit (); + if (result != null) + return result; + return realContainer.getCircuit (); + } + public double getWatt (Comp realContainer) { + double result = super.getWatt (); + if (result > 0) + return result; + return realContainer.getWatt (); + } + + // ======================================== + public void validateContainer (Story.Commands commands, String commandName) { + container.validateContainer (commands, commandName); + if (container.getLocalEmbedded (getId ()) == this) + return; + Story story = commands.getStory (); + commands.add (story.new Command (commandName) { + @SuppressWarnings ("unchecked") + public void exec () { ((Editable>) container).addEmbedded (Acc.this); } + @SuppressWarnings ("unchecked") + public void undo () { ((Editable>) container).removeEmbedded (Acc.this); } + public void display () { container.updateView (); } + }); + } + + public void storyChange (Story.Commands commands, ArrayList changeProps) { + storyChange (commands, true, ownProps, changeProps); + } + public void storyTransform (Story.Commands commands, Collection modifiers, Unit permanent, String newName, ArrayList transProps) { + storyTransform (commands, null, modifiers, permanent, ownProps, transProps); + } + public void updateView () { + ((Comp) container).updateView (); + } + + // ======================================== + public void changeConnectedTo (String connectedTo) { + getLocalProp (Prop.PropConnectedTo, Prop.PropTypeEnum.Text).setValue (connectedTo); + } + public void changeConnectedOn (String connectedOn) { + getLocalProp (Prop.PropConnectedOn, Prop.PropTypeEnum.Text).setValue (connectedOn); + } + + // ======================================== + public String toString () { + return getName (); + } + + // ======================================== + public void print (Graphics2D printGraphics, Comp comp) { + Point2D.Double accPos = getPos (); + DimensionDouble accSize = getSize (); + ScaledImage accIcon = getIcon (); + if (comp.isLow ()) { + ScaledImage scaledLowImage = getLowIcon (); + if (scaledLowImage != null) + accIcon = scaledLowImage; + } + Color accColor = getColor (); + if (accColor != null) + accIcon = comp.getAdecWatt ().getIconDB ().getColoredScaledImages (accIcon, accColor); + DimensionDouble compSize = comp.getSize (); + if (accSize.width < 0) + accSize.width *= -compSize.width; + if (accSize.height < 0) + accSize.height *= -compSize.height; + accPos.x = accPos.x < 0 ? (-accPos.x-.5)*(compSize.width-accSize.width) : accPos.x - (compSize.width-accSize.width)/2.; + accPos.y = accPos.y < 0 ? (-accPos.y-.5)*(compSize.height-accSize.height) : accPos.y - (compSize.height-accSize.height)/2.; + // XXX double accThetaDegree = acc.getThetaDegree (); + double thetaDegree = comp.getThetaDegree (); + AffineTransform at = AffineTransform.getRotateInstance (Math.toRadians ((int) thetaDegree)); + double [] center = new double [] {accPos.x, accPos.y}; + at.transform (center, 0, center, 0, 1); + Point2D.Double compPos = comp.getPos (); + Point2D.Double absPos = new Point2D.Double (compPos.getX ()+center[0], compPos.getY ()+center[1]); + String id = getId (); + comp.accCenter.put (id, absPos); + comp.accSize.put (id, accSize); + Workspace.printImage (printGraphics, accIcon, absPos, accSize, thetaDegree, null); + Workspace.printText (printGraphics, getLabel (), getLabelColor (), absPos, accSize, thetaDegree); + } + + // ======================================== + static public final BasicStroke solidConnection = new BasicStroke (2, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); + static public final Color connectionColor = Color.GRAY; + static public final Color boxColor = new Color (0, 1, 0, .5F); + static public final Color warningColor = new Color (1, .5F, 0, .7F); + static public final Color errorColor = new Color (1, 0, 0, .7F); + static public final Color circuitColor = Color.BLACK; + + static public void printCircuit (Graphics2D connectionGraphics, double printScale, Point2D center, Circuits.CircuitState circuitState) { + printCircuit (connectionGraphics, center, circuitState, 20/printScale); + } + static public void printCircuit (Graphics2D connectionGraphics, Point2D center, Circuits.CircuitState circuitState, double boxSide) { + Ellipse2D.Double box = new Ellipse2D.Double (center.getX ()-boxSide/2, center.getY ()-boxSide/2, boxSide, boxSide); + Color color = boxColor; + switch (circuitState.state) { + case PLUG: + break; + case LOOP: + case UNPLUG: + color = warningColor; + break; + case SHORTCUT: + color = errorColor; + } + connectionGraphics.setPaint (color); + connectionGraphics.fill (box); + if (circuitState.name == null) + return; + Workspace.printText (connectionGraphics, String.format ("%2s", circuitState.name), + circuitColor, center, new DimensionDouble (boxSide, boxSide)); + } + + static public void printConnection (Graphics2D connectionGraphics, double printScale, Point2D begin, Point2D end) { + printConnection (connectionGraphics, begin, end, + 20/printScale, new BasicStroke ((float)(2/printScale), BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); + } + static public void printConnection (Graphics2D connectionGraphics, Point2D begin, Point2D end, double boxSide) { + printConnection (connectionGraphics, begin, end, boxSide, solidConnection); + } + static public void printConnection (Graphics2D connectionGraphics, Point2D begin, Point2D end, + double boxSide, BasicStroke solidConnection) { + GeneralPath gp = new GeneralPath (Path2D.WIND_NON_ZERO); + gp.moveTo (begin.getX (), begin.getY ()); + if (Math.abs (begin.getX ()-end.getX ()-1) < Math.abs (begin.getY ()-end.getY ())) + gp.curveTo (begin.getX (), end.getY (), end.getX (), begin.getY (), end.getX (), end.getY ()); + else + gp.curveTo (end.getX (), begin.getY (), begin.getX (), end.getY (), end.getX (), end.getY ()); + connectionGraphics.setPaint (connectionColor); + connectionGraphics.setStroke (solidConnection); + connectionGraphics.draw (gp); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/AdecWatt.java b/src/java/adecWatt/model/AdecWatt.java new file mode 100644 index 0000000..22ee5d0 --- /dev/null +++ b/src/java/adecWatt/model/AdecWatt.java @@ -0,0 +1,119 @@ +package adecWatt.model; + +import java.io.File; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.TreeMap; +import javax.swing.JOptionPane; + +import misc.Bundle; +import misc.Config; +import misc.RemoteUpdate; +import misc.StateNotifier; +import misc.Story; + +/** + */ +public class AdecWatt extends StateNotifier { + + static public final double lowLevel = 0.3; + + static public final String + BroadcastUnitRoots = "UnitRoots", + BroadcastConsole = "Console", + BroadcastUnitStory = "UnitStory", + BroadcastStory = Story.BroadcastStory, + BroadcastTitle = "Title", + BroadcastUpdateUnitTree = "UpdateUnitTree", //UpdateWorkspaceTree + BroadcastUpdateWorkspace = "UpdateWorkspace"; + + // ======================================== + private ImageDB iconDB = new ImageDB (this, ImageDB.iconDirName); + private ImageDB imageDB = new ImageDB (this, ImageDB.imageDirName); + private PermanentDB permanentDB = new PermanentDB (this); + private InseeDB inseeDB; + private User user = new User (); + private boolean + handleGlue = Config.getBoolean ("HandleGlue", true), + boundGlue = Config.getBoolean ("BoundGlue", true), + gridGlue = Config.getBoolean ("GridGlue", true), + inSegmentGlue = Config.getBoolean ("InSegmentGlue", true); + + public User getUser () { return user; } + public PermanentDB getPermanentDB () { return permanentDB; } + public ImageDB getIconDB () { return iconDB; } + public ImageDB getImageDB () { return imageDB; } + public InseeDB getInseeDB () { return inseeDB; } + public Hashtable> getNamedRoots () { return permanentDB.namedRoots; } + public boolean getHandleGlue () { return handleGlue; } + public boolean getBoundGlue () { return boundGlue; } + public boolean getGridGlue () { return gridGlue; } + public boolean getInSegmentGlue () { return inSegmentGlue; } + public void setHandleGlue (boolean handleGlue) { Config.setBoolean ("HandleGlue", this.handleGlue = handleGlue); } + public void setBoundGlue (boolean boundGlue) { Config.setBoolean ("BoundGlue", this.boundGlue = boundGlue); } + public void setGridGlue (boolean gridGlue) { Config.setBoolean ("GridGlue", this.gridGlue = gridGlue); } + public void setInSegmentGlue (boolean inSegmentGlue) { Config.setBoolean ("InSegmentGlue", this.inSegmentGlue = inSegmentGlue); } + + // ======================================== + public AdecWatt () { + reset (); + } + + public void reloadSoft () { + if (JOptionPane.showConfirmDialog (null, Bundle.getMessage ("UpdateSoft"), + Bundle.getTitle ("UpdateSoft"), + JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) + return; + File softDir = new File (Config.getPWD ().getParentFile (), "soft"); + File jar = new File (softDir, "UpdatedAdecWatt.jar"); + RemoteUpdate.launch (jar); + } + + public void reset () { + File dir = Config.getPWD ().getParentFile (); + RemoteUpdate.renameNewFile (dir); + if (RemoteUpdate.newFileExists (dir)) + reloadSoft (); + iconDB.reload (); + imageDB.reload (); + permanentDB.reload (); + inseeDB = InseeDB.readDocument (Config.getDataUrl ("data", "server", "Insee.xml")); + broadcastUpdate (BroadcastUnitRoots); + } + + public void updateStory () { + broadcastUpdate (BroadcastStory); + } + + + // ======================================== + public void newNamePlan () { + TreeMap iconMap = iconDB.newNamePlan (); + TreeMap imageMap = imageDB.newNamePlan (); + permanentDB.newNamePlan (iconMap, imageMap); + saveAll (); + } + + // ======================================== + public boolean getModified () { + for (Unit unit : permanentDB.idUnit.values ()) + if (unit.story.isModified ()) + return true; + return false; + } + + // ======================================== + public void saveAll () { + for (Unit root : permanentDB.namedRoots.values ()) { + // if (root.story.isModified ()) + // root.save (); + for (Enumeration e = root.unitNode.depthFirstEnumeration (); e.hasMoreElements (); ) { + Unit unit = ((UnitNode) e.nextElement ()).getUnit (); + if (unit.story.isModified ()) + unit.save (); + } + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/Circuits.java b/src/java/adecWatt/model/Circuits.java new file mode 100644 index 0000000..7c9e3e4 --- /dev/null +++ b/src/java/adecWatt/model/Circuits.java @@ -0,0 +1,171 @@ +package adecWatt.model; + +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Set; +import java.util.TreeSet; + +import adecWatt.model.unit.Building; +import adecWatt.model.unit.Workspace; + +public class Circuits { + + static public enum State { + PLUG, LOOP, SHORTCUT, UNPLUG; + } + static public String SHORTCUT = "Shortcut"; + static public String UNPLUG = "Unplug"; + static public String CIRCUITLESS = "Circuitless"; + + static public Comparator lineComparator = + new Comparator () { + public int compare (String s1, String s2) { + if (s1 == s2) + return 0; + try { + int i1 = Integer.parseInt (s1); + int i2 = Integer.parseInt (s2); + return i1-i2; + } catch (Exception e) { + } + return s1.compareTo (s2); + } + }; + + static public class Circuit { + HashSet nodes = new HashSet (); + TreeSet names = new TreeSet (lineComparator); + int consumption; + Circuit (HashSet nodes, String name, int consumption) { + add (nodes, name, consumption); + } + void add (HashSet nodes, String name, int consumption) { + this.nodes.addAll (nodes); + this.consumption += consumption; + if (name == null || name.isEmpty ()) + return; + names.add (name); + } + } + + private HashSet loop = new HashSet (); + private HashMap allCircuits = new HashMap (); + private HashSet plugedComps; + + public Set keySet () { return allCircuits.keySet (); } + public Circuit get (Comp lastComp) { return allCircuits.get (lastComp); } + public HashSet getPlugedComps () { return plugedComps; } + public boolean inLoop (Acc acc) { return loop.contains (acc); } + + public Circuits (HashMap linked, HashSet plugedComps) { + this (linked); + this.plugedComps = plugedComps; + } + public Circuits (HashMap linked) { + loopStart: + for (Acc beginAcc : linked.keySet ()) { + Comp beginComp = (Comp) beginAcc.getContainer (); + int consumption = (int) beginAcc.getWatt (beginComp); + HashSet nodes = new HashSet (); + nodes.add (beginAcc); + String name = beginAcc.getCircuit (beginComp); + Comp lastComp = null; + parseThread: + for (;;) { + Comp nextComp = linked.get (beginAcc); + if (nextComp == null) + break; + lastComp = nextComp; + for (String nextAccId : nextComp.getEmbeddedIds ()) + try { + Acc nextAcc = nextComp.findEmbedded (nextAccId); + if (nextAcc.getConnectedTo () == null) + continue; + if (nodes.contains (nextAcc)) { + loop.addAll (nodes); + continue loopStart; + } + nodes.add (nextAcc); + beginAcc = nextAcc; + continue parseThread; + } catch (Exception e) { + } + break; + } + Circuit circuit = allCircuits.get (lastComp); + if (circuit == null) { + allCircuits.put (lastComp, new Circuit (nodes, name, consumption)); + continue; + } + circuit.add (nodes, name, consumption); + } + } + + static public Circuits getCircuits (Workspace workspace, String plugId) { + Hashtable namedComps = new Hashtable (); + for (Item item : workspace.getInheritedEmbeddedValues ()) + try { + namedComps.put (item.getId (), (Comp) item); + } catch (Exception e) { + } + Building building = workspace.getBuilding (); + if (building != null) + for (Item item : building.getInheritedEmbeddedValues ()) + try { + namedComps.putIfAbsent (item.getId (), (Comp) item); + } catch (Exception e) { + } + HashSet plugedComps = new HashSet (); + HashMap linked = new HashMap (); + for (Comp beginComp : namedComps.values ()) { + if (beginComp.isReserved ()) + continue; + for (String accId : beginComp.getEmbeddedIds ()) + try { + Acc beginAcc = beginComp.findEmbedded (accId); + if (beginAcc.getDirectUnit ().isDescendingFrom (plugId)) + plugedComps.add (beginComp); + Comp nextComp = namedComps.get (beginAcc.getConnectedTo ()); + linked.put (beginAcc, nextComp); + } catch (Exception e) { + } + } + return new Circuits (linked, plugedComps); + } + + static public class CircuitState { + public String name; + public State state; + public CircuitState (State state, String name) { + this.name = name; + this.state = state; + } + } + + public CircuitState getState (Comp comp, Acc acc) { + if (acc == null) + return null; + String circuitName = acc.getCircuit (comp); + if (loop.contains (acc)) + return new CircuitState (State.LOOP, circuitName); + for (Comp lastComp : allCircuits.keySet ()) { + Circuit circuit = allCircuits.get (lastComp); + if (!circuit.nodes.contains (acc)) + continue; + switch (circuit.names.size ()) { + case 0: + return null; + case 1: + // XXX limitation pour doublette ? + // if (circuitName == null) + // return null; + return new CircuitState (lastComp.getLine () == null ? State.UNPLUG : State.PLUG, circuit.names.first ()); + default: + return new CircuitState (State.SHORTCUT, circuitName); + } + } + return circuitName == null ? null : new CircuitState (State.UNPLUG, circuitName); + } +} diff --git a/src/java/adecWatt/model/Comp.java b/src/java/adecWatt/model/Comp.java new file mode 100644 index 0000000..4930f50 --- /dev/null +++ b/src/java/adecWatt/model/Comp.java @@ -0,0 +1,121 @@ +package adecWatt.model; + +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.geom.Point2D; +import java.util.Collection; +import java.util.HashSet; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.DimensionDouble; +import misc.ScaledImage; +import adecWatt.model.unit.NonWorkspace; +import adecWatt.model.unit.Workspace; +import adecWatt.model.xml.XmlComp; + +public class Comp extends Item { + // ======================================== + public int available; + + // ======================================== + public Collection getModifiersSet () { return CompModifiersSet; } + public CompTypeEnum getTypeToken () { return CompTypeEnum.Component; } + public CompAttrEnum getNameToken () { return CompAttrEnum.Name; } + public CompAttrEnum getModifierToken () { return CompAttrEnum.Modifier; } + public CompAttrEnum getPlaceIdToken () { return CompAttrEnum.Placeid; } + public CompAttrEnum getModelToken () { return CompAttrEnum.Model; } + + public Comp getLink (Editable workspace) { return new Comp (name, placeId, (Workspace) workspace, model); } + + // ======================================== + public Comp (Workspace workspace, XmlComp xmlComp) { + super (workspace, xmlComp); + try { + available = Integer.parseInt (xmlComp.getFacet (CompAttrEnum.Available)); + } catch (Exception e) { + } + } + public Comp (String name, String placeName, Workspace workspace, NonWorkspace model) { + super (name, placeName, workspace, model); + } + public Comp (Workspace workspace, NonWorkspace model) { + super (null, null, workspace, model); + } + public Comp clone (Workspace workspace) { + Comp result = new Comp (workspace, model); + result.importFrom (this); + return result; + } + + // ======================================== + public Element getXml (Node parent, Document document) { + Element child = super.getXml (parent, document); + if (isReserved ()) + XmlComp.putFacet (child, CompAttrEnum.Available, ""+available); + return child; + } + + // ======================================== + public void changeThetaDegree (double thetaDegree) { + if (isSticky ()) + return; + getLocalProp (Prop.PropRot, Prop.PropTypeEnum.Cube).setThetaDegree (thetaDegree); + } + public void changeSize (DimensionDouble size) { + if (isSticky ()) + return; + getLocalProp (Prop.PropSize, Prop.PropTypeEnum.Cube).setSize (size); + } + + // ======================================== + public String getLine () { + try { + String name = getPropVal (Prop.PropLine).sValue; + if (!name.isEmpty ()) + return name; + } catch (Exception e) { + } + return null; + } + + // ======================================== + public HashSet allPlugs = new HashSet (); + public static String plugId; + + public void print (Graphics2D printGraphics, Workspace workspace, String plugId) { + this.plugId = plugId; + print (printGraphics, workspace, getPos (), getSize (), getThetaDegree ()); + } + + public void print (Graphics2D printGraphics, Workspace workspace, Point2D pos, DimensionDouble size, double thetaDegree) { + accCenter.clear (); + accSize.clear (); + allPlugs.clear (); + ScaledImage scaledImage = getIcon (); + if (isLow ()) { + ScaledImage scaledLowImage = getLowIcon (); + if (scaledLowImage != null) + scaledImage = scaledLowImage; + } + Color compColor = getColor (); + if (compColor != null) + scaledImage = getAdecWatt ().getIconDB ().getColoredScaledImages (scaledImage, compColor); + Workspace.printImage (printGraphics, scaledImage, pos, size, thetaDegree, getTileSize ()); + double minSide = Math.min (size.width, size.height); + Workspace.printText (printGraphics, getLabel (), getLabelColor (), pos, new DimensionDouble (minSide, minSide)); + for (String accId : getEmbeddedIds ()) + try { + Acc acc = findEmbedded (accId); + acc.print (printGraphics, this); + if (acc.getDirectUnit ().isDescendingFrom (plugId)) { + workspace.addPlugedComps (this); + allPlugs.add (acc); + } + } catch (Exception e) { + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/Editable.java b/src/java/adecWatt/model/Editable.java new file mode 100644 index 0000000..7f3c40c --- /dev/null +++ b/src/java/adecWatt/model/Editable.java @@ -0,0 +1,1095 @@ +package adecWatt.model; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.geom.Point2D; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.Vector; +import javax.swing.ImageIcon; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.DimensionDouble; +import misc.ScaledImage; +import misc.Story; +import misc.Util; + +import adecWatt.model.unit.Building; +import adecWatt.model.xml.*; + +public abstract class Editable

, + T extends Enum, + A extends Enum, + E extends Embedded> + extends Permanent { + // ======================================== + static public final String + StoryAddAcc = "AddAcc", + StoryAddItem = "AddItem", + StoryAddProp = "AddProp", + StoryAddSpinProp = "AddSpinProp", + StoryChangeBuilding = "ChangeBuilding", + StoryChangeEnum = "ChangeEnum", + StoryChangeLabels = "ChangeLabels", + StoryChangeModifiers = "ChangeModifiers", + StoryChangeName = "ChangeName", + StoryChangeParent = "ChangeParent", + StoryChangeSpin = "ChangeSpin", + StoryChangeType = "ChangeType", + StoryChangeValue = "ChangeValue", + StoryClearProp = "ClearProp", + StoryCloneItem = "CloneItem", + StoryConnectAcc = "ConnectAcc", + StoryEdit = "Edit", + StoryHideItem = "HideItem", + StoryLinkAcc = "LinkAcc", + StoryLinkEmb = "LinkEmb", + StoryLinkItem = "LinkItem", + StoryMoveItem = "MoveItem", + StoryOrderedProp = "OrderedProp", + StoryPasteItem = "PasteItem", + StoryRemoveAcc = "RemoveAcc", + StoryRemoveEnum = "RemoveEnum", + StoryRemoveItem = "RemoveItem", + StoryRemoveLabels = "RemoveLabels", + StoryRemoveProp = "RemoveProp", + StoryRotItem = "RotItem", + StoryRotResizeItem = "RotResizeItem", + StorySelectItem = "SelectItem", + StoryTransform = "Transform"; + + // ======================================== + protected Hashtable ownProps = new Hashtable (); + protected String embeddedPrefix = "c"; // XXX dans Unit et pas dans comp + private int embIdCount; + protected Hashtable embedded; + + // ======================================== + public abstract AdecWatt getAdecWatt (); + public abstract String getId (); + public abstract Editable getParent (); + public abstract Unit getDirectUnit (); + public abstract Unit getParentUnit (); + public abstract Unit getStoryUnit (); + public abstract Editable getModel (); + public Editable getContainer () { return null; } + + // public boolean hasChild (String childName) { return false; } + public E getLocalEmbedded (String id) { return embedded == null ? null : embedded.get (id); } + public Hashtable getLocalEmbedded () { return embedded; } + + public abstract void setParentUnit (Unit parent); + + public boolean match (String text) { + return + Util.removeAccent (getName ()).toLowerCase ().indexOf (text) >= 0 || + Util.removeAccent (getLocalName ()).toLowerCase ().indexOf (text) >= 0 || + getId ().indexOf (text) >= 0; + } + + public boolean parentMatch (String text) { + for (Editable editable = this; editable != null; editable = editable.getParentUnit ()) + if (editable.match (text)) + return true; + return false; + } + + // ======================================== + private ArrayList reservedEmbName; + private boolean isReservedEmbName (String name) { + return reservedEmbName != null && reservedEmbName.contains (name); + } + private void reservedEmbName (String name) { + if (reservedEmbName == null) + reservedEmbName = new ArrayList (); + reservedEmbName.add (name); + } + private void freeEmbName (String name) { + if (reservedEmbName == null) + return; + reservedEmbName.remove (name); + if (reservedEmbName.size () == 0) + reservedEmbName = null; + } + public String getUniqName () { + String thisId = getId (); + for (; ; embIdCount++) { + String embeddedName = embeddedPrefix+embIdCount; + if (embedded != null && embedded.containsKey (thisId+":"+embeddedName)) + continue; + if (isReservedEmbName (embeddedName)) + continue; + reservedEmbName (embeddedName); + return embeddedName; + } + } + @SuppressWarnings ("unchecked") + public E getCloseEmbedded (E emb) { + if (embedded == null) + embedded = new Hashtable (); + E result = embedded.get (emb.getId ()); + if (result == null) + // attention emb doit exister ! + result = (E) emb.getLink (this); + return result; + } + @SuppressWarnings ("unchecked") + public E findEmbedded (String id) { + for (Editable editable = this; + editable != null; + editable = editable.getParent ()) { + E emb = editable.getLocalEmbedded (id); + if (emb != null) + return emb; + } + Editable model = getModel (); + if (model != null) + for (Editable editable = (Editable) model; + editable != null; + editable = editable.getParent ()) { + E emb = editable.getLocalEmbedded (id); + if (emb != null) + return emb; + } + return null; + } + public E findEmbeddedRootOf (Unit model) { + for (String embId : getEmbeddedIds ()) { + E emb = findEmbedded (embId); + if (emb == null || !model.isDescendingFrom (emb.getModel ().getId ())) + continue; + return emb; + } + return null; + } + + public E findEmbeddedBaseOn (String parentId) { + for (String embId : getEmbeddedIds ()) { + E emb = findEmbedded (embId); + if (emb == null || !emb.getDirectUnit ().isDescendingFrom (parentId)) + continue; + return emb; + } + return null; + } + + public TreeSet getEmbeddedIds () { + TreeSet result = new TreeSet (); + for (Editable editable = this; editable != null; editable = editable.getParent ()) { + if (editable.embedded == null) + continue; + result.addAll (editable.embedded.keySet ()); + } + Editable model = getModel (); + if (model != null) + for (Editable editable = model; editable != null; editable = editable.getParent ()) { + if (editable.embedded == null) + continue; + result.addAll (editable.embedded.keySet ()); + } + return result; + } + + // ======================================== + public void addEmbedded (E emb) { + if (embedded == null) + embedded = new Hashtable (); + String embId = emb.getId (); + if (embedded.get (embId) != null) + System.err.println ("Already embedded name recorded ("+embId+" = "+emb.getName ()+" in "+name+")."); + embedded.put (embId, emb); + freeEmbName (embId); + } + public void removeEmbedded (E emb) { + if (embedded == null) + return; + embedded.remove (emb.getId ()); + } + public Collection getInheritedEmbeddedValues () { + Hashtable inherited = getInheritedEmbedded (); + if (inherited == null) + return new Vector (); + return inherited.values (); + } + + @SuppressWarnings ("unchecked") + public Hashtable getInheritedEmbedded () { + Editable parent = getParent (); + if (parent == null) + return embedded; + Hashtable result = parent.getInheritedEmbedded (); + if (result == null) + return embedded; + if (embedded == null) + return result; + result = (Hashtable) result.clone (); + // for (String key : embedded.keySet ()) + // result.put (key, embedded.get (key)); + result.putAll (embedded); + return result; + } + @SuppressWarnings ("unchecked") + public Hashtable getAllEmbedded () { + // + + // si workspace le dernier building dans les getparentunit + // si comp le dernier modèle dans le + Editable pattern = getModel (); + Hashtable result = getInheritedEmbedded (); + if (pattern == null) + return result; + Hashtable resultP = (Hashtable) pattern.getInheritedEmbedded (); + if (result == null) + return resultP; + if (resultP == null) + return result; + resultP = (Hashtable) resultP.clone (); + resultP.putAll (result); + return resultP; + } + + public abstract void storyChange (Story.Commands commands, ArrayList changeProps); + public abstract void storyTransform (Story.Commands commands, Collection modifiers, Unit permanent, String newName, ArrayList transProps); + public void storyTransform (Collection modifiers, Unit permanent, String newName, ArrayList transProps) { + Story story = getStoryUnit ().story; + Story.Commands commands = story.new Commands (StoryTransform) { + public void display () { updateView (); } + }; + storyTransform (commands, modifiers, permanent, newName, transProps); + story.add (commands); + } + + // ======================================== + protected Editable () { + } + protected Editable (P xmlPermanent) { + super (xmlPermanent); + collectOwnProps (); + } + protected void initXml (P xmlPermanent) { + super.initXmlAvantOwnProp (xmlPermanent); + collectOwnProps (); + } + public void collectEmbedded () { + if (xmlPermanent == null) + return; + for (XmlAcc xmlAcc : xmlPermanent.getAccs ()) { + Acc acc = new Acc (this, xmlAcc); + acc.fixName (false); + } + } + + // ======================================== + public void importFrom (Editable from) { + super.importFrom (from); + for (String propName : from.ownProps.keySet ()) + ownProps.putIfAbsent (propName, from.ownProps.get (propName).clone ()); + if (from.embedded == null) + return; + if (embedded == null) + embedded = new Hashtable (); + // XXX ??? n'y a-t-il pas partage des emb ? + for (String embId : from.embedded.keySet ()) + embedded.putIfAbsent (embId, from.embedded.get (embId)); + } + + public void newNamePlan (HashSet> visited, TreeMap iconMap, TreeMap imageMap) { + if (visited.contains (this)) + return; + visited.add (this); + if (embedded != null) + for (E emb : embedded.values ()) + emb.newNamePlan (visited, iconMap, imageMap); + Story story = getStoryUnit ().story; + Story.Commands commands = story.new Commands (StoryEdit) { + public void display () { } + }; + for (String propName : ownProps.keySet ()) { + final Prop prop = getPropVal (propName); + if (prop == null) + continue; + TreeMap map = null; + switch (prop.getTypeToken ()) { + case Icon: + map = iconMap; + break; + case Image: + map = imageMap; + break; + default: + continue; + } + final String newValue = map.get (prop.sValue); + if (newValue == null) + continue; + commands.add (story.new Command (StoryChangeValue+" "+prop.name) { + String oldValue = prop.sValue; + public void exec () { prop.setValue (newValue); } + public void undo () { prop.setValue (oldValue); } + }); + } + story.add (commands); + } + public boolean renameUnits (TreeMap translateMap) { + Editable parent = getParent (); + boolean result = parent != null && translateMap.containsValue (parent.getId ()); + if (embedded != null) + for (E emb : embedded.values ()) + result |= emb.renameUnits (translateMap); + for (String propName : ownProps.keySet ()) { + Prop prop = getPropVal (propName); + if (prop == null) + continue; + switch (prop.getTypeToken ()) { + case Text: + case Building: + String newVal = translateMap.get (prop.sValue); + if (newVal != null) { + prop.sValue = newVal; + result = true; + continue; + } + int idx = prop.sValue.indexOf (":"); + if (idx < 0) + continue; + newVal = translateMap.get (prop.sValue.substring (0, idx)); + if (newVal == null) + continue; + prop.sValue = newVal+prop.sValue.substring (idx); + result = true; + } + } + return result; + } + public boolean renameImages (TreeMap translateMap) { + boolean result = false; + if (embedded != null) + for (E emb : embedded.values ()) + result |= emb.renameImages (translateMap); + for (String propName : ownProps.keySet ()) { + Prop prop = getPropVal (propName); + if (prop == null) + continue; + switch (prop.getTypeToken ()) { + case Icon: + case Image: + String newVal = translateMap.get (Util.getBase (prop.sValue)); + if (newVal == null) + continue; + prop.sValue = newVal; + result = true; + break; + } + } + return result; + } + public void getLocalLink (HashSet> visited, + HashSet> unitLinks, TreeSet iconsLinks, TreeSet imagesLinks) { + if (visited.contains (this)) + return; + visited.add (this); + if (embedded != null) + for (E emb : embedded.values ()) + emb.getLocalLink (visited, unitLinks, iconsLinks, imagesLinks); + for (String propName : ownProps.keySet ()) { + Prop prop = getPropVal (propName); + if (prop == null) + continue; + switch (prop.getTypeToken ()) { + case Icon: + if (!getAdecWatt ().getIconDB ().isRemote (prop.sValue)) + iconsLinks.add (prop.sValue); + break; + case Image: + if (!getAdecWatt ().getImageDB ().isRemote (prop.sValue)) + imagesLinks.add (prop.sValue); + break; + case Building: + Building building = getBuilding (); + if (building == null) + continue; + building.getLocalLink (visited, unitLinks, iconsLinks, imagesLinks); + break; + } + } + } + + // ======================================== + public void removeOwnProp (String propName) { + ownProps.remove (propName); + } + + public void collectOwnProps () { + for (XmlProp xmlProp : xmlPermanent.getProps ()) { + Prop prop = new Prop (xmlProp); + ownProps.put (prop.name, prop); + } + } + public Prop getOwnProp (String propName) { + return ownProps.get (propName); + } + public ArrayList getOrderedOwnProps () { + return Prop.getOrderedProps (ownProps.values ()); + } + public ArrayList getOrderedPropsName () { + Unit parent = getParentUnit (); + ArrayList result = parent == null ? new ArrayList () : parent.getOrderedPropsName (); + for (Prop prop : getOrderedOwnProps ()) { + if (result.contains (prop.name)) + continue; + result.add (prop.name); + } + return result; + } + + public Element getXml (Node parent, Document document) { + Element child = super.getXml (parent, document); + ArrayList tmp = new ArrayList (ownProps.values ()); + tmp.sort (Prop.propComparator); + for (Prop prop : tmp) + prop.getXml (child, document); + if (embedded != null) + for (String embId : embedded.keySet ()) + embedded.get (embId).getXml (child, document); + return child; + } + + // ======================================== + public ScaledImage getIconFromFileName (String fileName, boolean horizontalSpin) { + return getAdecWatt ().getIconDB ().getImage (fileName, horizontalSpin); + } + public ScaledImage getImageFromFileName (String fileName, boolean horizontalSpin) { + return getAdecWatt ().getImageDB ().getImage (fileName, horizontalSpin); + } + public ImageIcon getIcon (int max) { + ScaledImage scaledIcon = getIcon (); + return scaledIcon == null ? null : scaledIcon.getSide (max); + } + + // ======================================== + public interface ComputeProp { + public R applyOnProp (Prop prop); + } + public R parentWalk (String propName, ComputeProp computeProp, boolean skipFirst) { + for (Editable editable = skipFirst ? getParent () : this; + editable != null; + editable = editable.getParent ()) + try { + R result = computeProp.applyOnProp (editable.ownProps.get (propName)); + if (result != null) + return result; + } catch (Exception e) { + } + return null; + } + public R parentAndModelWalk (String propName, ComputeProp computeProp, boolean skipFirst) { + R result = parentWalk (propName, computeProp, skipFirst); + if (result != null) + return result; + try { + result = getContainer ().getModel ().findEmbedded (getId ()).parentWalk (propName, computeProp, false); + if (result != null) + return result; + } catch (Exception e) { + } + try { + result = getModel ().parentWalk (propName, computeProp, false); + if (result != null) + return result; + } catch (Exception e) { + } + return null; + } + + // ======================================== + public Collection getPropModifiers (String propName) { + return getPropModifiers (propName, false); + } + public Collection getParentPropModifiers (String propName) { + return getPropModifiers (propName, true); + } + public Collection getPropModifiers (String propName, boolean skipFirst) { + return parentAndModelWalk (propName, new ComputeProp> () { + public Collection applyOnProp (Prop prop) { + return prop.modifiers; + } + }, skipFirst); + } + public String getPropModifiers (final String modifier, String propName) { + return parentAndModelWalk (propName, new ComputeProp () { + public String applyOnProp (Prop prop) { + if (prop.modifiers.contains (modifier)) + return modifier; + return null; + } + }, false); + } + public Collection getPropEnumChoice (String propName) { + return parentAndModelWalk (propName, new ComputeProp> () { + public Collection applyOnProp (Prop prop) { + if (prop != null && prop.enumChoice != null) + return prop.enumChoice; + return null; + } + }, false); + } + public List getPropLabel (String propName) { + return parentAndModelWalk (propName, new ComputeProp> () { + public List applyOnProp (Prop prop) { + return prop.multiLabel; + } + }, false); + } + public Prop getPropVal (String propName) { + return getPropVal (propName, false); + } + public Prop getParentPropVal (String propName) { + return getPropVal (propName, true); + } + public Prop getPropVal (String propName, boolean skipFirst) { + return parentAndModelWalk (propName, new ComputeProp () { + public Prop applyOnProp (Prop prop) { + if (prop != null && prop.sValue != null) // XXX et "".equals... + return prop; + return null; + } + }, skipFirst); + } + public Prop getProp (String propName) { + return getProp (propName, false); + } + public Prop getParentProp (String propName) { + return getProp (propName, true); + } + public Prop getProp (String propName, boolean skipFirst) { + return parentAndModelWalk (propName, new ComputeProp () { + public Prop applyOnProp (Prop prop) { + return prop; + } + }, skipFirst); + } + public Double[] getPartialProp (String propName, Double[] result) { + return getPartialProp (propName, result, false); + } + public Double[] getParentPartialProp (String propName, Double[] result) { + return getPartialProp (propName, result, true); + } + public Double[] getPartialProp (String propName, final Double[] result, boolean skipFirst) { + return parentAndModelWalk (propName, new ComputeProp () { + public Double[] applyOnProp (Prop prop) { + // XXX test nbVal >= result.length + if (prop != null && prop.values != null) { + boolean complete = true; + for (int i = 0; i < result.length; i++) + if (result [i] == null) { + if (prop.values [i] != null) { + result [i] = prop.values [i]; + continue; + } + complete = false; + } + if (complete) + return result; + } + return null; + } + }, skipFirst); + } + // ======================================== + public interface ComputeSpin { + public boolean getSpin (Prop prop); + } + public boolean parentSpinWalk (String propName, ComputeSpin computeSpin, boolean skipFirst) { + boolean spin = false; + for (Editable editable = skipFirst ? getParent () : this; + editable != null; + editable = editable.getParent ()) + try { + spin ^= computeSpin.getSpin (editable.ownProps.get (propName)); + } catch (Exception e) { + } + return spin; + } + public boolean parentAndModelSpinWalk (String propName, ComputeSpin computeSpin, boolean skipFirst) { + boolean spin = parentSpinWalk (propName, computeSpin, skipFirst); + try { + spin ^= getContainer ().getModel ().findEmbedded (getId ()).parentSpinWalk (propName, computeSpin, false); + } catch (Exception e) { + } + try { + spin ^= getModel ().parentSpinWalk (propName, computeSpin, false); + } catch (Exception e) { + } + return spin; + } + public boolean getPropHorizontalSpin (String propName) { + return getPropHorizontalSpin (propName, false); + } + public boolean getParentPropHorizontalSpin (String propName) { + return getPropHorizontalSpin (propName, true); + } + public boolean getPropHorizontalSpin (String propName, boolean skipFirst) { + return parentSpinWalk (propName, new ComputeSpin () { + public boolean getSpin (Prop prop) { + return prop.horizontalSpin; + } + }, skipFirst); + } + + // ======================================== + public boolean getPropHidden (String propName) { + return getPropModifiers (Permanent.Hidden, propName) != null; + } + public boolean getPropLock (String propName) { + return getPropModifiers (Permanent.Lock, propName) != null; + } + public boolean getPropLocalized (String propName) { + return getPropModifiers (Permanent.Localized, propName) != null; + } + public boolean getPropNoMouse (String propName) { + return getPropModifiers (Permanent.NoMouse, propName) != null; + } + public ScaledImage getIcon () { + return getIconImage (Prop.PropIcon); + } + public ScaledImage getLowIcon () { + return getIconImage (Prop.PropLowIcon); + } + public ScaledImage getBlueprint () { + return getIconImage (Prop.PropBlueprint); + } + public Double getBlueprintVisibility () { + try { + return getPropVal (Prop.PropBlueprintVisibility).values [0]; + } catch (Exception e) { + return null; + } + } + public DimensionDouble getBlueprintSize () { + return getSize (Prop.PropBlueprintSize); + } + public Point2D.Double getBlueprintPos () { + return getPos (Prop.PropBlueprintPos); + } + public ScaledImage getIconImage (String propName) { + return getIconImage (getPropVal (propName), getPropHorizontalSpin (propName)); + } + public ScaledImage getIconImage (Prop iconImageProp, boolean horizontalSpin) { + if (iconImageProp == null) + return null; + switch (iconImageProp.getTypeToken ()) { + case Icon: + return getAdecWatt ().getIconDB ().getImage (iconImageProp.sValue, horizontalSpin); + case Image: + return getAdecWatt ().getImageDB ().getImage (iconImageProp.sValue, horizontalSpin); + default: + throw new IllegalArgumentException ("Bad type ("+iconImageProp.getTypeToken ()+") for icon or image!"); + } + } + private Double dummy; + protected Double [] + seek12 = new Double[] {null, null}, + seek3 = new Double[] {dummy, dummy, null}; + public DimensionDouble getRealSize () { + return getSize (); + } + + // ======================================== + public DimensionDouble getSize () { + return getSize (Prop.PropSize); + } + public Double[] getTileSize () { + Double [] seek = seek12.clone (); + getPartialProp (Prop.PropTileSize, seek); + if (seek[0] == null && seek[1] == null) + return null; + return seek; + } + static public Dimension getTile (Double [] tileSize, DimensionDouble realSize) { + return tileSize == null ? ScaledImage.ONE_TILE : + new Dimension (tileSize[0] == null ? 1 : (int) Math.max (1, Math.round (realSize.width/tileSize[0])), + tileSize[1] == null ? 1 : (int) Math.max (1, Math.round (realSize.height/tileSize[1]))); + } + public DimensionDouble getSize (String propName) { + Double [] seek = seek12.clone (); + getPartialProp (propName, seek); + if (seek[0] == null || seek[1] == null) + return null; + return new DimensionDouble (seek [0], seek [1]); + } + public Point2D.Double getPos () { + return getPos (Prop.PropPos); + } + public Point2D.Double getPos (String propName) { + Double [] seek = seek12.clone (); + getPartialProp (propName, seek); + if (seek[0] == null || seek[1] == null) + return null; + return new Point2D.Double (seek [0], seek [1]); + } + public double getThetaDegree () { + try { + Double [] seek = seek3.clone (); + getPartialProp (Prop.PropRot, seek); + return seek [2]; + } catch (Exception e) { + return 0; + } + } + public double getLevel () { + try { + Double [] seek = seek3.clone (); + getPartialProp (Prop.PropPos, seek); + return seek [2]; + } catch (Exception e) { + return 0; + } + } + public double getLength () { + try { + return getPropVal (Prop.PropLength).values[0]; + } catch (Exception e) { + return 0; + } + } + public double getWidth () { + try { + return getPropVal (Prop.PropWidth).values[0]; + } catch (Exception e) { + return 0; + } + } + public double getAngle () { + try { + return getPropVal (Prop.PropAngle).values[0]; + } catch (Exception e) { + return 0; + } + } + public String getStyle () { + try { + return getPropVal (Prop.PropStyle).sValue; + } catch (Exception e) { + return null; + } + } + public String getBegin () { + try { + return getPropVal (Prop.PropBegin).sValue; + } catch (Exception e) { + return null; + } + } + public String getEnd () { + try { + return getPropVal (Prop.PropEnd).sValue; + } catch (Exception e) { + return null; + } + } + public boolean isLow () { + return getLevel () <= AdecWatt.lowLevel; + } + public Building getBuilding () { + try { + return (Building) getAdecWatt ().getPermanentDB ().getUnitById (getProp (Prop.PropBuilding).sValue); + } catch (Exception e) { + return null; + } + } + public Color getColor () { + try { + return LPColor.getColor (getPropVal (Prop.PropColor).sValue); + } catch (Exception e) { + return Color.black; + } + } + public String getConnectedTo () { + try { + return getPropVal (Prop.PropConnectedTo).sValue; + } catch (Exception e) { + return null; + } + } + public String getConnectedOn () { + try { + return getPropVal (Prop.PropConnectedOn).sValue; + } catch (Exception e) { + return null; + } + } + + // ======================================== + public abstract void updateView (); + + // ======================================== + public void validateContainer (Story.Commands commands, String commandName) { + // unit has no container + } + + // ======================================== + protected void storyChange (Story.Commands commands, boolean comp, final Hashtable ownProps, ArrayList changeProps) { + Story story = commands.getStory (); + validateContainer (commands, StoryLinkEmb); + for (Prop[] changeProp : changeProps) { + final Prop type = changeProp[0]; + Prop parentVal = changeProp[1]; + final Prop src = changeProp [2]; + final Prop dst = changeProp [3] == null ? null : changeProp [3].getApplyMixProp (src, parentVal); + if (dst != null && dst.sValue == Prop.PropMix) + continue; + boolean isParentValue = Prop.isSValue (parentVal); + boolean isDstValue = Prop.isSValue (dst); + boolean changeParentValue = + isParentValue != isDstValue || (isDstValue && !dst.sValue.equals (parentVal.sValue)); + if (src == dst && changeParentValue) + continue; + boolean dstSpin = dst != null && dst.horizontalSpin; + // add + if (src == null) { + if (isDstValue && changeParentValue) { + commands.add (story.new Command (StoryAddProp+" "+dst.name) { + public void exec () { ownProps.put (dst.name, dst); } + public void undo () { ownProps.remove (dst.name); } + }); + continue; + } + if (!dstSpin) + continue; + final Prop newSpin = new Prop (dst.name, dst.getTypeToken (), dst.horizontalSpin); + commands.add (story.new Command (StoryAddSpinProp+" "+newSpin.name) { + public void exec () { ownProps.put (newSpin.name, newSpin); } + public void undo () { ownProps.remove (newSpin.name); } + }); + continue; + } + boolean srcSpin = src != null && (src.horizontalSpin); + boolean changeSpin = (srcSpin != dstSpin) || + (srcSpin && dstSpin && src.horizontalSpin != dst.horizontalSpin); + // change + if (changeSpin) { + final boolean oldHorizontalSpin = src.horizontalSpin; + commands.add (story.new Command (StoryChangeSpin+" "+src.name) { + public void exec () { + src.horizontalSpin = dst.horizontalSpin; + } + public void undo () { + src.horizontalSpin = oldHorizontalSpin; + } + }); + } + if (isDstValue && changeParentValue) { + if (dst.sValue.equals (src.sValue)) + continue; + // XXX a tester si remove partiel de Prop.PropSize ou Prop.PropPos et rien chez parent + // XXX faire modif partiel de multilabel + // XXX peut impliquer un remove + commands.add (story.new Command (StoryChangeValue+" "+dst.name+"<"+src.sValue+","+dst.sValue+">") { + String newValue = dst.sValue; + String oldValue = src.sValue; + public void exec () { src.setValue (newValue); } + public void undo () { src.setValue (oldValue); } + }); + } + // XXX si unit && "name" + // => faire un backup du fichier... mais quand ? + // => refaire héritage => marquer les héritier direct a sauver (boolean changement parent) + // XXX si comp && si size = 0 ou pos hors du Workspace => remove + // XXX si unit ou dérivé dans des workspace && si size = 0 ou pos hors du Workspace => remove + + if (dstSpin || (isDstValue && changeParentValue)) + continue; + // remove + if (comp && (type.name.equals (Prop.PropSize) || type.name.equals (Prop.PropPos))) { + if (!isParentValue) + continue; + Double [] seek = seek12.clone (); + getParentPartialProp (type.name, seek); + if (seek[0] == null || seek[1] == null) + continue; + } + if (getParentProp (type.name) == null || + src.unknownSpin != null || + (src.enumChoice != null && (parentVal == null || !parentVal.getEnumString ().equals (src.getEnumString ()))) || + (src.multiLabel != null && (parentVal == null || !parentVal.getLabelString ().equals (src.getLabelString ()))) || + src.getModifiersString ().equals (getModifiersString (getPropModifiers (src.name))) ) { + final String oldValue = src.sValue; + if (oldValue == null || oldValue.isEmpty ()) + continue; + commands.add (story.new Command (StoryClearProp+" "+src.name) { + public void exec () { src.setValue (null); } + public void undo () { src.setValue (oldValue); } + }); + continue; + } + commands.add (story.new Command (StoryRemoveProp+" "+type.name) { + public void exec () { ownProps.remove (type.name); } + public void undo () { ownProps.put (type.name, src); } + }); + } + } + + // ======================================== + public void storyTransform (Story.Commands commands, final String newName, final Collection newModifiers, + final Unit permanent, final Hashtable ownProps, ArrayList transProps) { + Story story = commands.getStory (); + validateContainer (commands, StoryLinkEmb); + if (newName != null) { + final String oldName = getName (); + if (!newName.equals (oldName)) { + commands.add (story.new Command (StoryChangeName) { + // XXX incidance sur PermanentDB si root ou powerSocket ou powerPlug + public void exec () { Editable.this.name = newName; } + public void undo () { Editable.this.name = oldName; } + public void display () { getDirectUnit ().updateTree (); } + }); + } + } + if (newModifiers != null && !getModifiersString ().equals (getModifiersString (newModifiers))) { + final Collection oldModifiers = getModifiers (); + commands.add (story.new Command (StoryChangeModifiers) { + public void exec () { setModifiers (newModifiers); } + public void undo () { setModifiers (oldModifiers); } + }); + } + if (permanent != null) { + //System.err.println ("coucou change parent:"+getName ()+" => "+permanent.getName ()); + final Unit oldPermanent = getParentUnit (); + if (!(oldPermanent == permanent || + permanent == this || + getParent () == null)) + commands.add (story.new Command (StoryChangeParent) { + public void exec () { setParentUnit (permanent); } + public void undo () { setParentUnit (oldPermanent); } + public void display () { permanent.updateTree (); oldPermanent.updateTree (); getDirectUnit ().updateTree (); } + }); + } + if (transProps != null) { + ArrayList oldProps = new ArrayList (ownProps.values ()); + // change + for (Prop[] transProp : transProps) { + final Prop src = transProp [0]; + final Prop dst = transProp [1]; + if (src == null) + continue; + oldProps.remove (src); + if (src.rank == dst.rank) + continue; + if (src.rank == null || !src.rank.equals (dst.rank)) { + final Integer oldRank = src.rank; + commands.add (story.new Command (StoryOrderedProp+" "+src.name) { + public void exec () { src.rank = dst.rank; } + public void undo () { src.rank = oldRank; } + }); + } + if (!src.getModifiersString ().equals (dst.getModifiersString ())) { + final Collection oldModifiers = src.getModifiers (); + commands.add (story.new Command (StoryChangeModifiers+" "+src.name) { + public void exec () { src.setModifiers (dst.getModifiers ()); } + public void undo () { src.setModifiers (oldModifiers); } + }); + } + if (!src.name.equals (dst.name)) { + final String oldPropName = src.name; + final String newPropName = dst.name; + commands.add (story.new Command (StoryChangeName+" "+oldPropName+" "+newPropName) { + public void exec () { + if (ownProps.get (oldPropName) == src) + ownProps.remove (oldPropName); + src.name = newPropName; + ownProps.put (newPropName, src); + } + public void undo () { + if (ownProps.get (newPropName) == src) + ownProps.remove (newPropName); + src.name = oldPropName; + ownProps.put (oldPropName, src); + } + }); + } + if (src.getTypeToken () != dst.getTypeToken ()) { + final PropTypeEnum oldType = src.getTypeToken (); + final PropTypeEnum newType = dst.getTypeToken (); + commands.add (story.new Command (StoryChangeType+" "+src.name) { + public void exec () { src.setType (newType); } + public void undo () { src.setType (oldType); } + }); + } + if (!src.getEnumString ().equals (dst.getEnumString ())) { + final Collection oldEnum = src.enumChoice; + final Collection newEnum = dst.enumChoice; + commands.add (story.new Command (StoryChangeEnum+" "+src.name) { + public void exec () { src.enumChoice = newEnum; } + public void undo () { src.enumChoice = oldEnum; } + }); + } + if (!src.getLabelString ().equals (dst.getLabelString ())) { + final List oldLabels = src.multiLabel; + final List newLabels = dst.multiLabel; + commands.add (story.new Command (StoryChangeLabels+" "+src.name) { + public void exec () { src.multiLabel = newLabels; } + public void undo () { src.multiLabel = oldLabels; } + }); + } + } + // add + for (Prop[] transProp : transProps) { + Prop src = transProp [0]; + final Prop dst = transProp [1]; + if (src != null) + continue; + final Prop oldSrc = ownProps.get (dst.name); + if (oldSrc != null) { + oldProps.remove (oldSrc); + commands.add (story.new Command (StoryRemoveProp+" "+dst.name) { + public void exec () { ownProps.remove (dst.name); } + public void undo () { ownProps.put (dst.name, oldSrc); } + }); + } + commands.add (story.new Command (StoryAddProp+" "+dst.name) { + public void exec () { ownProps.put (dst.name, dst); } + public void undo () { ownProps.remove (dst.name); } + }); + } + // clean + Unit parent = getParentUnit (); + for (final Prop prop : oldProps) { + // if (prop.enumChoice == null && (parent != null && parent.getProp (prop.name) != null)) + // // XXX enum # parent aussi ? + // continue; + // XXX Et si plus de prop (masquée) ? + if (prop.sValue != null || prop.horizontalSpin) { + final Collection enumChoice = prop.enumChoice; + if (enumChoice != null) + commands.add (story.new Command (StoryRemoveEnum+" "+prop.name) { + public void exec () { prop.enumChoice = null; } + public void undo () { prop.enumChoice = enumChoice; } + }); + final List multiLabel = prop.multiLabel; + if (multiLabel != null) + commands.add (story.new Command (StoryRemoveLabels+" "+prop.name) { + public void exec () { prop.multiLabel = null; } + public void undo () { prop.multiLabel = multiLabel; } + }); + continue; + } + commands.add (story.new Command (StoryRemoveProp+" "+prop.name) { + String oldPropName = prop.name; + public void exec () { + if (ownProps.get (oldPropName) == prop) + ownProps.remove (prop.name); + } + public void undo () { ownProps.put (oldPropName, prop); } + }); + } + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/Embedded.java b/src/java/adecWatt/model/Embedded.java new file mode 100644 index 0000000..06db360 --- /dev/null +++ b/src/java/adecWatt/model/Embedded.java @@ -0,0 +1,210 @@ +package adecWatt.model; + +import java.awt.Color; +import java.util.HashSet; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import adecWatt.model.xml.XmlPermanent; +import adecWatt.model.unit.NonWorkspace; + +public abstract class Embedded

, T extends Enum, A extends Enum, C extends Editable, E extends Embedded> + extends Editable { + + static public final String globalPlace = "ean"; // ean = Everywhere and Nowhere + + // ======================================== + protected C container, containerRef; + protected String placeId, id; + protected NonWorkspace model; + + // ======================================== + public abstract A getPlaceIdToken (); + public abstract A getModelToken (); + public abstract Embedded getLink (Editable container); + + public AdecWatt getAdecWatt () { return container.getAdecWatt (); } + public String getId () { return id; } + + // public Unit getPermanent () { return model; } + public Unit getDirectUnit () { return model; } + public Unit getParentUnit () { return model; } + public NonWorkspace getModel () { return model; } + public C getContainer () { return container; } + + public void setModel (NonWorkspace model) { this.model = model; } + + @SuppressWarnings ("unchecked") + public Embedded getParent () { + for (Editable containerParent = container.getParent (); + containerParent != null; + containerParent = containerParent.getParent ()) { + Embedded parent = (Embedded) containerParent.getLocalEmbedded (id); + if (parent != null) + return parent; + } + return null; + } + + public void setParentUnit (Unit parent) { model = (NonWorkspace) parent; } + + // ======================================== + protected Embedded (C container, P xmlPermanent) { + super (xmlPermanent); + this.container = container; + placeId = xmlPermanent.getFacet (getPlaceIdToken ()); + if (placeId == null) + placeId = container.getId (); + if (name != null) + updateId (); + String modelId = xmlPermanent.getFacet (getModelToken ()); + if (modelId == null) + throw new IllegalArgumentException ("Unknown XML embedded has no model ("+xmlPermanent+")."); + model = (NonWorkspace) getAdecWatt ().getPermanentDB ().getUnitById (modelId); + } + protected Embedded (String name, String placeId, C container, NonWorkspace model) { + this.name = name == null ? container.getUniqName () : name; + this.placeId = placeId == null ? container.getId () : placeId; + this.container = container; + this.model = model; + updateId (); + } + protected void updateId () { + id = placeId+":"+name; + } + @SuppressWarnings ("unchecked") + public void fixName (boolean isLocal) { + if (name == null) { + name = container.getUniqName (); + placeId = isLocal ? container.getId () : globalPlace; + } + updateId (); + ((Editable>) container).addEmbedded (this); + } + @SuppressWarnings ("unchecked") + protected void importFrom (Embedded from) { + for (Embedded current = from; current != null; current = current.getParent ()) + super.importFrom (current); + Editable model = from.getModel (); + if (model == null) + return; + super.importFrom ((Editable) model); + } + @SuppressWarnings ("rawtypes") + public abstract Embedded clone (C container); + + @SuppressWarnings ("rawtypes") + protected Embedded clone () { + throw new IllegalArgumentException ("Clone an Embedded forbidden"); + } + + // ======================================== + public Element getXml (Node parent, Document document) { + Element child = super.getXml (parent, document); + if (!container.getId ().equals (placeId)) + XmlPermanent.putFacet (child, getPlaceIdToken (), placeId); + // XXX model == null si pas trouvé au chargement exemple : comp de réserve + XmlPermanent.putFacet (child, getModelToken (), model.getId ()); + return child; + } + + public void getLocalLink (HashSet> visited, + HashSet> unitLinks, TreeSet iconsLinks, TreeSet imagesLinks) { + if (visited.contains (this)) + return; + super.getLocalLink (visited, unitLinks, iconsLinks, imagesLinks); + model.getLocalLink (visited, unitLinks, iconsLinks, imagesLinks); + } + + public boolean renameUnits (TreeMap translateMap) { + boolean result = model != null && translateMap.containsValue (model.getId ()); + if (placeId != null && translateMap.containsKey (placeId)) { + placeId = translateMap.get (placeId); + if (name != null) + updateId (); + result = true; + } + return super.renameUnits (translateMap) || result; + } + + // ======================================== + public Prop getLocalProp (String name, Prop.PropTypeEnum type) { + // pas de type en paramètre mais rechercher dans model + for (Prop prop : ownProps.values ()) + if (name.equals (prop.name)) { + // test type + return prop; + } + // Prop result = model.getProp (name); + // result = (result != null) ? result.clone () : new Prop (name, type); + Prop result = new Prop (name, type); + ownProps.put (name, result); + return result; + } + + // ======================================== + // XXX getPropVal => super && !!! container.model.getEmbedded.getPropVal + // XXX getPartialProp => super && !!! container.model.getEmbedded.getPartialProp + // XXX getProp => super && !!! container.model.getEmbedded.getProp + + static public String labelPattern = "\\{\\{([^}]*)\\}\\}"; + public String getLabel () { + try { + Pattern p = Pattern.compile (labelPattern); + String mString = getPropVal (Prop.PropLabelProp).sValue; + Matcher m = p.matcher (mString); + StringBuffer sb = new StringBuffer (); + while (m.find ()) { + String key = mString.substring (m.start ()+2, m.end ()-2); + String val = ""; //"{{"+key+"=?}}"; + try { + val = getPropVal (key).sValue; + } catch (Exception e) { + } + m.appendReplacement (sb, val); + } + m.appendTail (sb); + return sb.toString (); + } catch (Exception e) { + return null; + } + } + public Color getLabelColor () { + try { + return LPColor.getColor (getPropVal (Prop.PropLabelColor).sValue); + } catch (Exception e) { + return Color.black; + } + } + public double getLabelSize () { + try { + return getPropVal (Prop.PropLabelSize).values[0]; + } catch (Exception e) { + return 0; + } + } + public String getCircuit () { + try { + String name = getPropVal (Prop.PropCircuit).sValue; + if (!name.isEmpty ()) + return name; + } catch (Exception e) { + } + return null; + } + public double getWatt () { + try { + return getPropVal (Prop.PropWatt).values[0]; + } catch (Exception e) { + } + return 0; + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/ImageDB.java b/src/java/adecWatt/model/ImageDB.java new file mode 100644 index 0000000..55da55a --- /dev/null +++ b/src/java/adecWatt/model/ImageDB.java @@ -0,0 +1,431 @@ +package adecWatt.model; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.Collection; +import java.util.Comparator; +import java.util.Hashtable; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.Vector; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; + +import misc.ScaledImage; +import misc.Util; +import static misc.Config.FS; + +import static adecWatt.model.PermanentDB.backExtention; +import static adecWatt.model.PermanentDB.dataDir; +import static adecWatt.model.PermanentDB.localRemoteDir; +import static adecWatt.model.PermanentDB.localToken; +import static adecWatt.model.PermanentDB.serverToken; +import static adecWatt.model.PermanentDB.cacheToken; + +public class ImageDB { + static { + ImageIO.setUseCache (false); + } + + // ======================================== + static public final String iconDirName = "icon", imageDirName = "image"; + static public class FileFilterImageName implements FileFilter { + private String baseImageName; + public FileFilterImageName (String imageName) { + baseImageName = Util.getBase (imageName); + } + public boolean accept (File file) { + return file.isFile () && !file.isHidden () && Util.getBase (file).equals (baseImageName) && ! Util.getExtention (file).toLowerCase ().equals (backExtention); + } + }; + + // ======================================== + private AdecWatt adecWatt; + private String dir; + private TagDB tagDB; + public PreviewCache previewCache; + + // ======================================== + private File getDir (String placeToken) { + return new File (new File (dataDir, placeToken), dir); + } + public Collection getTags (String imageName) { + return tagDB.getTags (imageName); + } + public void putTags (String imageName, Collection imageTags) { + tagDB.putTags (imageName, imageTags); + } + + // ======================================== + public ImageDB (AdecWatt adecWatt, String dir) { + this.adecWatt = adecWatt; + this.dir = dir; + tagDB = new TagDB (dir); + previewCache = new PreviewCache (new File (new File (dataDir, cacheToken), dir)); + } + + // ======================================== + Hashtable> coloredScaledImages = new Hashtable> (); + final int toReplace = Color.BLUE.getRGB (); + + public ScaledImage getColoredScaledImages (ScaledImage scaledImage, Color color) { + Hashtable colorList = coloredScaledImages.get (scaledImage); + if (colorList == null) { + colorList = new Hashtable (); + coloredScaledImages.put (scaledImage, colorList); + } + ScaledImage coloredScaledImage = colorList.get (color); + if (coloredScaledImage == null) { + int newColor = color.getRGB (); + BufferedImage reference = scaledImage.reference; + int width = reference.getWidth (); + int height = reference.getHeight (); + BufferedImage colored = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB); + for (int x = 0; x < width; x++) + for (int y = 0; y < height; y++) { + int c = reference.getRGB (x, y); + if (c == toReplace) + c = newColor; + colored.setRGB (x, y, c); + } + coloredScaledImage = new ScaledImage (colored); + colorList.put (color, coloredScaledImage); + } + return coloredScaledImage; + } + + // ======================================== + private Hashtable bufferedImages = new Hashtable (); + private Hashtable scaledImages = new Hashtable (); + + public ScaledImage getImage (String imageName, boolean horizontalSpin) { + try { + ScaledImage result = getScaled (findBufferedImage (imageName)); + return horizontalSpin ? result.getNewSpin (horizontalSpin, false) : result; + } catch (Exception e) { + return null; + } + } + public ScaledImage getScaled (BufferedImage bufferedImage) { + if (bufferedImage == null) + return null; + ScaledImage scaledImage = scaledImages.get (bufferedImage); + if (scaledImage != null) + return scaledImage; + scaledImage = new ScaledImage (bufferedImage); + scaledImages.put (bufferedImage, scaledImage); + return scaledImage; + } + + static public Comparator nameLocalComparator = + new Comparator () { + public int compare (NameLocal o1, NameLocal o2) { + if (o1 == o2) + return 0; + int diff = o1.fileName.compareToIgnoreCase (o2.fileName); + if (diff != 0) + return diff > 0 ? 1 : -1; + if (o1.isLocal == o2.isLocal) + return 0; + return o1.isLocal ? 1 : -1; + } + }; + + public class NameLocal { + public String fileName; + public boolean isLocal; + public ImageIcon icon; + public NameLocal (String fileName, boolean isLocal) { + this.fileName = fileName; + this.isLocal = isLocal; + } + } + public boolean isRemote (String imageName) { + FileFilterImageName fileFilterImageName = new FileFilterImageName (imageName); + boolean result = true; + for (String srcDir : localRemoteDir) + try { + result = !result; + if (new File (new File (dataDir, srcDir), dir).listFiles (fileFilterImageName).length > 0) + return result; + } catch (Exception e) { + } + return false; + } + + public File getFile (String imageName, boolean isLocal) { + if (!localRemoteDir.get (0).equals (localToken)) + isLocal = ! isLocal; + String srcDir = localRemoteDir.get (isLocal ? 0 : 1); + try { + return getDir (srcDir).listFiles (new FileFilterImageName (imageName))[0]; + } catch (Exception e) { + } + return null; + } + + public void renameLocalImage (String imageName, String newImageName) { + if (imageName == null || newImageName == null || imageName.equals (newImageName)) + return; + BufferedImage image = bufferedImages.get (imageName); + if (image != null) { + bufferedImages.remove (imageName); + bufferedImages.put (newImageName, image); + } + File oldFile = getFile (imageName, true); + if (oldFile == null) + return; + File newFile = new File (oldFile.getParent (), newImageName+"."+Util.getExtention (oldFile).toLowerCase ()); + try { + Files.move (oldFile.toPath (), newFile.toPath (), StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + } + if (oldFile.exists ()) { + // XXX si pas de move ? + System.err.println ("coucou l'image n'a pas été renommée:"+oldFile); + } + } + public void removeImage (String imageName) { + try { + File oldFile = getFile (imageName, true); + Util.backup (oldFile, Util.getExtention (oldFile), backExtention); + clearBufferedImage (imageName); + previewCache.clean (imageName); + } catch (Exception e) { + } + } + + private String getNewImageName (File file) { + return adecWatt.getUser ().getDataId ()+"."+Util.getExtention (file).toLowerCase (); + } + private String getImageName (String imageName, File file) { + return Util.getBase (imageName)+"."+Util.getExtention (file); + } + public String addImage (File file) { + String newImageName = getNewImageName (file); + File dstDir = new File (new File (dataDir, localToken), dir); + try { + dstDir.mkdirs (); + Util.copy (new FileInputStream (file), new FileOutputStream (new File (dstDir, newImageName)), null, null); + } catch (Exception e) { + e.printStackTrace (); + } + return newImageName; + } + public void renameVisitor (TreeSet imageNames) { + if (imageNames.size () == 0) + return; + PermanentDB permanentDB = adecWatt.getPermanentDB (); + TreeMap translateMap = new TreeMap (); + String pattern = String.format ("%03d-", User.visitorId); + User user = adecWatt.getUser (); + for (String imageName : imageNames) { + if (!imageName.startsWith (pattern)) + continue; + String newImageName = user.getDataId (); + String ext = Util.getExtention (imageName); + if (ext != null) { + System.err.println ("coucou renameVisitor has ext:"+imageName); + imageNames.remove (imageName); + imageName = Util.getBase (imageName); + } + renameLocalImage (imageName, newImageName); + translateMap.put (imageName, newImageName); + } + permanentDB.renameImages (translateMap); + tagDB.renameImages (translateMap); + if (translateMap.size () < 1) + return; + imageNames.removeAll (translateMap.keySet ()); + imageNames.addAll (translateMap.values ()); + } + public void promoteTag (TreeSet imageNames) { + tagDB.promote (imageNames); + } + public void promote (TreeSet imageNames) { + if (imageNames.size () == 0) + return; + // liste des id à écrire + // XXX tag par id + for (String imageName : imageNames) { + // XXX mis à jours des "tags" local => sever + File file = getFile (imageName, true); + // XXX autre méthode ? + if (file == null) { + // XXX si pas sauvé => trouver extension et utiliser scaledImage (pas copy) + continue; + } + File newFile = new File (new File (new File (dataDir, serverToken), dir), file.getName ()); + try { + Files.move (file.toPath (), newFile.toPath (), StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + } + if (file.exists ()) { + // XXX si pas de move ? + System.err.println ("coucou l'image "+imageName+" n'a pas été déplacée"); + } + } + } + public String updateImage (NameLocal nameLocal, File file) { + String newImageName = getImageName (nameLocal.fileName, file); + File dstDir = getDir (localToken); + if (nameLocal.isLocal) + removeImage (nameLocal.fileName); + try { + dstDir.mkdirs (); + // XXX utiliser un tmp ? + Util.copy (new FileInputStream (file), new FileOutputStream (new File (dstDir, newImageName)), null, null); + clearBufferedImage (newImageName); + } catch (Exception e) { + e.printStackTrace (); + } + return newImageName; + } + + public boolean importFile (String dirName, String fileName, ByteArrayInputStream dataIn) { + if (!dir.equals (dirName)) + return false; + try { + bufferedImages.put (fileName, ImageIO.read (dataIn)); + } catch (Exception e) { + } + return true; + } + + public void addImageZip (ZipOutputStream out, String iconName) + throws IOException { + if (iconName == null || iconName.isEmpty ()) + return; + ZipEntry ze = new ZipEntry (dir+"/"+iconName); + out.putNextEntry (ze); + File srcDir = new File (new File (dataDir, localToken), dir); + File srcFile = new File (srcDir, iconName); + int length = (int) srcFile.length (); + byte[] tmp = new byte[length]; + FileInputStream fileInputStream = new FileInputStream (srcFile); + try { + fileInputStream.read (tmp); + } finally { + fileInputStream.close (); + } + out.write (tmp); + out.closeEntry(); + out.flush (); + } + public Vector listImage () { + Vector result = new Vector (); + Vector filesNames = new Vector (); + Boolean isLocal = localRemoteDir.get (0).equals (localToken); + isLocal = ! isLocal; + for (String srcDir : localRemoteDir) + try { + isLocal = ! isLocal; + File[] files = new File (dataDir, srcDir+FS+dir).listFiles (PreviewCache.fileImageFilter); + if (files == null) + continue; + int maxSize = result.size ()+filesNames.size (); + result.ensureCapacity (maxSize); + filesNames.ensureCapacity (maxSize); + for (File file : files) { + String fileName = file.getName (); + if (!filesNames.contains (fileName)) { + filesNames.add (fileName); + result.add (new NameLocal (fileName, isLocal)); + } + } + } catch (Exception e) { + e.printStackTrace (); + } + result.sort (nameLocalComparator); + return result; + } + + public TreeMap newNamePlan () { + TreeMap result = new TreeMap (); + for (String srcDir : localRemoteDir) + try { + File[] files = new File (dataDir, srcDir+FS+dir).listFiles (PreviewCache.fileImageFilter); + if (files == null) + continue; + for (File file : files) { + String fileName = file.getName (); + if (User.splitId (fileName) != null) + continue; + String newName = result.get (fileName); + if (newName == null) + result.put (fileName, newName = getNewImageName (file)); + Files.move (file.toPath (), new File (file.getParent (), newName).toPath (), StandardCopyOption.REPLACE_EXISTING); + } + } catch (Exception e) { + e.printStackTrace (); + } + return result; + } + + public void clearBufferedImage (String imageName) { + if (imageName == null) + return; + imageName = Util.getBase (imageName); + BufferedImage bufferedImage = bufferedImages.get (imageName); + if (bufferedImage == null) + return; + ScaledImage scaledImage = scaledImages.get (bufferedImage); + bufferedImages.remove (imageName); + if (scaledImage == null) + return; + scaledImages.remove (bufferedImage); + coloredScaledImages.remove (scaledImage); + } + + public BufferedImage findBufferedImage (String imageName) { + if (imageName == null) + return null; + imageName = Util.getBase (imageName); + BufferedImage bufferedImage = bufferedImages.get (imageName); + if (bufferedImage != null) + return bufferedImage; + FileFilterImageName fileFilterImageName = new FileFilterImageName (imageName); + for (String srcDir : localRemoteDir) + try { + for (File file : new File (new File (dataDir, srcDir), dir).listFiles (fileFilterImageName)) { + bufferedImage = ImageIO.read (file); + bufferedImages.put (imageName, bufferedImage); + return bufferedImage; + } + } catch (Exception e) { + } + System.err.println ("coucou not found:"+dir+FS+imageName); + return null; + } + + // ======================================== + public void updateDataId () { + User user = adecWatt.getUser (); + for (String srcDir : localRemoteDir) + try { + for (File file : new File (dataDir, srcDir+FS+dir).listFiles (PreviewCache.fileImageFilter)) + user.updateDataId (file.getName ()); + } catch (Exception e) { + } + } + + // ======================================== + public void reload () { + tagDB.reload (); + bufferedImages.clear (); + scaledImages.clear (); + updateDataId (); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/InseeDB.java b/src/java/adecWatt/model/InseeDB.java new file mode 100644 index 0000000..ca6af46 --- /dev/null +++ b/src/java/adecWatt/model/InseeDB.java @@ -0,0 +1,87 @@ +package adecWatt.model; + +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import org.w3c.dom.Document; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import misc.Log; +import misc.Util; + +public class InseeDB { + + // http://www.geonames.org/export/codes.html + // http://download.geonames.org/export/dump/ (PPL) + + // ======================================== + static public class Insee { + public String code, name; + public double latitude, longitude; + + public Insee (String code, String name, double latitude, double longitude) { + this.code = code; + this.name = name; + this.latitude = latitude; + this.longitude = longitude; + } + } + + // ======================================== + private ArrayList cities = new ArrayList (); + public InseeDB (Node node) { + parse (node); + } + + public ArrayList getCities (String pattern) { + pattern = Util.removeAccent (pattern.toLowerCase ().replaceAll ("-", " ")); + ArrayList result = new ArrayList (); + for (Insee insee : cities) + if (Util.removeAccent (insee.name.toLowerCase ().replaceAll ("-", " ")).indexOf (pattern) >= 0 || + insee.code.indexOf (pattern) >= 0) + result.add (insee); + return result; + } + + // ======================================== + static public InseeDB readDocument (URL url) { + try { + return readDocument (url.openStream ()); + } catch (Exception e) { + } + return null; + } + static public InseeDB readDocument (InputStream stream) { + try { + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance ().newDocumentBuilder (); + Document document = documentBuilder.parse (stream); + document.normalizeDocument (); + return new InseeDB (document.getFirstChild ()); + } catch (Exception e) { + Log.keepLastException ("InseeDB::readDocument", e); + throw new IllegalArgumentException ("Not XML file input."); + } + } + + private void parse (Node node) { + //XX insee =? node.getNodeName () + NodeList childrens = node.getChildNodes (); + for (int i = 0; i < childrens.getLength (); i++) { + try { + Node child = childrens.item (i); + NamedNodeMap allFacets = child.getAttributes (); + cities.add (new Insee (allFacets.getNamedItem ("code").getNodeValue (), allFacets.getNamedItem ("name").getNodeValue (), + Double.parseDouble (allFacets.getNamedItem ("lat").getNodeValue ()), + Double.parseDouble (allFacets.getNamedItem ("long").getNodeValue ()))); + } catch (Exception e) { + } + } + } + + // ======================================== +} + diff --git a/src/java/adecWatt/model/Item.java b/src/java/adecWatt/model/Item.java new file mode 100644 index 0000000..be52d2f --- /dev/null +++ b/src/java/adecWatt/model/Item.java @@ -0,0 +1,337 @@ +package adecWatt.model; + +import java.awt.Graphics2D; +import java.awt.geom.AffineTransform; +import java.awt.geom.Dimension2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Enumeration; +import java.util.Hashtable; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.DimensionDouble; +import misc.Story; + +import adecWatt.model.unit.NonWorkspace; +import adecWatt.model.unit.Workspace; +import adecWatt.model.xml.XmlPermanent; + +public abstract class Item

, T extends Enum, A extends Enum> + extends Embedded { + + // ======================================== + protected Workspace placeUnit; + + // ======================================== + public Workspace getStoryUnit () { return container; } + + // ======================================== + public Item (Workspace workspace, P xml) { + super (workspace, xml); + collectEmbedded (); + } + public Item (String name, String placeName, Workspace workspace, NonWorkspace model) { + super (name, placeName, workspace, model); + } + public Item (Workspace workspace, NonWorkspace model) { + super (null, null, workspace, model); + } + abstract public Item clone (Workspace workspace); + protected void updateId () { + super.updateId (); + try { + boolean localItem = container.getId ().equals (placeId); + if (!localItem) + placeUnit = (Workspace) getAdecWatt ().getPermanentDB ().getUnitById (placeId); + } catch (Exception e) { + } + } + + // ======================================== + public ArrayList findAccs (Point2D.Double realPos, double close) { + ArrayList result = new ArrayList (); + double theta = Math.toRadians (-getThetaDegree ()); + double [] coord = new double [] {realPos.x, realPos.y}; + for (String accId : getEmbeddedIds ()) + try { + coord[0] = realPos.x; + coord[1] = realPos.y; + Point2D.Double accPos = accCenter.get (accId); + DimensionDouble accSize = this.accSize.get (accId); + AffineTransform at = new AffineTransform (); + at.rotate (theta); + at.translate (-accPos.x, -accPos.y); + at.transform (coord, 0, coord, 0, 1); + double halfWidth = accSize.width/2+close, halfHeight = accSize.height/2+close; + if (coord[0] >= -halfWidth && coord[0] <= halfWidth && + coord[1] >= -halfHeight && coord[1] <= halfHeight) + result.add (findEmbedded (accId)); + } catch (Exception e) { + } + return result; + } + + public R parentAndModelWalk (String propName, ComputeProp computeProp, boolean skipFirst) { + R result = parentWalk (propName, computeProp, skipFirst); + if (result != null) + return result; + try { + boolean localItem = placeId.equals (getContainer ().getId ()); + result = placeUnit.findEmbedded (getId ()).parentWalk (propName, computeProp, localItem); + if (result != null) + return result; + } catch (Exception e) { + } + try { + result = getModel ().parentWalk (propName, computeProp, false); + if (result != null) + return result; + } catch (Exception e) { + } + return null; + } + + public Element getXml (Node parent, Document document) { + return super.getXml (parent, document); + } + + // ======================================== + public boolean match (String text) { + return + super.match (text) || + model.parentMatch (text); + // if (container.search (text).size () > 0) + // return true; + // if (embedded != null) + // for (Acc acc: embedded.values ()) + // if (acc.search (text)) + // return true; + // XXX ou accéssoire + } + + // ======================================== + public void validateContainer (Story.Commands commands, String commandName) { + if (container.getLocalEmbedded (getId ()) == this) + return; + commands.add (container.story.new Command (commandName) { + public void exec () { container.addEmbedded (Item.this); } + public void undo () { container.removeEmbedded (Item.this); } + public void displayExec () { updateView (Unit.BroadcastNewItem); } + public void displayUndo () { updateView (Unit.BroadcastRemoveItem); } + }); + } + + public void storyChange (Story.Commands commands, ArrayList changeProps) { + storyChange (commands, true, ownProps, changeProps); + } + public void storyTransform (Story.Commands commands, Collection modifiers, Unit permanent, String newName, ArrayList transProps) { + storyTransform (commands, null, modifiers, permanent, ownProps, transProps); + } + public void updateView () { + updateView (Unit.BroadcastUpdateItem); + } + @SuppressWarnings ("unchecked") + public void updateView (String msg) { + for (Enumeration e = container.unitNode.breadthFirstEnumeration (); e.hasMoreElements (); ) { + Unit> unit = ((UnitNode>) e.nextElement ()).getUnit (); + unit.stateNotifier.broadcastDisplay (msg, this); + } + } + + // ======================================== + public boolean inside (Rectangle2D.Double selection) { + try { + Point2D.Double center = getPos (); + DimensionDouble size = getRotSize (getSize (), getThetaDegree ()); + double halfWidth = size.width/2; + double halfHeight = size.height/2; + return + selection.x <= center.x-halfWidth && selection.x+selection.width >= center.x+halfWidth && + selection.y <= center.y-halfHeight && selection.y+selection.height >= center.y+halfHeight; + } catch (Exception e) { + return false; + } + } + + public boolean isPosOutside (DimensionDouble inside) { + Point2D.Double pos = getPos (); + DimensionDouble size = getRotSize (getSize (), getThetaDegree ()); + double halfWidth = size.width/2; + double halfHeight = size.height/2; + return + pos.x < halfWidth || pos.y < halfHeight || + pos.x > inside.width-halfWidth || pos.y > inside.height-halfHeight; + } + + static public DimensionDouble getRotSize (DimensionDouble size, double thetaDegree) { + if (thetaDegree == 0) + return size; + double [] bounds = getShapeBounds (size, thetaDegree); + return new DimensionDouble (Math.max (Math.abs (bounds[4]-bounds[0]), + Math.abs (bounds[6]-bounds[2])), + Math.max (Math.abs (bounds[5]-bounds[1]), + Math.abs (bounds[7]-bounds[3]))); + } + public double getCloseBound (Point2D.Double pos, double close, Point2D.Double result) { + return getCloseBound (getBounds (), pos, close, result); + } + public double[] getBounds () { + return getBounds (getPos (), getSize (), getThetaDegree ()); + } + + static public Point2D.Double getPosInside (DimensionDouble inside, Point2D.Double pos, double thetaDegree, DimensionDouble refSize) { + DimensionDouble size = getRotSize (refSize, thetaDegree); + double halfWidth = size.width/2; + double halfHeight = size.height/2; + return new + Point2D.Double (Math.min (Math.max (pos.x, halfWidth), inside.width-halfWidth), + Math.min (Math.max (pos.y, halfHeight), inside.height-halfHeight)); + } + static public double getCloseBound (double[] bounds, Point2D.Double pos, double close, Point2D.Double result) { + for (int x = 0, y = 1; x < 18; x+=2, y+=2) { + double d = pos.distance (bounds[x], bounds[y]); + if (d < close) { + close = d; + result.x = bounds[x]; + result.y = bounds[y]; + } + } + return close; + } + static public double[] getBounds (Point2D.Double pos, Dimension2D size, double thetaDegree) { + double halfWidth = size.getWidth ()/2, halfHeight = size.getHeight ()/2; + AffineTransform at = AffineTransform.getTranslateInstance (pos.x, pos.y); + at.rotate (Math.toRadians (thetaDegree)); + double [] bounds = new double [] { + -halfWidth, -halfHeight, + -halfWidth, halfHeight, + halfWidth, halfHeight, + halfWidth, -halfHeight, + -halfWidth, 0, + 0, halfHeight, + halfWidth, 0, + 0, -halfHeight, + 0, 0 + }; + //System.err.println ("coucou A:"+java.util.Arrays.toString (bounds)); + at.transform (bounds, 0, bounds, 0, 9); + //System.err.println ("coucou B:"+java.util.Arrays.toString (bounds)); + return bounds; + } + static public double[] getShapeBounds (Dimension2D size, double thetaDegree) { + double halfWidth = size.getWidth ()/2, halfHeight = size.getHeight ()/2; + AffineTransform at = AffineTransform.getRotateInstance (Math.toRadians (thetaDegree)); + double [] bounds = new double [] {-halfWidth, -halfHeight, -halfWidth, halfHeight, halfWidth, halfHeight, halfWidth, -halfHeight}; + at.transform (bounds, 0, bounds, 0, 4); + return bounds; + } + public boolean containsClose (double [] coord, double close) { + try { + Point2D.Double center = getPos (); + DimensionDouble size = getSize (); + AffineTransform at = new AffineTransform (); + at.rotate (Math.toRadians (-getThetaDegree ())); + at.translate (-center.x, -center.y); + at.transform (coord, 0, coord, 0, 1); + double halfWidth = size.width/2+close, halfHeight = size.height/2+close; + return + coord[0] >= -halfWidth && coord[0] <= halfWidth && + coord[1] >= -halfHeight && coord[1] <= halfHeight; + } catch (Exception e) { + return false; + } + } + // ======================================== + abstract public void changeThetaDegree (double thetaDegree); + abstract public void changeSize (DimensionDouble size); + + public void changeRotSize (Point2D.Double pos, double thetaDegree, DimensionDouble size) { + if (isSticky ()) + return; + // XXX ? si parent valeur identique ? + getLocalProp (Prop.PropPos, Prop.PropTypeEnum.Cube).setPosition (pos); + changeThetaDegree (thetaDegree); + changeSize (size); + } + + public void changePos (Point2D.Double pos) { + if (isSticky ()) + return; + // XXX ? si parent valeur identique ? + getLocalProp (Prop.PropPos, Prop.PropTypeEnum.Cube).setPosition (pos); + } + + // ======================================== + static public Comparator xPosComparator = new AxeItemComparator (0, 1, 2); + static public Comparator yPosComparator = new AxeItemComparator (1, 0, 2); + static public Comparator zPosComparator = new AxeItemComparator (2, 0, 1); + + static class AxeItemComparator implements Comparator { + int a, b, c; + public AxeItemComparator (int a, int b, int c) { + this.a = a; + this.b = b; + this.c = c; + } + public int compare (Item o1, Item o2) { + if (o1 == o2) + return 0; + Double [] seekProp1 = new Double[] {null, null, null}; + Double [] seekProp2 = new Double[] {null, null, null}; + o1.getPartialProp (Prop.PropPos, seekProp1); + o2.getPartialProp (Prop.PropPos, seekProp2); + if (seekProp1[a] != seekProp2[a]) { + if (seekProp1[a] == null) + return 1; + if (seekProp2[a] == null) + return -1; + double diff = seekProp1[a] - seekProp2[a]; + if (diff != 0) + return diff > 0 ? 1 : -1; + } + if (seekProp1[b] != seekProp2[b]) { + if (seekProp1[b] == null) + return 1; + if (seekProp2[b] == null) + return -1; + double diff = seekProp1[b] - seekProp2[b]; + if (diff != 0) + return diff > 0 ? 1 : -1; + } + if (seekProp1[c] != seekProp2[c]) { + if (seekProp1[c] == null) + return 1; + if (seekProp2[c] == null) + return -1; + double diff = seekProp1[c] - seekProp2[c]; + if (diff != 0) + return diff > 0 ? 1 : -1; + } + return 0; + } + }; + + // ======================================== + public String toString () { + return getName (); + } + + // ======================================== + public Hashtable accCenter = new Hashtable (); + public Hashtable accSize = new Hashtable (); + public Point2D.Double getAccCenter (String accId) { + return accCenter.get (accId); + } + public DimensionDouble getAccSize (String accId) { + return accSize.get (accId); + } + abstract public void print (Graphics2D printGraphics, Workspace workspace, String plugId); + abstract public void print (Graphics2D printGraphics, Workspace workspace, Point2D pos, DimensionDouble size, double thetaDegree); + + // ======================================== +} diff --git a/src/java/adecWatt/model/LPColor.java b/src/java/adecWatt/model/LPColor.java new file mode 100644 index 0000000..ab57137 --- /dev/null +++ b/src/java/adecWatt/model/LPColor.java @@ -0,0 +1,406 @@ +package adecWatt.model; + +import java.awt.Color; +import java.lang.reflect.Field; +import java.util.Hashtable; + +public class LPColor { + + static public Hashtable leeFilterList = new Hashtable (); + + static public class LeeFilter { + String ref; + int value; + String comment; + + public LeeFilter (String ref, int value, String comment) { + this.ref = ref; + this.value = value; + this.comment = comment; + leeFilterList.put ("LF"+ref, this); + } + } + + static public Color getColor (String color) { + if (color == null || color.isEmpty ()) + return Color.gray; + LeeFilter leeFilter = leeFilterList.get (color.replaceAll ("\\s", "").toUpperCase ()); + if (leeFilter != null) + return new Color (leeFilter.value); + color = color.toLowerCase (); + try { + Field field = Class.forName ("java.awt.Color").getField (color); + return (Color) field.get (null); + } catch (Exception e) { + } + try { + return new Color (Integer.valueOf (color.substring (0, 2), 16), + Integer.valueOf (color.substring (2, 4), 16), + Integer.valueOf (color.substring (4, 6), 16)); + } catch (Exception e) { + } + return Color.black; + } + + static { + new LeeFilter ("002", 0xFF78DC, "Rose Pink"); + new LeeFilter ("003", 0xFAF0FA, "Lavender Tint"); + new LeeFilter ("004", 0xFFC8B4, "Medium Bastard Amber"); + new LeeFilter ("007", 0xFAFAD2, "Pale Yellow"); + new LeeFilter ("008", 0xFC9B80, "Dark Salmon"); + new LeeFilter ("009", 0xFCD7B3, "Pale Amber Gold"); + new LeeFilter ("010", 0xFFFF00, "Medium Yellow"); + new LeeFilter ("013", 0xFCD89B, "Straw Tint"); + new LeeFilter ("015", 0xFFCD00, "Deep Straw"); + new LeeFilter ("017", 0xE68C64, "Surprise Peach"); + new LeeFilter ("019", 0xFF4600, "Fire"); + new LeeFilter ("020", 0xFFBE55, "Medium Amber"); + new LeeFilter ("021", 0xFF8C32, "Gold Amber"); + new LeeFilter ("022", 0xFF6900, "Dark Amber"); + new LeeFilter ("024", 0xFF5A64, "Scarlet"); + new LeeFilter ("025", 0xFF6E46, "Sunset Red"); + new LeeFilter ("026", 0xE6003C, "Bright Red"); + new LeeFilter ("027", 0xC8003C, "Medium Red"); + new LeeFilter ("029", 0xE1003C, "Plasa Red"); + new LeeFilter ("035", 0xFFC8D2, "Light Pink"); + new LeeFilter ("036", 0xFFA0B9, "Medium Pink"); + new LeeFilter ("046", 0xDC005A, "Dark Magenta"); + new LeeFilter ("048", 0xE66EAF, "Rose Purple"); + new LeeFilter ("049", 0xBE0091, "Medium Purple"); + new LeeFilter ("052", 0xE6AAFA, "Light Lavender"); + new LeeFilter ("053", 0xE6E6FA, "Paler Lavender"); + new LeeFilter ("058", 0xB46EF0, "Lavender"); + new LeeFilter ("061", 0xDCF5FF, "Mist Blue"); + new LeeFilter ("063", 0xD2F5FF, "Pale Blue"); + new LeeFilter ("068", 0x46B4F0, "Sky Blue"); + new LeeFilter ("071", 0x0000B4, "Tokyo Blue"); + new LeeFilter ("075", 0x64A0F0, "Evening Blue"); + new LeeFilter ("079", 0x3C8CD2, "Just Blue"); + new LeeFilter ("085", 0x006EB9, "Deeper Blue"); + new LeeFilter ("088", 0xDCFF64, "Lime Green"); + new LeeFilter ("089", 0x5ADC5A, "Moss Green"); + new LeeFilter ("090", 0x00BE00, "Dark Yellow Green"); + new LeeFilter ("100", 0xF5FF00, "Spring Yellow"); + new LeeFilter ("101", 0xFFF500, "Yellow"); + new LeeFilter ("102", 0xFFDC5F, "Light Amber"); + new LeeFilter ("103", 0xFCEACC, "Straw"); + new LeeFilter ("104", 0xFFDC00, "Deep Amber"); + new LeeFilter ("105", 0xFFA000, "Orange"); + new LeeFilter ("106", 0xF00032, "Primary Red"); + new LeeFilter ("107", 0xFFA5AF, "Light Rose"); + new LeeFilter ("108", 0xFCBEA9, "English Rose"); + new LeeFilter ("109", 0xFFB2AF, "Light Salmon"); + new LeeFilter ("110", 0xFFB4C8, "Middle Rose"); + new LeeFilter ("111", 0xFF8CBE, "Dark Pink"); + new LeeFilter ("113", 0xFF0064, "Magenta"); + new LeeFilter ("115", 0x00EBC8, "Peacock Blue"); + new LeeFilter ("116", 0x00C8B9, "Medium Blue-Green"); + new LeeFilter ("117", 0xB4FAF5, "Steel Blue"); + new LeeFilter ("118", 0x00E1EB, "Light Blue"); + new LeeFilter ("119", 0x0078C8, "Dark Blue"); + new LeeFilter ("120", 0x005FBE, "Deep Blue"); + new LeeFilter ("121", 0xB4FF64, "LEE Green"); + new LeeFilter ("122", 0x78FA6E, "Fern Green"); + new LeeFilter ("124", 0x00DC78, "Dark Green"); + new LeeFilter ("126", 0xBE009B, "Mauve"); + new LeeFilter ("127", 0xE16273, "Smokey Pink"); + new LeeFilter ("128", 0xFF50B4, "Bright Pink"); + new LeeFilter ("129", 0xFFFFFF, "Heavy Frost"); + new LeeFilter ("130", 0xFFFFFF, "Clear"); + new LeeFilter ("131", 0x64FAD2, "Marine Blue"); + new LeeFilter ("132", 0x00A0DC, "Medium Blue"); + new LeeFilter ("134", 0xFAA873, "Golden Amber"); + new LeeFilter ("135", 0xFF5F00, "Deep Golden Amber"); + new LeeFilter ("136", 0xF0BEE6, "Pale Lavender"); + new LeeFilter ("137", 0xC8B4E6, "Special Lavender"); + new LeeFilter ("138", 0xDCFFA0, "Pale Green"); + new LeeFilter ("139", 0x4BC300, "Primary Green"); + new LeeFilter ("140", 0x87F0EB, "Summer Blue"); + new LeeFilter ("141", 0x00D2E6, "Bright Blue"); + new LeeFilter ("142", 0xAAAAF0, "Pale Violet"); + new LeeFilter ("143", 0x64BED2, "Pale Navy Blue"); + new LeeFilter ("144", 0x5AE1E6, "No Colour Blue"); + new LeeFilter ("147", 0xFCB98C, "Apricot"); + new LeeFilter ("148", 0xFF507D, "Bright Rose"); + new LeeFilter ("151", 0xFFCDC3, "Gold Tint"); + new LeeFilter ("152", 0xFFD2C1, "Pale Gold"); + new LeeFilter ("153", 0xFFC8C8, "Pale Salmon"); + new LeeFilter ("154", 0xFFD5CF, "Pale Rose"); + new LeeFilter ("156", 0xE1B48C, "Chocolate"); + new LeeFilter ("157", 0xFF92A3, "Pink"); + new LeeFilter ("158", 0xFF8700, "Deep Orange"); + new LeeFilter ("159", 0xFFFAEB, "No Colour Straw"); + new LeeFilter ("161", 0x7DD2F5, "Slate Blue"); + new LeeFilter ("162", 0xFCDED8, "Bastard Amber"); + new LeeFilter ("164", 0xFF3200, "Flame Red"); + new LeeFilter ("165", 0x5AC8EB, "Daylight Blue"); + new LeeFilter ("169", 0xFADCF0, "Lilac Tint"); + new LeeFilter ("170", 0xE6AADC, "Deep Lavender"); + new LeeFilter ("172", 0x00DCDC, "Lagoon Blue"); + new LeeFilter ("174", 0xAFE1FA, "Dark Steel Blue"); + new LeeFilter ("176", 0xFFAAA0, "Loving Amber"); + new LeeFilter ("179", 0xFFBE00, "Chrome Orange"); + new LeeFilter ("180", 0xA064E6, "Dark Lavender"); + new LeeFilter ("181", 0x5000AA, "Congo Blue"); + new LeeFilter ("182", 0xF50000, "Light Red"); + new LeeFilter ("183", 0x00D7E3, "Moonlight Blue"); + new LeeFilter ("184", 0xF0E1D7, "Cosmetic Peach"); + new LeeFilter ("186", 0xF8DCDD, "Cosmetic Silver Rose"); + new LeeFilter ("187", 0xF5E4D7, "Cosmetic Rouge"); + new LeeFilter ("188", 0xFFEBD7, "Cosmetic Highlight"); + new LeeFilter ("189", 0xEEEDD8, "Cosmetic Silver Moss"); + new LeeFilter ("191", 0xE9EEEE, "Cosmetic Aqua Blue"); + new LeeFilter ("192", 0xFF8CB4, "Flesh Pink"); + new LeeFilter ("194", 0xBE8CF0, "Surprise Pink"); + new LeeFilter ("195", 0x006ED2, "Zenith Blue"); + new LeeFilter ("196", 0x78D2E6, "True Blue"); + new LeeFilter ("197", 0x82AAE6, "Alice Blue"); + new LeeFilter ("198", 0x6478C8, "Palace Blue"); + new LeeFilter ("199", 0x6464E6, "Regal Blue"); + new LeeFilter ("200", 0x91BEF5, "Double C.T. Blue"); + new LeeFilter ("201", 0xC3E1FA, "Full C.T. Blue"); + new LeeFilter ("202", 0xD7F0FF, "Half C.T. Blue"); + new LeeFilter ("203", 0xEBFCFF, "Quarter C.T. Blue"); + new LeeFilter ("204", 0xFAC387, "Full C.T. Orange"); + new LeeFilter ("205", 0xFCD9B1, "Half C.T. Orange"); + new LeeFilter ("206", 0xFCEAD6, "Quarter C.T. Orange"); + new LeeFilter ("207", 0xF0B46B, "Full C.T. Orange + .3 ND"); + new LeeFilter ("208", 0xE6A550, "Full C.T. Orange + .6 ND"); + new LeeFilter ("209", 0xC8C8C8, "0.3 ND"); + new LeeFilter ("210", 0xA5A5A5, "0.6 ND"); + new LeeFilter ("211", 0x828282, "0.9 ND"); + new LeeFilter ("212", 0xFFFAD7, "L.C.T.Yellow (Y1)"); + new LeeFilter ("213", 0xE6FCDC, "White Flame Green"); + new LeeFilter ("214", 0xFFFFFF, "Full Tough Spun"); + new LeeFilter ("215", 0xFFFFFF, "Half Tough Spun"); + new LeeFilter ("216", 0xFFFFFF, "White Diffusion"); + new LeeFilter ("217", 0xF5FFFF, "Blue Diffusion"); + new LeeFilter ("218", 0xF5FFFF, "Eighth C.T. Blue"); + new LeeFilter ("219", 0x9BDCAF, "LEE Fluorescent Green"); + new LeeFilter ("220", 0xFFFFFF, "White Frost"); + new LeeFilter ("221", 0xF5FFFF, "Blue Frost"); + new LeeFilter ("223", 0xFFF3E8, "Eighth C.T. Orange"); + new LeeFilter ("224", 0x96A0BE, "Daylight Blue Frost"); + new LeeFilter ("225", 0x9EA0A2, "Neutral Density Frost"); + new LeeFilter ("226", 0xFFFFFA, "LEE U.V."); + new LeeFilter ("228", 0xFFFFFF, "Brushed Silk"); + new LeeFilter ("229", 0xFFFFFF, "Quarter Tough Spun"); + new LeeFilter ("230", 0xDCBE8C, "Super Correction L.C.T. Yellow"); + new LeeFilter ("232", 0xEDBE83, "Super Correction W.F. Green"); + new LeeFilter ("236", 0xFAC795, "H.M.I. (to Tungsten)"); + new LeeFilter ("237", 0xFCB292, "C.I.D. (to Tungsten)"); + new LeeFilter ("238", 0xF5B9AA, "C.S.I. (to Tungsten)"); + new LeeFilter ("239", 0xCDCDCD, "Polariser"); + new LeeFilter ("241", 0xAADCC3, "LEE Fluorescent 5700 Kelvin"); + new LeeFilter ("242", 0xB9E6B9, "LEE Fluorescent 4300 Kelvin"); + new LeeFilter ("243", 0xCDF5AF, "LEE Fluorescent 3600 Kelvin"); + new LeeFilter ("244", 0xE6FABE, "LEE Plus Green"); + new LeeFilter ("245", 0xF0FCD2, "Half Plus Green"); + new LeeFilter ("246", 0xF5FFE6, "Quarter Plus Green"); + new LeeFilter ("247", 0xFAC3D7, "LEE Minus Green"); + new LeeFilter ("248", 0xFFE2E4, "Half Minus Green"); + new LeeFilter ("249", 0xFFECF0, "Quarter Minus Green"); + new LeeFilter ("250", 0xFFFFFF, "Half White Diffusion"); + new LeeFilter ("251", 0xFFFFFF, "Quarter White Diffusion"); + new LeeFilter ("252", 0xFFFFFF, "Eighth White Diffusion"); + new LeeFilter ("253", 0xFFFFFF, "Hampshire Frost"); + new LeeFilter ("254", 0xFFFFFF, "New Hampshire Frost"); + new LeeFilter ("255", 0xFFFFFF, "Hollywood Frost"); + new LeeFilter ("256", 0xFFFFFF, "Half Hampshire Frost"); + new LeeFilter ("257", 0xFFFFFF, "Quarter Hampshire Frost"); + new LeeFilter ("258", 0xFFFFFF, "Eighth Hampshire Frost"); + new LeeFilter ("261", 0xFFFFFF, "Tough Spun FR - Full"); + new LeeFilter ("262", 0xFFFFFF, "Tough Spun FR - 3/4"); + new LeeFilter ("263", 0xFFFFFF, "Tough Spun FR - 1/2"); + new LeeFilter ("264", 0xFFFFFF, "Tough Spun FR - 3/8"); + new LeeFilter ("265", 0xFFFFFF, "Tough Spun FR - 1/4"); + new LeeFilter ("269", 0xFFFFFF, "LEE Heat Shield"); + new LeeFilter ("270", 0xBEBEBE, "LEE Scrim"); + new LeeFilter ("271", 0xF0F0F0, "Mirror Silver"); + new LeeFilter ("272", 0xF0DC96, "Soft Gold Reflector"); + new LeeFilter ("273", 0xF3F3F3, "Soft Silver Reflector"); + new LeeFilter ("274", 0xEBD791, "Mirror Gold"); + new LeeFilter ("275", 0xBEBEBE, "Black Scrim"); + new LeeFilter ("278", 0xF3FFF3, "Eighth Plus Green"); + new LeeFilter ("279", 0xFFF3F7, "Eighth Minus Green"); + new LeeFilter ("280", 0x000000, "Black Foil"); + new LeeFilter ("281", 0xCDE6FA, "Three Quarter C.T. Blue"); + new LeeFilter ("283", 0xAFD9F5, "One and a Half C.T. Blue"); + new LeeFilter ("285", 0xFCCD94, "Three Quarter C.T. Orange"); + new LeeFilter ("286", 0xFFB464, "One and a Half C.T. Orange"); + new LeeFilter ("287", 0xFFA055, "Double C.T. Orange"); + new LeeFilter ("298", 0xE6E6E6, "0.15 ND"); + new LeeFilter ("299", 0x5F5F5F, "1.2 ND"); + new LeeFilter ("322", 0x41F5BE, "Soft Green"); + new LeeFilter ("323", 0x00E1AA, "Jade"); + new LeeFilter ("327", 0x008C50, "Forest Green"); + new LeeFilter ("328", 0xFF64C8, "Follies Pink"); + new LeeFilter ("332", 0xFF3787, "Special Rose Pink"); + new LeeFilter ("343", 0x8C00D2, "Special Medium Lavender"); + new LeeFilter ("345", 0xCD6ED7, "Fuchsia Pink"); + new LeeFilter ("352", 0x5AC8E1, "Glacier Blue"); + new LeeFilter ("353", 0x61E8E3, "Lighter Blue"); + new LeeFilter ("354", 0x00F0D7, "Special Steel Blue"); + new LeeFilter ("363", 0x006EC3, "Special Medium Blue"); + new LeeFilter ("366", 0xAAD2F0, "Cornflower"); + new LeeFilter ("400", 0xFFFFFF, "LEELux"); + new LeeFilter ("402", 0xFFFFFF, "Soft Frost"); + new LeeFilter ("404", 0xFFFFFF, "Half Soft Frost"); + new LeeFilter ("410", 0xFFFFFF, "Opal Frost"); + new LeeFilter ("414", 0xFFFFFF, "Highlight"); + new LeeFilter ("416", 0xFFFFFF, "Three Quarter White Diffusion"); + new LeeFilter ("420", 0xFFFFFF, "Light Opal Frost"); + new LeeFilter ("429", 0xFFFFFF, "Quiet Frost"); + new LeeFilter ("430", 0xFFFFFF, "Grid Cloth"); + new LeeFilter ("432", 0xFFFFFF, "Light Grid Cloth"); + new LeeFilter ("434", 0xFFFFFF, "Quarter Grid Cloth"); + new LeeFilter ("439", 0xFFFFFF, "Heavy Quiet Frost"); + new LeeFilter ("441", 0xFAC084, "Full C.T. Straw"); + new LeeFilter ("442", 0xFCDCAD, "Half C.T. Straw"); + new LeeFilter ("443", 0xFCEFDB, "Quarter C.T. Straw"); + new LeeFilter ("444", 0xFAF3E8, "Eighth C.T. Straw"); + new LeeFilter ("450", 0xFFFFFF, "Three Eighth White Diffusion"); + new LeeFilter ("452", 0xFFFFFF, "Sixteenth White Diffusion"); + new LeeFilter ("460", 0xFFFFFF, "Quiet Grid Cloth"); + new LeeFilter ("462", 0xFFFFFF, "Quiet Light Grid Cloth"); + new LeeFilter ("464", 0xFFFFFF, "Quiet Quarter Grid Cloth"); + new LeeFilter ("500", 0xB4D2FF, "Double New Colour Blue"); + new LeeFilter ("501", 0xD7EBFA, "New Colour Blue (Robertson Blue)"); + new LeeFilter ("502", 0xE1F0FF, "Half New Colour Blue"); + new LeeFilter ("503", 0xF4FAFF, "Quarter New Colour Blue"); + new LeeFilter ("504", 0xD2F5DC, "Waterfront Green"); + new LeeFilter ("505", 0xE3FF5A, "Sally Green"); + new LeeFilter ("506", 0xFFDACE, "Marlene"); + new LeeFilter ("507", 0xF85000, "Madge"); + new LeeFilter ("508", 0x5A46C3, "Midnight Maya"); + new LeeFilter ("511", 0x963C00, "Bacon Brown"); + new LeeFilter ("512", 0xcc6100, "Amber Delight"); + new LeeFilter ("513", 0xf5ff7d, "Ice and a Slice"); + new LeeFilter ("514", 0xf5ff5a, "Double G&T"); + new LeeFilter ("525", 0x8EB4FA, "Argent Blue"); + new LeeFilter ("550", 0xe3ca3c, "ALD Gold"); + new LeeFilter ("600", 0x98a8aa, "Arctic White"); + new LeeFilter ("601", 0x90a0a0, "Silver"); + new LeeFilter ("602", 0xa5a5aa, "Platinum"); + new LeeFilter ("603", 0xc8cdcd, "Moonlight White"); + new LeeFilter ("604", 0xFFC295, "Full C.T. Eight Five"); + + new LeeFilter ("642", 0x968200, "Half Mustard Yellow"); + new LeeFilter ("643", 0xB4A000, "Quarter Mustard Yellow"); + new LeeFilter ("650", 0xC8A862, "Industry Sodium"); + new LeeFilter ("651", 0xFF9B5F, "HI Sodium"); + new LeeFilter ("652", 0xFF8246, "Urban Sodium"); + new LeeFilter ("653", 0x965500, "LO Sodium"); + new LeeFilter ("700", 0x7D00CD, "Perfect Lavender"); + new LeeFilter ("701", 0xB45ADC, "Provence"); + new LeeFilter ("702", 0xE6D2F0, "Special Pale Lavender"); + new LeeFilter ("703", 0xD282DC, "Cold Lavender"); + new LeeFilter ("704", 0xF0AAFA, "Lily"); + new LeeFilter ("705", 0xF0AAFA, "Lily Frost"); + new LeeFilter ("706", 0x6E46C8, "King Fals Lavender"); + new LeeFilter ("707", 0x6400B4, "Ultimate Violet"); + new LeeFilter ("708", 0xDCEBFA, "Cool Lavender"); + new LeeFilter ("709", 0xC8C8FA, "Electric Lilac"); + new LeeFilter ("710", 0x8CA0F0, "Spir Special Blue"); + new LeeFilter ("711", 0xAABEDC, "Cold Blue"); + new LeeFilter ("712", 0xA0BEF0, "Bedford Blue"); + new LeeFilter ("713", 0x003CA0, "J.Winter Blue"); + new LeeFilter ("714", 0x5A91D2, "Elysian Blue"); + new LeeFilter ("715", 0x3C6EDC, "Cabana Blue"); + new LeeFilter ("716", 0x0064D2, "Mikkel Blue"); + new LeeFilter ("717", 0xC3E1FA, "Shanklin Frost"); + new LeeFilter ("718", 0xD4EDFA, "Half Shanklin Frost"); + new LeeFilter ("719", 0x9BC3F0, "Colour Wash Blue"); + new LeeFilter ("720", 0xC3E1FA, "Durham Daylight Frost"); + new LeeFilter ("721", 0x0082E6, "Berry Blue"); + new LeeFilter ("722", 0x008CD2, "Bray Blue"); + new LeeFilter ("723", 0x5082DC, "Virgin Blue"); + new LeeFilter ("724", 0x69E1EB, "Ocean Blue"); + new LeeFilter ("725", 0xBEF2F3, "Old Steel Blue"); + new LeeFilter ("727", 0x00A5B4, "QFD Blue"); + new LeeFilter ("728", 0xC8EBD2, "Steel Green"); + new LeeFilter ("729", 0x00AFAA, "Scuba Blue"); + new LeeFilter ("730", 0xDCFFE6, "Liberty Green"); + new LeeFilter ("731", 0xE1FAD7, "Dirty Ice"); + new LeeFilter ("733", 0xEBF7CF, "Damp Squib"); + new LeeFilter ("735", 0x00BE78, "Velvet Green"); + new LeeFilter ("736", 0x00AA00, "Twickenham Green"); + new LeeFilter ("738", 0xAAFF00, "JAS Green"); + new LeeFilter ("740", 0x5A6E00, "Aurora Borealis Green"); + new LeeFilter ("741", 0x826400, "Mustard Yellow"); + new LeeFilter ("742", 0xE19B50, "Bram Brown"); + new LeeFilter ("744", 0xF8C882, "Dirty White"); + new LeeFilter ("746", 0x6E3C00, "Brown"); + new LeeFilter ("747", 0xF5B99F, "Easy White"); + new LeeFilter ("748", 0xE96785, "Seedy Pink"); + new LeeFilter ("749", 0xFCD3CD, "Hampshire Rose"); + new LeeFilter ("750", 0xFAF1FE, "Durham Frost"); + new LeeFilter ("763", 0xFCF0D2, "Wheat"); + new LeeFilter ("764", 0xFCE6B4, "Sun Colour Straw"); + new LeeFilter ("765", 0xFFE591, "LEE Yellow"); + new LeeFilter ("767", 0xFFE600, "Oklahoma Yellow"); + new LeeFilter ("768", 0xFFC600, "Egg Yolk Yellow"); + new LeeFilter ("770", 0xFFB400, "Burnt Yellow"); + new LeeFilter ("773", 0xFCC5B2, "Cardbox Amber"); + new LeeFilter ("774", 0xFCD2BE, "Soft Amber Key 1"); + new LeeFilter ("775", 0xFCC6A5, "Soft Amber Key 2"); + new LeeFilter ("776", 0xFCBE9B, "Nectarine"); + new LeeFilter ("777", 0xF58200, "Rust"); + new LeeFilter ("778", 0xFF7600, "Millennium Gold"); + new LeeFilter ("779", 0xFC9885, "Bastard Pink"); + new LeeFilter ("780", 0xFF6F00, "AS Golden Amber"); + new LeeFilter ("781", 0xFF5000, "Terry Red"); + new LeeFilter ("787", 0xB9003C, "Marius Red"); + new LeeFilter ("789", 0xAA3C32, "Blood Red"); + new LeeFilter ("790", 0xFFB4A5, "Moroccan Pink"); + new LeeFilter ("791", 0xF5B9AA, "Moroccan Frost"); + new LeeFilter ("793", 0xFF3CA0, "Vanity Fair"); + new LeeFilter ("794", 0xFFAFDC, "Pretty 'n Pink"); + new LeeFilter ("795", 0xFA46C8, "Magical Magenta"); + new LeeFilter ("797", 0xAF0096, "Deep Purple"); + new LeeFilter ("798", 0xA000BE, "Chrysalis Pink"); + new LeeFilter ("799", 0x3C00B4, "Special KH Lavender"); + + new LeeFilter ("CL104", 0xff9600, "Cool LED Deep Amber"); + new LeeFilter ("CL105", 0xff6e00, "Cool LED Orange"); + new LeeFilter ("CL106", 0xbe0032, "Cool LED Primary Red"); + new LeeFilter ("CL113", 0xc80050, "Cool LED Magenta"); + new LeeFilter ("CL115", 0x00ffa0, "Cool LED Peacock Blue"); + new LeeFilter ("CL116", 0x00aa82, "Cool LED Medium Blue-Green"); + new LeeFilter ("CL117", 0xebffa0, "Cool LED Steel Blue"); + new LeeFilter ("CL118", 0x00f5b4, "Cool LED Light Blue"); + new LeeFilter ("CL119", 0x0091a5, "Cool LED Dark Blue"); + new LeeFilter ("CL126", 0xaf0050, "Cool LED Mauve"); + new LeeFilter ("CL128", 0xff0069, "Cool LED Bright Pink"); + new LeeFilter ("CL132", 0x00c8c8, "Cool LED Medium Blue"); + new LeeFilter ("CL139", 0x4bc300, "Cool LED Primary Green"); + new LeeFilter ("CL147", 0xff7d46, "Cool LED Apricot"); + new LeeFilter ("CL158", 0xff6900, "Cool LED Deep Orange"); + new LeeFilter ("CL164", 0xff0000, "Cool LED Flame Red"); + new LeeFilter ("CL180", 0xeb78a0, "Cool LED Dark Lavender"); + new LeeFilter ("CL181", 0x960078, "Cool LED Congo Blue"); + new LeeFilter ("CL182", 0xdc0052, "Cool LED Light Red"); + + new LeeFilter ("414P", 0xFFFFFF, "Perforated Highlight"); + new LeeFilter ("439P", 0xFFFFFF, "Perforated Heavy Quiet Frost"); + new LeeFilter ("A205", 0xFAD7AF, "Half C.T.O. Acrylic Panel"); + new LeeFilter ("A207", 0xF3B76E, "Full C.T.O. + 0.3 ND Acrylic Panel"); + new LeeFilter ("A208", 0xE7A651, "Full C.T.O. + 0.6 ND Acrylic Panel"); + new LeeFilter ("A209", 0xCDCDCD, "0.3 ND Acrylic Panel"); + new LeeFilter ("A210", 0xAAAAAA, "0.6 ND Acrylic Panel"); + new LeeFilter ("A211", 0x878787, "0.9 ND Acrylic Panel"); + } + + // + // + // + // + // + // + // + // + // + // + // + // +} diff --git a/src/java/adecWatt/model/Patch.java b/src/java/adecWatt/model/Patch.java new file mode 100644 index 0000000..5a83ddf --- /dev/null +++ b/src/java/adecWatt/model/Patch.java @@ -0,0 +1,90 @@ +package adecWatt.model; + +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; + +public class Patch { + public TreeMap lineConsumption = new TreeMap (); + public TreeMap lineCircuit = new TreeMap (Circuits.lineComparator); + + public TreeMap circuitConsumption = new TreeMap (); + public TreeMap> circuitLines = new TreeMap > (Circuits.lineComparator); + public TreeSet circuitless = new TreeSet (); + public TreeSet unplug = new TreeSet (Circuits.lineComparator); + public TreeSet shortcut = new TreeSet (Circuits.lineComparator); + + private void addConsumption (TreeMap map, String name, int value) { + Integer oldValue = map.get (name); + map.put (name, oldValue == null ? value : oldValue+value); + } + + public Set getLineKeys () { + TreeSet result = new TreeSet (Circuits.lineComparator); + result.addAll (lineCircuit.keySet ()); + return result; + } + + public Set getCircuitKeys () { + TreeSet result = new TreeSet (Circuits.lineComparator); + result.addAll (circuitLines.keySet ()); + return result; + } + + public Patch (Circuits circuits) { + for (Comp lastComp : circuits.keySet ()) { + Circuits.Circuit circuit = circuits.get (lastComp); + String lineName = lastComp.getLine (); + if (lineName == null) + continue; + TreeSet circuitNames = circuit.names; + int consumption = circuit.consumption; + switch (circuitNames.size ()) { + case 0: + continue; + case 1: + String circuitName = circuitNames.first (); + addConsumption (lineConsumption, lineName, consumption); + lineCircuit.put (lineName, circuitName); + addConsumption (circuitConsumption, circuitName, consumption); + TreeSet otherLines = circuitLines.get (circuitName); + if (otherLines == null) + circuitLines.put (circuitName, otherLines = new TreeSet (Circuits.lineComparator)); + otherLines.add (lineName); + break; + default: + lineCircuit.put (lineName, Circuits.SHORTCUT); + for (String circuitName2 : circuitNames) + shortcut.add (circuitName2); + } + } + for (Comp beginComp : circuits.getPlugedComps ()) + accLoop : + for (Acc beginAcc : beginComp.allPlugs) { + String circuitName = beginAcc.getCircuit (beginComp); + String compName = beginComp.getName (); + if (circuits.inLoop (beginAcc)) { + if (circuitName != null) + unplug.add (circuitName); + else + circuitless.add (compName); + continue; + } + for (Comp lastComp : circuits.keySet ()) { + Circuits.Circuit circuit = circuits.get (lastComp); + if (!circuit.nodes.contains (beginAcc)) + continue; + if (lastComp.getLine () == null) + if (circuitName != null) + unplug.add (circuitName); + else + circuitless.add (compName); + continue accLoop; + } + if (circuitName != null) + unplug.add (circuitName); + else + circuitless.add (compName); + } + } +} diff --git a/src/java/adecWatt/model/Permanent.java b/src/java/adecWatt/model/Permanent.java new file mode 100644 index 0000000..b386e60 --- /dev/null +++ b/src/java/adecWatt/model/Permanent.java @@ -0,0 +1,162 @@ +package adecWatt.model; + +import java.util.Arrays; +import java.util.Collection; +import java.util.TreeSet; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.Bundle; +import adecWatt.model.xml.XmlPermanent; + +public abstract class Permanent

, T extends Enum, A extends Enum> { + // ======================================== + static public enum UnitTypeEnum { Furniture, Information, Line, Accessory, Building, Lightplot; }; + static public enum SegmTypeEnum { Segment; }; + static public enum CompTypeEnum { Component; }; + static public enum AccTypeEnum { Accessory; }; + // XXX type "Comp" pour référence ? + static public enum PropTypeEnum { Text, Article, Icon, Image, Preview, Enum, Building, City, Number, Square, Geo, Cube; }; + + static public enum UnitAttrEnum { Id, Name, Modifier, Parent, Author, Updated; }; + static public enum SegmAttrEnum { Name, Modifier, Model, Placeid; }; + static public enum CompAttrEnum { Name, Modifier, Model, Placeid, Available; }; + static public enum AccAttrEnum { Name, Modifier, Model, Placeid; }; + static public enum PropAttrEnum { Name, Modifier, Multilabel, Spin, Choice, Rank; }; + + // ======================================== + static public final String + Lock = "lock", + Mandatory = "mandatory", + Localized = "localized", + NoMouse = "nomouse", + Hidden = "hidden", + Sticky = "sticky", + Reserved = "reserved", + Direct = "direct"; + + static public final String + NoSpin = "none", + HorizontalSpin = "horizontal"; + + // ======================================== + static public final Collection UnitModifiersSet = Arrays.asList (Localized); + static public final Collection SegmModifiersSet = Arrays.asList (Sticky, Hidden); + static public final Collection CompModifiersSet = Arrays.asList (Sticky, Reserved, Hidden); + static public final Collection AccModifiersSet = Arrays.asList (); + static public final Collection PropModifiersSet = Arrays.asList (Lock, Mandatory, Localized, Hidden, NoMouse); + static public final Collection PropHiddenModifiersSet = Arrays.asList (Lock); + static public final Collection PropNotHiddenModifiersSet = Arrays.asList (Mandatory, Localized, Hidden, NoMouse); + + static public final Collection PropSpinSet = Arrays.asList (NoSpin, HorizontalSpin); + + // ======================================== + public abstract Collection getModifiersSet (); + public abstract T getTypeToken (); + public abstract A getNameToken (); + public abstract A getModifierToken (); + + protected P xmlPermanent; + protected String name; + protected Collection modifiers; + protected Collection unknownModifiers; + + // ======================================== + public String getName () { return name; } + public String getLocalName () { return isLocalized () ? Bundle.getUser (getName ()) : getName (); } + public Collection getModifiers () { return modifiers; } + + public String getModifiersString () { return getModifiersString (modifiers); } + public boolean isModifier (String modifierName) { return isModifier (modifierName, modifiers); } + public boolean isLocalized () { return isModifier (Localized); } + public boolean isLock () { return isModifier (Lock); } + public boolean isHidden () { return isModifier (Hidden); } + public boolean isMandatory () { return isModifier (Mandatory); } + public boolean isSticky () { return isModifier (Sticky); } + public boolean isReserved () { return isModifier (Reserved); } + public boolean isNoMouse () { return isModifier (NoMouse); } + public boolean isDirect () { return isModifier (Direct); } + + // ======================================== + protected Permanent () { + } + protected Permanent (P xmlPermanent) { + initXmlAvantOwnProp (xmlPermanent); + } + + protected void importFrom (Permanent from) { + if (unknownModifiers == null && from.unknownModifiers != null) + unknownModifiers = from.unknownModifiers; + if (from.modifiers != null) + if (modifiers != null) + modifiers.addAll (from.modifiers); + else + modifiers = new TreeSet (from.modifiers); + // XXX pb cause furniture à la place de composant dans un copier/coller + // if (xmlPermanent == null && from.xmlPermanent != null) + // xmlPermanent = from.xmlPermanent; + } + + protected void initXmlAvantOwnProp (P xmlPermanent) { + this.xmlPermanent = xmlPermanent; + name = xmlPermanent.getFacet (getNameToken ()); + try { + unknownModifiers = xmlPermanent.getSplitFacet (getModifierToken ()); + modifiers = null; // XXX pas utile + for (String token : unknownModifiers) + addModifier (token); + unknownModifiers.removeAll (modifiers); + if (unknownModifiers.size () < 1) + unknownModifiers = null; + } catch (Exception e) { + } + } + + // ======================================== + public void setModifiers (Collection modifiers) { + if (modifiers == null || modifiers.size () == 0) { + this.modifiers = null; + return; + } + this.modifiers = modifiers; + } + public void addModifier (String modifier) { + if (modifier == null || modifier.isEmpty ()) + return; + if (!getModifiersSet ().contains (modifier)) + return; + if (modifiers == null) + modifiers = new TreeSet (); + modifiers.add (modifier); + } + public void removeModifier (String modifier) { + if (modifiers == null || modifier == null || modifier.isEmpty ()) + return; + modifiers.remove (modifier); + if (modifiers.size () < 1) + modifiers = null; + } + static public boolean isModifier (String modifierName, Collection modifiers) { + return modifiers != null && modifiers.contains (modifierName); + } + static public String getModifiersString (Collection modifiers) { + if (modifiers == null) + return ""; + return String.join ("|", modifiers); + } + + // ======================================== + @SuppressWarnings ("unchecked") + public Element getXml (Node parent, Document document) { + Element child = xmlPermanent == null ? + document.createElement (getTypeToken ().toString ().toLowerCase ()) + : xmlPermanent.getXml (document); + parent.appendChild (child); + XmlPermanent.putFacet (child, getNameToken (), name); + XmlPermanent.putSplitFacet (child, getModifierToken (), modifiers, unknownModifiers); + return child; + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/PermanentDB.java b/src/java/adecWatt/model/PermanentDB.java new file mode 100644 index 0000000..aa96796 --- /dev/null +++ b/src/java/adecWatt/model/PermanentDB.java @@ -0,0 +1,478 @@ +package adecWatt.model; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Result; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; + +import misc.Config; +import misc.Log; +import misc.Util; +import static misc.Config.FS; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.unit.Building; +import adecWatt.model.xml.XmlUnit; + +public class PermanentDB { + + // ======================================== + static public final File dataDir = Config.findDataDir (); + static public enum UnitLocation { Server, Local, Zip }; + static public final String localToken = "local"; + static public final String serverToken = "server"; + static public final String cacheToken = "cache"; + static public final List localRemoteDir = Arrays.asList (localToken, serverToken); + static public final String lptExtention = "lpt"; + static public final String lpzExtention = "lpz"; + static public final String backExtention = "back"; + static public final String[] exportExtention = { lpzExtention }; + + // ======================================== + private AdecWatt adecWatt; + private ImageDB iconDB; + private ImageDB imageDB; + private String powerPlugId, powerSocketId; + + public String getPowerPlugId () { return powerPlugId; } + public String getPowerSocketId () { return powerSocketId; } + + public ArrayList getAllBuildings () { + ArrayList result = new ArrayList (); + for (Enumeration enumUnitNode = getRootByName (Prop.PropBuilding).getUnitNode ().breadthFirstEnumeration (); + enumUnitNode.hasMoreElements(); + ) { + Building building = (Building) ((UnitNode) enumUnitNode.nextElement ()).getUnit (); + if (building.isUncompleted (null)) + continue; + result.add (building); + } + return result; + } + + public PermanentDB (AdecWatt adecWatt) { + this.adecWatt = adecWatt; + iconDB = adecWatt.getIconDB (); + imageDB = adecWatt.getImageDB (); + } + + // ======================================== + // Unit + // ======================================== + HashSet> allUnit = new HashSet> (); + Hashtable> idUnit = new Hashtable> (); + Hashtable> namedRoots = new Hashtable> (); + + public boolean isReferedUnit (String unitId) { return idUnit.containsKey (unitId); } + public Unit getUnitById (String unitId) { return idUnit.get (unitId); } + public Unit getRootByName (String unitName) { return namedRoots.get (unitName); } + public Set getReferedIds () { return idUnit.keySet (); } + + public boolean isModifiedUnit () { + for (Unit unit : allUnit) + if (unit.story.isModified ()) + return true; + return false; + } + + // ======================================== + public void reload () { + powerSocketId = powerPlugId = null; + allUnit.clear (); + idUnit.clear (); + namedRoots.clear (); + for (String srcDir : localRemoteDir) + for (File file : getAllXmlFiles (srcDir)) + try { + if (file.length () == 0) + continue; + FileInputStream fileInputStream = new FileInputStream (file); + Unit unit = Unit.getInstanceFromStream (adecWatt, fileInputStream, file, + serverToken.equals (srcDir) ? UnitLocation.Server : UnitLocation.Local); + fileInputStream.close (); + if (isReferedUnit (unit.getId ())) { + System.err.println (unit.getName ()+" already recorded : skip "+file); + // ignore + continue; + } + add (unit); + } catch (Exception e) { + System.err.println ("XXX: "+file+" error: "+e); + e.printStackTrace (); + } + for (Unit unit : allUnit) + unit.updateXmlParent (); + } + + public void newNamePlan (TreeMap iconMap, TreeMap imageMap) { + HashSet> visited = new HashSet> (); + for (Unit unit : allUnit) + unit.newNamePlan (visited, iconMap, imageMap); + } + + public void add (Unit unit) { + String unitId = unit.getId (); + try { + allUnit.remove (idUnit.get (unitId)); + } catch (Exception e) { + } + allUnit.add (unit); + idUnit.put (unitId, unit); + adecWatt.getUser ().updateDataId (unitId); + if ("powerPlug".equals (unit.getName ())) + powerPlugId = unitId; + if ("powerSocket".equals (unit.getName ())) + powerSocketId = unitId; + unit.enableStory (); + } + public void forget (Unit unit) { + adecWatt.broadcastDisplay (AdecWattManager.actionClose, unit); + idUnit.remove (unit.getId ()); + allUnit.remove (unit); + unit.disableStory (); + // XXX et si "powerPlug" ou "powerSocket" ? + } + public Unit reload (Unit unit) { + for (String srcDir : localRemoteDir) { + try { + File file = getXmlFile (new File (dataDir, srcDir), unit.getFileName ()); + FileInputStream fileInputStream = new FileInputStream (file); + Unit newUnit = Unit.getInstanceFromStream (adecWatt, fileInputStream, file, + serverToken.equals (srcDir) ? UnitLocation.Server : UnitLocation.Local); + fileInputStream.close (); + return newUnit; + } catch (Exception e) { + } + } + return null; + } + public void remove (Unit unit) { + if (unit.file != null) + Util.backup (unit.file, Util.getExtention (unit.file), backExtention); + forget (unit); + } + public void renameVisitor (HashSet> units) { + TreeMap translateMap = new TreeMap (); + String pattern = String.format ("%03d-", User.visitorId); + User user = adecWatt.getUser (); + for (Unit unit : units) { + String unitId = unit.getId (); + if (!unitId.startsWith (pattern)) + continue; + translateMap.put (unitId, user.getDataId ()); + } + if (translateMap.size () < 1) + return; + for (String unitId : translateMap.keySet ()) { + Unit unit = idUnit.get (unitId); + if (unit.file != null) + Util.backup (unit.file, Util.getExtention (unit.file), backExtention); + idUnit.remove (unitId); + String newUnitId = translateMap.get (unitId); + unit.changeId (newUnitId); + idUnit.put (newUnitId, unit); + } + for (Unit unit : allUnit) + if (unit.renameUnits (translateMap)) + // YYY voir save ? + unit.story.markNotSaved (); + } + public void promote (HashSet> units) { + if (units.size () == 0) + return; + for (Unit unit : units) + unit.promote (); + adecWatt.broadcastUpdate (AdecWatt.BroadcastUnitRoots); + } + public void renameImages (TreeMap translateMap) { + for (Unit unit : allUnit) + if (unit.renameImages (translateMap)) + // YYY voir save ? + unit.story.markNotSaved (); + } + + // ======================================== + static public final File getXmlFile (String name) { + for (String srcDir : localRemoteDir) + try { + File file = getXmlFile (new File (dataDir, srcDir), name); + if (file != null) + return file; + } catch (Exception e) { + } + return null; + } + + static public final File getXmlFile (File dir, String name) { + File test = new File (dir, name); + if (test.exists ()) + return test; + for (File subDir : getSubDirs (dir)) { + test = getXmlFile (subDir, name); + if (test != null) + return test; + + } + return null; + } + + static public final File[] getXmlFiles (File dir) { + return dir.listFiles (new FileFilter () { + public boolean accept (File file) { + return file.isFile () && !file.isHidden () && + lptExtention.equals (Util.getExtention (file)); + } + }); + } + static public final File[] getSubDirs (File dir) { + return dir.listFiles (new FileFilter () { + public boolean accept (File file) { + return file.isDirectory () && ! file.isHidden (); + } + }); + } + public boolean isFileNameExists (String baseName) { + for (String srcDir : localRemoteDir) + try { + if (isFileExists (new File (dataDir, srcDir), baseName)) + return true; + } catch (Exception e) { + } + return false; + } + public boolean isFileExists (File dir, String baseName) { + for (File file : getXmlFiles (dir)) { + String fileName = file.getName (); + if (fileName.startsWith (baseName) && + lptExtention.equals (fileName.substring (1+baseName.length ()))) + return true; + } + for (File subDir : getSubDirs (dir)) + if (isFileExists (subDir, baseName)) + return true; + return false; + } + + // ======================================== + static public ArrayList getAllXmlFiles (String srcDir) { + ArrayList result = new ArrayList (); + try { + getAllXmlFiles (new File (dataDir, srcDir), result); + } catch (Exception e) { + } + return result; + } + static public void getAllXmlFiles (File dir, ArrayList result) { + for (File file : getXmlFiles (dir)) + result.add (file); + for (File subDir : getSubDirs (dir)) + getAllXmlFiles (subDir, result); + } + + // ======================================== + static public File getInputFile (String name) { + for (String srcDir : localRemoteDir) { + File file = new File (dataDir, srcDir+FS+name); + if (file.exists () && file.isFile ()) + return file; + } + throw new IllegalArgumentException ("Can't find input "+name+"!"); + } + + // ======================================== + static public File getLocalFile (String name) { + File file = (new File (dataDir, localToken+FS+name)); + file.getParentFile ().mkdirs (); + return file; + } + static public File getRemoteFile (String name) { + File file = (new File (dataDir, serverToken+FS+name)); + file.getParentFile ().mkdirs (); + return file; + } + + // ======================================== + static public XmlUnit readXmlUnit (InputStream stream) { + try { + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance ().newDocumentBuilder (); + Document document = documentBuilder.parse (stream); + document.normalizeDocument (); + return new XmlUnit (document.getFirstChild ()); + } catch (Exception e) { + Log.keepLastException ("PermanentDB::readDocument", e); + throw new IllegalArgumentException ("Not XML file input."); + } + } + + // ======================================== + static public Document newDocument () { + try { + DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance ().newDocumentBuilder (); + Document document = documentBuilder.newDocument (); + document.setXmlStandalone (true); + return document; + } catch (Exception e) { + return null; + } + } + + // ======================================== + static public void writeUnit (Unit unit, File file) { + try { + FileOutputStream fileOutputStream = new FileOutputStream (file); + writeUnit (unit, fileOutputStream); + fileOutputStream.close (); + } catch (Exception e) { + Log.keepLastException ("PermanentDB::writeDocument", e); + } + } + + static public void writeUnit (Unit unit, OutputStream stream) + throws IOException, TransformerException { + Document document = newDocument (); + unit.getXml (document, document); + Source source = new DOMSource (document); + Result result = new StreamResult (stream); + Transformer xformer = TransformerFactory.newInstance ().newTransformer (); + xformer.setOutputProperty (OutputKeys.INDENT, "yes"); + xformer.setOutputProperty ("{http://xml.apache.org/xslt}indent-amount", "2"); + xformer.transform (source, result); + stream.flush (); + } + + public void addUnitZip (ZipOutputStream out, Unit unit) + throws IOException, TransformerException { + if (unit == null) + return; + ZipEntry ze = new ZipEntry (unit.getSaveDir ()+"/"+unit.getFileName ()); + out.putNextEntry (ze); + ByteArrayOutputStream stream = new ByteArrayOutputStream (); + writeUnit (unit, stream); + out.write (stream.toByteArray ()); + out.closeEntry(); + out.flush (); + } + + public File getLastExport () { return Config.getFile ("LastExport"); } + + public File checkExportExtention (File file) { + if (Util.getExtention (file) != null) + return file; + return new File (file.getParentFile (), Util.changeExtention (file.getName (), lpzExtention)); + } + + public void exportFile (Unit unit, File file) { + if (file == null) + return; + try { + file = checkExportExtention (file); + HashSet> unitLinks = new HashSet> (); + TreeSet iconsLinks = new TreeSet (); + TreeSet imagesLinks = new TreeSet (); + unitLinks.add (unit); + unit.getLocalLink (new HashSet> (), unitLinks, iconsLinks, imagesLinks); + FileOutputStream fileOutputStream = new FileOutputStream (file); + ZipOutputStream out = new ZipOutputStream (fileOutputStream); + for (Unit unit2 : unitLinks) + addUnitZip (out, unit2); + // XXX prendre aussi les étiquettes dans icon/"user".lpi filté avec "^imageName^:.*" dans iconsLinks + for (String iconName : iconsLinks) + iconDB.addImageZip (out, iconName); + // XXX prendre aussi les étiquettes dans image/"user".lpi filté avec "^imageName^:.*" dans imagesLinks + for (String imageName : imagesLinks) + imageDB.addImageZip (out, imageName); + out.close(); + fileOutputStream.close (); + Config.setFile ("LastExport", file); + } catch (Exception e) { + e.printStackTrace (); + } + } + + public void importFile (File file) { + if (file == null) + return; + try { + file = checkExportExtention (file); + ArrayList> newUnit = new ArrayList> (); + byte[] tmp = new byte[1024*1024]; + FileInputStream fileInputStream = new FileInputStream (file); + ZipInputStream in = new ZipInputStream (fileInputStream); + for (;;) { + ZipEntry ze = in.getNextEntry (); + if (ze == null) + break; + ByteArrayOutputStream out = new ByteArrayOutputStream (); + for (;;) { + int nb = in.read (tmp, 0, tmp.length); + if (nb < 0) + break; + out.write (tmp, 0, nb); + } + out.flush (); + in.closeEntry (); + String[] path = ze.getName ().split ("/"); + String dirName = path[0]; + String fileName = path [1]; + String fileExtention = Util.getExtention (fileName); + ByteArrayInputStream dataIn = new ByteArrayInputStream (out.toByteArray ()); + if (!iconDB.importFile (dirName, fileName, dataIn) && + !imageDB.importFile (dirName, fileName, dataIn)) { + if (lptExtention.equals (fileExtention)) + newUnit.add (Unit.getInstanceFromStream (adecWatt, dataIn, null, UnitLocation.Zip)); + else + System.err.println ("XXX pb: "+fileName); + } + } + fileInputStream.close (); + for (Unit unit : newUnit) { + String unitId = unit.getId (); + if (isReferedUnit (unitId)) { + Unit oldUnit = idUnit.get (unitId); + forget (oldUnit); + oldUnit.replace (unit); + continue; + } + add (unit); + } + for (Unit unit : newUnit) { + unit.updateXmlParent (); + unit.story.markNotSaved (); + } + adecWatt.broadcastUpdate (AdecWatt.BroadcastUnitRoots); + Config.setFile ("LastExport", file); + } catch (Exception e) { + e.printStackTrace (); + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/PreviewCache.java b/src/java/adecWatt/model/PreviewCache.java new file mode 100644 index 0000000..4130252 --- /dev/null +++ b/src/java/adecWatt/model/PreviewCache.java @@ -0,0 +1,111 @@ +package adecWatt.model; + +import java.awt.Dimension; +import java.awt.Image; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileFilter; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.List; +import javax.imageio.ImageIO; +import javax.swing.ImageIcon; + +import misc.Util; + +public class PreviewCache { + static { + ImageIO.setUseCache (false); + } + + static public final String[] imageExtentions = { "gif", "jpg", "jpeg", "png", "tif", "tiff", "bmp" }; + static public final List imageExtentionsList = Arrays.asList (imageExtentions); + static public final FileFilter fileImageFilter = new FileFilter () { + public boolean accept (File file) { + try { + return file.isFile () && !file.isHidden () && + imageExtentionsList.contains (Util.getExtention (file).toLowerCase ()); + } catch (Exception e) { + return false; + } + } + }; + + static public int thumbSide = 40; // XXX + static public Dimension thumbDim = new Dimension (thumbSide, thumbSide); // XXX + static public final long maxSize = 1024*1024; // XXX int MAX_FILE_PREVIEW + + private File dir; + + public PreviewCache (File dir) { + this.dir = dir; + } + + private Hashtable toCleanList = new Hashtable (); + public synchronized void prepareClean () { + try { + toCleanList.clear (); + for (File file : dir.listFiles (fileImageFilter)) + toCleanList.put (file, true); + } catch (Exception e) { + } + } + public synchronized void clean () { + for (File file : toCleanList.keySet ()) + if (toCleanList.get (file)) + file.delete (); + toCleanList.clear (); + } + public synchronized void clean (String imageName) { + (new File (dir, Util.getBase (imageName)+".png")).delete (); // XXX YYY + + } + public synchronized ImageIcon getIcon (File file) { + if (file == null || (maxSize > 0 && file.length () > maxSize)) + return null; + File cacheFile = new File (dir, Util.getBase (file)+".png"); // XXX YYY + if (cacheFile.exists () && cacheFile.lastModified () > file.lastModified ()) { + toCleanList.put (cacheFile, false); + return new ImageIcon (cacheFile.getPath ()); + } + try { + BufferedImage bufferedImage = ImageIO.read (file); + if (bufferedImage == null) + return null; + int width = bufferedImage.getWidth (); + int height = bufferedImage.getHeight (); + if (width == 0 || height == 0) + return null; + Image image = null; + if (width > height) { + if (width > thumbSide) { + height = Math.max (1, (height*thumbSide)/width); + width = thumbSide; + image = bufferedImage.getScaledInstance (width, height, Image.SCALE_DEFAULT); + } + } else { + if (height > thumbSide) { + width = Math.max (1, (width*thumbSide)/height); + height = thumbSide; + image = bufferedImage.getScaledInstance (width, height, Image.SCALE_DEFAULT); + } + } + if (image != null) { + bufferedImage = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB); + bufferedImage.createGraphics ().drawImage (image, 0, 0, null); + } + try { + dir.mkdirs (); + ImageIO.write (bufferedImage, "png", cacheFile); + toCleanList.put (cacheFile, false); + } catch (Exception e) { + e.printStackTrace (); + } + return new ImageIcon (bufferedImage); + } catch (Exception e) { + e.printStackTrace (); + return null; + } + } + +} diff --git a/src/java/adecWatt/model/Prop.java b/src/java/adecWatt/model/Prop.java new file mode 100644 index 0000000..e8d6bbb --- /dev/null +++ b/src/java/adecWatt/model/Prop.java @@ -0,0 +1,432 @@ +package adecWatt.model; + +import java.awt.geom.Point2D; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.Locale; +import java.util.TreeSet; +import java.util.Vector; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.DimensionDouble; +import misc.Util; + +import adecWatt.model.xml.XmlProp; + +public class Prop extends Permanent { + // ======================================== + static public PropTypeEnum toPropTypeEnum (String val) { return PropTypeEnum.valueOf (PropTypeEnum.class, Util.toCapital (val)); } + + static public final String + PropAngle = "angle", + PropBegin = "begin", + PropBlueprint = "blueprint", + PropBlueprintPos = "blueprintPos", + PropBlueprintSize = "blueprintSize", + PropBlueprintVisibility = "blueprintVisibility", + PropBuilding = "building", + PropCircuit = "circuit", + PropColor = "color", + PropConnectedOn = "connectedOn", + PropConnectedTo = "connectedTo", + PropEnd = "end", + PropIcon = "icon", + PropLabelColor = "labelColor", + PropLabelProp = "labelProp", + PropLabelSize = "labelSize", + PropLength = "length", + PropLine = "line", + PropLowIcon = "lowIcon", + PropPos = "pos", + PropPoster = "poster", + PropRot = "rot", + PropSize = "size", + PropStyle = "style", + PropTileSize = "tileSize", + PropWatt = "watt", + PropWidth = "width"; + + static public final String PropMix = "MIX"; + static public final Double DoubleMix = Double.NaN; + + static public NumberFormat numberFormat = NumberFormat.getInstance (Locale.ENGLISH); + static public NumberFormat geoFormat = NumberFormat.getInstance (Locale.ENGLISH); + static { + numberFormat.setMinimumFractionDigits (0); + numberFormat.setGroupingUsed (false); + geoFormat.setMinimumFractionDigits (6); + geoFormat.setGroupingUsed (false); + } + + // ======================================== + private PropTypeEnum type; + public Integer rank; + public String sValue; + public Collection enumChoice; + public List multiLabel; + public boolean horizontalSpin; + public Collection unknownSpin; + public int nbVal; + public Double[] values; + + // ======================================== + public Collection getModifiersSet () { return PropModifiersSet; } + public PropTypeEnum getTypeToken () { return type; } + public PropAttrEnum getNameToken () { return PropAttrEnum.Name; } + public PropAttrEnum getModifierToken () { return PropAttrEnum.Modifier; } + + public void setType (PropTypeEnum type) { + this.type = type; + switch (type) { + case Icon: + case Image: + case Enum: + case Building: + case Text: + case Article: + case City: + nbVal = 0; + break; + case Number: + nbVal = 1; + break; + case Geo: + case Square: + nbVal = 2; + break; + case Cube: + nbVal = 3; + break; + default: + System.err.println("coucou unknowed type:"+type); + break; + } + } + public String getEnumString () { + if (enumChoice == null) + return ""; + return String.join ("|", enumChoice); + } + public String getLabelString () { + if (multiLabel == null) + return ""; + return String.join ("|", multiLabel); + } + static public boolean isSValue (Prop prop) { + return prop != null && prop.sValue != null && !prop.sValue.isEmpty (); + } + + // ======================================== + public Prop (XmlProp xmlProp) { + super (xmlProp); + if (name == null) + throw new IllegalArgumentException ("Unknown XML unit has no name ("+xmlPermanent+")."); + setType (xmlProp.type); + try { + rank = new Integer (Integer.parseInt (xmlProp.getFacet (PropAttrEnum.Rank))); + } catch (Exception e) { + } + try { + unknownSpin = xmlProp.getSplitFacet (PropAttrEnum.Spin); + if (unknownSpin != null) { + if (unknownSpin.contains (Permanent.HorizontalSpin)) { + horizontalSpin = true; + unknownSpin.remove (Permanent.HorizontalSpin); + } + if (unknownSpin.contains (Permanent.NoSpin)) { + horizontalSpin = false; + unknownSpin.remove (Permanent.NoSpin); + } + if (unknownSpin.size () < 1) + unknownSpin = null; + } + enumChoice = xmlProp.getSplitFacet (PropAttrEnum.Choice); + multiLabel = xmlProp.getOrderedSplitFacet (PropAttrEnum.Multilabel); + setValue (xmlProp.getValue ()); + } catch (Exception e) { + System.err.println ("XXX: "+getTypeToken ()+":"+name+":"+sValue); + e.printStackTrace (); + } + } + + public Prop (String name, PropTypeEnum type) { + this (name, type, null, new TreeSet (), null, null); + } + + public Prop (String name, PropTypeEnum type, boolean horizontalSpin) { + this (name, type); + this.horizontalSpin = horizontalSpin; + } + + public Prop (String name, PropTypeEnum type, Integer rank, Collection modifiers, Collection enumChoice, List multiLabel) { + this.name = name; + setType (type); + if (modifiers != null && modifiers.size () > 0) + this.modifiers = modifiers; + this.rank = rank; + this.enumChoice = enumChoice; + this.multiLabel = multiLabel; + } + + public Prop clone (boolean horizontalSpin) { + Prop prop = clone (); + prop.horizontalSpin = horizontalSpin; + return prop; + } + public Prop clone (String sValue) { + Prop prop = clone (); + prop.setValue (sValue); + return prop; + } + public Prop clone () { + Prop result = new Prop (name, type); + result.importFrom (this); + return result; + } + protected void importFrom (Prop from) { + super.importFrom (from); + if (from.rank != null) + rank = from.rank; + horizontalSpin = from.horizontalSpin; + if (from.unknownSpin != null) + unknownSpin = from.unknownSpin; + if (from.enumChoice != null && from.enumChoice.size () > 0) + enumChoice = new TreeSet (from.enumChoice); + if (from.multiLabel != null && from.multiLabel.size () > 0) + multiLabel = new Vector (from.multiLabel); + sValue = from.sValue; + if (from.values != null) + values = Arrays.copyOf (from.values, from.values.length); + } + + // ======================================== + static public Comparator propComparator = + new Comparator () { + public int compare (Prop o1, Prop o2) { + if (o1 == o2) + return 0; + if (o1.rank != null && o2.rank != null) + return o1.rank - o2.rank; + if (o1.rank == null && o2.rank == null) + return o1.name.compareTo (o2.name); + return o1.rank == null ? 1 : -1; + } + }; + + static public ArrayList getOrderedProps (Collection props) { + ArrayList result = new ArrayList (props); + result.sort (propComparator); + return result; + } + + // ======================================== + @SuppressWarnings ("unchecked") + public Element getXml (Node parent, Document document) { + Element child = super.getXml (parent, document); + if (rank != null) + XmlProp.putFacet (child, PropAttrEnum.Rank, ""+rank); + TreeSet spin = horizontalSpin ? new TreeSet () : null; + if (horizontalSpin) + spin.add (Permanent.HorizontalSpin); + XmlProp.putSplitFacet (child, PropAttrEnum.Spin, spin, unknownSpin); + XmlProp.putSplitFacet (child, PropAttrEnum.Choice, enumChoice); + XmlProp.putSplitFacet (child, PropAttrEnum.Multilabel, multiLabel); + if (values != null) + // XXX devrait toujours êter synchrone + valuesChange (); + XmlProp.putValue (child, sValue); + return child; + } + public void valuesChange () { + sValue = tab2string (values, nbVal); + } + public void sValueChange () { + values = string2tab (sValue, nbVal); + } + public Prop getApplyMixProp (Prop src, Prop parent) { + if (nbVal == 0 || sValue == null || sValue == PropMix || sValue.isEmpty () ) + return this; + Double[] tmp = new Double [nbVal]; + boolean noChange = true; + for (int i = 0; i < nbVal; i++) { + if (values[i] == null) + continue; + if (values[i] == DoubleMix) { + noChange = false; + if (src == null || src.values == null || src.values [i] == null || + (parent != null && parent.values != null && src.values [i] == parent.values [i])) + continue; + tmp[i] = src.values [i]; + continue; + } + if (parent != null && values [i] == parent.values [i]) { + noChange = values [i] == null; + continue; + } + tmp [i] = values [i]; + } + boolean nullValue = true; + for (int i = 0; i < nbVal; i++) + nullValue &= values[i] == null; + if (nullValue) + return clone (null); + if (noChange) + return this; + return clone (tab2string (tmp, nbVal)); + } + public final String tab2string (Double[] values, int nbVal) { + String result = "", sep = ""; + if (values == null || nbVal < 1 || values == null) + return null; + if (values.length != nbVal) { + System.err.println ("coucou problème de métamorphose : "+values.length+" != "+nbVal+"\n"); + // XXX exception ? + } + boolean noVal = true; + NumberFormat nf = type == PropTypeEnum.Geo ? geoFormat : numberFormat; + for (Double val : values) { + result += sep; + if (val != null) { + result += nf.format (val).replace (",", "."); + noVal = false; + } + sep = "|"; + } + if (noVal) + return null; + return result; + } + static public final Double[] string2tab (String sValue, int nbVal) { + if (nbVal < 1 || sValue == null || sValue == PropMix || sValue.isEmpty ()) + return null; + String[] tmp = sValue.split ("\\|"); + if (tmp.length < 1) + return null; + if (tmp.length > nbVal) { + System.err.println ("coucou problème de métamorphose : "+tmp.length+" != "+nbVal+"\n"); + // XXX exception ? + } + Double [] values = new Double [nbVal]; + for (int i = 0; i < nbVal && i < tmp.length; i++) { + if ("?".equals (tmp[i])) { + values[i] = DoubleMix; + continue; + } + if (tmp [i] != null && !tmp [i].isEmpty ()) + values[i] = Double.parseDouble (tmp [i].replace (",", ".")); + } + return values; + } + + // ======================================== + public void setValue (String value) { + if (value == null || value.isEmpty ()) + value = null; + sValue = value; + switch (getTypeToken ()) { + case Icon: + case Image: + // XXX charger l'image ? + case Enum: + // XXX test dans l'ensemble des valeurs ? + case Building: + // XXX test dans l'ensemble des valeurs ? + case Text: + case Article: + case City: + break; + case Number: + case Geo: + case Square: + case Cube: + sValueChange (); + break; + default: + System.err.println ("coucou unknowed type:"+getTypeToken ()); + break; + } + } + + public void setThetaDegree (double thetaDegree) { + if (nbVal != 3) { + System.err.println ("coucou Prop.setThetaDegree: not cube!"); + // XXX exception ? + } + if (thetaDegree > 360 || thetaDegree < -360) + thetaDegree = thetaDegree - (((long)thetaDegree)/360)*360; + try { + values [2] = thetaDegree; + } catch (Exception e) { + values = new Double[] { null, null, thetaDegree }; // XXX + } + valuesChange (); + } + public void setAngle (double angle) { + if (nbVal != 1) { + System.err.println ("coucou Prop.setAngle: not number!"); + // XXX exception ? + } + try { + values [0] = angle; + } catch (Exception e) { + values = new Double[] { angle }; // XXX + } + valuesChange (); + } + public void setLength (double length) { + try { + values [0] = length; + } catch (Exception e) { + values = new Double[] { length }; // XXX + } + valuesChange (); + } + + // public double getLevel () { + // if (nbVal != 3) { + // System.err.println ("coucou Prop.getLevel: not cube!"); + // // XXX exception ? + // } + // return values [2]; + // } + + public void setSize (DimensionDouble size) { + if (nbVal != 3) { + System.err.println ("coucou Prop.setSize: not cube!"); + // XXX exception ? + } + try { + values [0] = size.getWidth (); + values [1] = size.getHeight (); + } catch (Exception e) { + values = new Double[]{ size.getWidth (), size.getHeight (), null }; // XXX + } + valuesChange (); + } + public void setPosition (Point2D pos) { + if (nbVal != 3) { + System.err.println ("coucou Prop.setPosition: not cube!"); + // XXX exception ? + } + try { + values [0] = pos.getX (); + values [1] = pos.getY (); + } catch (Exception e) { + values = new Double[]{ pos.getX (), pos.getY (), null }; // XXX + } + valuesChange (); + } + + // ======================================== + public String toString () { + return type+" "+name+" "+sValue+" "+rank; + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/Segm.java b/src/java/adecWatt/model/Segm.java new file mode 100644 index 0000000..731ba30 --- /dev/null +++ b/src/java/adecWatt/model/Segm.java @@ -0,0 +1,159 @@ +package adecWatt.model; + +import java.awt.BasicStroke; +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Path2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.util.Collection; +import misc.DimensionDouble; +import adecWatt.model.unit.NonWorkspace; +import adecWatt.model.unit.Workspace; +import adecWatt.model.xml.XmlSegm; + +public class Segm extends Item { + // ======================================== + public Collection getModifiersSet () { return SegmModifiersSet; } + public SegmTypeEnum getTypeToken () { return SegmTypeEnum.Segment; } + public SegmAttrEnum getNameToken () { return SegmAttrEnum.Name; } + public SegmAttrEnum getModifierToken () { return SegmAttrEnum.Modifier; } + public SegmAttrEnum getPlaceIdToken () { return SegmAttrEnum.Placeid; } + public SegmAttrEnum getModelToken () { return SegmAttrEnum.Model; } + public Workspace getStoryUnit () { return container; } + + public Segm getLink (Editable workspace) { return new Segm (name, placeId, (Workspace) workspace, model); } + + // ======================================== + public Segm (Workspace workspace, XmlSegm xmlSegm) { + super (workspace, xmlSegm); + // XXX collectEmbedded (); + } + public Segm (String name, String placeName, Workspace workspace, NonWorkspace model) { + super (name, placeName, workspace, model); + } + public Segm (Workspace workspace, NonWorkspace model) { + super (null, null, workspace, model); + } + public Segm clone (Workspace workspace) { + Segm result = new Segm (workspace, model); + result.importFrom (this); + return result; + } + + // ======================================== + public DimensionDouble getSize () { + return new DimensionDouble (getLength (), Math.max (getWidth (), getLabelSize ())); + } + public double getThetaDegree () { + return getAngle (); + } + public void changeThetaDegree (double thetaDegree) { + if (isSticky ()) + return; + getLocalProp (Prop.PropAngle, Prop.PropTypeEnum.Number).setAngle (thetaDegree); + } + public void changeSize (DimensionDouble size) { + if (isSticky ()) + return; + getLocalProp (Prop.PropLength, Prop.PropTypeEnum.Number).setLength (size.width); + } + + // ======================================== + public void print (Graphics2D printGraphics, Workspace workspace, String plugId) { + print (printGraphics, workspace, getPos (), new DimensionDouble (getLength (), getWidth ()), getAngle ()); + } + + public void print (Graphics2D printGraphics, Workspace workspace, Point2D pos, DimensionDouble size, double thetaDegree) { + double length = size.width; + float width = (float) getWidth (); // size.height; // XXX force + Paint color = getColor (); + Workspace.printLine (printGraphics, color, createStroke (getStyle (), width), pos, length, thetaDegree, + createArrowStroke (width), createEnd (getBegin (), width), createEnd (getEnd (), width)); + Workspace.printText (printGraphics, getLabel (), getLabelColor (), pos, getSize (), thetaDegree); + } + + // ======================================== + static public float [] + plain = null, + dot = {1f, 1f}, + dash = {3f, 3f}, + dashdot = {3f, 4f, 1f, 4f}, + dashdotdot = {3f, 4f, 1f, 1f, 1f, 4f}; + static public float [] createScaleStyle (float [] tab, double width) { + if (tab == null || width == 1) + return tab; + float [] result = new float [tab.length]; + for (int i = 0; i < tab.length; i++) + result[i] = (float) (tab [i]*width); + return result; + } + static public float [] createStyleStroke (String style, double width) { + try { + switch (style) { + case "dot" : return createScaleStyle (dot, width); + case "dash" : return createScaleStyle (dash, width); + case "dashdot" : return createScaleStyle (dashdot, width); + case "dashdotdot" : return createScaleStyle (dashdotdot, width); + } + } catch (Exception e) { + } + return null; + } + static public Stroke createStroke (String style, float width) { + return new BasicStroke (width, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 1f, createStyleStroke (style, width), 0); + } + static public Shape createEnd (String style, float width) { + try { + switch (style) { + case "arrow" : return createArrow (width); + case "dot" : return createDot (width); + case "square" : return createSquare (width); + case "stop" : return createStop (width); + } + } catch (Exception e) { + } + return null; + } + static public Stroke createArrowStroke (float width) { + return new BasicStroke (width, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER); + } + static public Shape createArrow (double width) { + double barb = 4*width; + double angle = Math.toRadians (20); + Path2D.Double path = new Path2D.Double (); + + double x = -barb*Math.cos (angle); + double y = barb*Math.sin (angle); + path.moveTo (0, 0); + path.lineTo (x, y); + path.lineTo (-3*width, 0); + x = -barb*Math.cos (-angle); + y = barb*Math.sin (-angle); + path.lineTo (x, y); + path.closePath(); + return path; + } + static public Shape createStop (double width) { + double barb = 3*width; + Path2D.Double path = new Path2D.Double (); + path.moveTo (0, barb); + path.lineTo (0, -barb); + return path; + } + + static public Shape createDot (double width) { + double barb = 2*width; + return new Ellipse2D.Double (-width, -width, barb, barb); + } + + static public Shape createSquare (double width) { + double barb = 2*width; + return new Rectangle2D.Double (-width, -width, barb, barb); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/TagDB.java b/src/java/adecWatt/model/TagDB.java new file mode 100644 index 0000000..97c6b3b --- /dev/null +++ b/src/java/adecWatt/model/TagDB.java @@ -0,0 +1,310 @@ +package adecWatt.model; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.InputStreamReader; +import java.io.PrintWriter; +import java.util.Arrays; +import java.util.Collection; +import java.util.TreeMap; +import java.util.TreeSet; + +import misc.Log; +import misc.Util; +import static misc.Config.FS; + +import static adecWatt.model.PermanentDB.backExtention; +import static adecWatt.model.PermanentDB.dataDir; +import static adecWatt.model.PermanentDB.localRemoteDir; +import static adecWatt.model.PermanentDB.localToken; +import static adecWatt.model.PermanentDB.serverToken; + +public class TagDB { + + // ======================================== + static public final String lpiExtention = "lpi"; + static public final File[] getLpiFiles (File dir) { + return dir.listFiles (new FileFilter () { + public boolean accept (File file) { + try { + return file.isFile () && !file.isHidden () && lpiExtention.equals (Util.getExtention (file).toLowerCase ()); + } catch (Exception e) { + return false; + } + } + }); + } + + // ======================================== + private TreeSet words = new TreeSet (); + private String dir; + public ImgTag imgTag = new ImgTag (); + protected ImgTag [] localRemoteTag = { + new ImgTag (), + new ImgTag () + }; + + // ======================================== + public TagDB (String dir) { + this.dir = dir; + } + public void reload () { + words.clear (); + imgTag.clear (); + try { + for (int i = 0; i < localRemoteDir.size (); i++) { + localRemoteTag [i].clear (); + File tmpDir = new File (dataDir, localRemoteDir.get (i)+FS+dir); + if (!tmpDir.isDirectory ()) + continue; + for (File file : getLpiFiles (tmpDir)) + localRemoteTag[i].readLpi (file); + } + localRemoteTag[0].clean (localRemoteTag[1]); + imgTag.merge (localRemoteTag[1]); + imgTag.merge (localRemoteTag[0]); + } catch (Exception e) { + Log.keepLastException ("ImageDB::reload", e); + } + } + + // ======================================== + public Collection getTags (String imageName) { + return imgTag.getTags (imageName); + } + + public void putTags (String imageName, Collection imageTags) { + if (!imgTag.addTags (imageName, imageTags)) + return; + try { + if ((new TreeSet (imageTags)).equals (localRemoteTag[1].getTags (imageName))) + localRemoteTag [0].addTags (imageName, null); + else + localRemoteTag [0].addTags (imageName, imageTags); + localRemoteTag [0].writeLpi (localToken, User.splitId (imageName)[0]); + } catch (Exception e) { + Log.keepLastException ("ImageDB::putTags", e); + } + } + + public void promote (Collection imageNames) { + if (imageNames == null) + return; + TreeSet ownerIds = new TreeSet (); + for (String imageName : imageNames) { + Collection imageTags = localRemoteTag [0].getTags (imageName); + if (imageTags == null) + continue; + localRemoteTag [1].addTags (imageName, imageTags); + localRemoteTag [0].addTags (imageName, null); + ownerIds.add (User.splitId (imageName)[0]); + } + for (int ownerId : ownerIds) { + localRemoteTag [1].writeLpi (serverToken, ownerId); + localRemoteTag [0].writeLpi (localToken, ownerId); + } + } + + public void renameImages (TreeMap translateMap) { + for (int i = 0; i < localRemoteDir.size (); i++) { + TreeSet ownerIds = new TreeSet (); + for (String oldImageName : translateMap.keySet ()) { + Collection imageTags = localRemoteTag [i].getTags (oldImageName); + if (imageTags == null) + continue; + String newImageName = translateMap.get (oldImageName); + localRemoteTag [i].addTags (newImageName, imageTags); + localRemoteTag [i].addTags (oldImageName, null); + ownerIds.add (User.splitId (oldImageName)[0]); + ownerIds.add (User.splitId (newImageName)[0]); + } + for (int ownerId : ownerIds) + localRemoteTag [i].writeLpi (localRemoteDir.get (i), ownerId); + } + } + + // ======================================== + public TreeSet cloneImageTags (Collection imageTags) { + TreeSet result = new TreeSet (); + for (String word : imageTags) + result.add (getWord (word)); + return result; + } + public String getWord (String word) { + if (word == null) + return null; + word = word.toLowerCase (); + String floor = words.floor (word); + if (floor != null && floor.equals (word)) + return floor; + words.add (word); + return word; + } + + // ======================================== + public class ImgTag { + // ---------------------------------------- + TreeMap>> ids = new TreeMap>> (); + + // ---------------------------------------- + public int size () { return ids.size (); } + + public void clear () { + ids.clear (); + } + + // ---------------------------------------- + public void merge (ImgTag others) { + for (int ownerId : others.ids.keySet ()) { + TreeMap> refImg = others.ids.get (ownerId); + TreeMap> idsImg = ids.get (ownerId); + if (idsImg == null) + ids.put (ownerId, idsImg = new TreeMap> ()); + for (int imageId : refImg.keySet ()) + idsImg.put (imageId, cloneImageTags (refImg.get (imageId))); + } + } + + // ---------------------------------------- + public void clean (ImgTag ref) { + for (int ownerId : ids.keySet ()) { + TreeMap> refImg = ref.get (ownerId); + if (refImg == null) + continue; + TreeMap> idsImg = ids.get (ownerId); + TreeSet imgToRemove = new TreeSet (); + for (int imageName : idsImg.keySet ()) { + TreeSet refNames = refImg.get (imageName); + if (refNames == null) + continue; + if (refNames.equals (idsImg.get (imageName))) + imgToRemove.add (imageName); + } + if (imgToRemove.size () > 0) { + for (int imageName : imgToRemove) + idsImg.remove (imageName); + writeLpi (localToken, ownerId); + } + } + } + + // ---------------------------------------- + public void addTags (String line) { + if (line == null || line.startsWith ("#") || line.isEmpty ()) + return; + int sepIdx = line.indexOf (":"); + String imageName = line.substring (0, sepIdx); + String[] arg = line.substring (sepIdx+1).split (":"); + addTags (imageName, Arrays.asList (arg)); + } + + // ---------------------------------------- + public boolean addTags (String imageName, Collection imageTags) { + int [] w = User.splitId (imageName); + int ownerId = w[0]; + int imgId = w[1]; + TreeSet oldValues = null; + try { + oldValues = ids.get (ownerId).get (imgId); + } catch (Exception e) { + } + if (imageTags == null || imageTags.size () == 0) { + if (oldValues == null || oldValues.size () == 0) + return false; + TreeMap> custumBD = ids.get (ownerId); + custumBD.remove (imgId); + if (custumBD.size () == 0) + ids.remove (ownerId); + return true; + } + if (imageTags.equals (oldValues)) + return false; + TreeMap> custumBD = ids.get (ownerId); + if (custumBD == null) + ids.put (ownerId, custumBD = new TreeMap> ()); + custumBD.put (imgId, cloneImageTags (imageTags)); + return true; + } + + // ---------------------------------------- + public TreeMap> get (int ownerId) { + try { + return ids.get (ownerId); + } catch (Exception e) { + return null; + } + } + + // ---------------------------------------- + public Collection getTags (String imageName) { + try { + int [] w = User.splitId (imageName); + return ids.get (w[0]).get (w[1]); + } catch (Exception e) { + return null; + } + } + + // ---------------------------------------- + public void readLpi (File file) { + int lineNb = 0; + String line = null; + BufferedReader in = null; + try { + in = new BufferedReader (new InputStreamReader (new FileInputStream (file))); + for (;;) { + lineNb++; + line = in.readLine (); + if (line == null) + break; + addTags (line); + } + } catch (Exception e) { + Log.keepLastException ("ImageDB::readLpi: "+file+":"+lineNb+" <"+line+">", e); + } finally { + try { + in.close (); + } catch (Exception e) { + } + } + } + + // ---------------------------------------- + public void writeLpi (String placeToken, int ownerId) { + File file = new File (dataDir, String.format ("%s%03d.%s", placeToken+FS+dir+FS, ownerId, lpiExtention)); + Util.backup (file, lpiExtention, backExtention); + TreeMap> custumBD = get (ownerId); + if (custumBD == null || custumBD.size () < 1) + return; + file.getParentFile ().mkdirs (); + file.setExecutable (false); + PrintWriter out = null; + try { + out = new PrintWriter (new FileWriter (file)); + for (int imageId : custumBD.keySet ()) { + TreeSet imageTags = custumBD.get (imageId); + if (imageTags.size () < 1) + continue; + out.print (User.getDataId (ownerId, imageId)); + for (String tag : imageTags) + out.print (":"+tag); + out.println (); + } + } catch (Exception e) { + Log.keepLastException ("ImageDB::writeLpi", e); + } finally { + try { + out.close (); + } catch (Exception e) { + } + } + } + + // ---------------------------------------- + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/Unit.java b/src/java/adecWatt/model/Unit.java new file mode 100644 index 0000000..9bb685d --- /dev/null +++ b/src/java/adecWatt/model/Unit.java @@ -0,0 +1,374 @@ +package adecWatt.model; + +import java.io.File; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.TreeSet; +import javax.swing.tree.TreePath; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.Bundle; +import misc.StateNotifier; +import misc.Story; +import misc.Util; +import static misc.Config.FS; + +import adecWatt.model.xml.XmlUnit; +import adecWatt.model.unit.*; + +@SuppressWarnings ({"unchecked"}) +public abstract class Unit> + extends Editable { + + static public final String + BroadcastChangeBuilding = "ChangeBuilding", + BroadcastChangePos = "ChangePos", + BroadcastChangeRot = "ChangeRot", + BroadcastChangeRotSize = "ChangeRotSize", + BroadcastConnection = "Connection", + BroadcastNewItem = "NewItem", + BroadcastRemoveItem = "RemoveItem", + BroadcastSetSelectionItems = "SetSelectionItems", + BroadcastUpdateItem = "UpdateItem", + BroadcastUpdatePermItem = "UpdatePermItem"; + + // ======================================== + PermanentDB.UnitLocation location; + protected String id; + protected File file; + protected AdecWatt adecWatt; + protected UnitNode unitNode; + + private UnitTypeEnum type; + + public StateNotifier stateNotifier = new StateNotifier (); + public Story story = new Story (stateNotifier); + + // ======================================== + public Collection getModifiersSet () { return UnitModifiersSet; } + public UnitTypeEnum getTypeToken () { return type; } + static public UnitAttrEnum getIdToken () { return UnitAttrEnum.Id; } + public UnitAttrEnum getNameToken () { return UnitAttrEnum.Name; } + public UnitAttrEnum getModifierToken () { return UnitAttrEnum.Modifier; } + + public String getId () { return id; } + public String getFileName () { return id+"."+PermanentDB.lptExtention; } + public String getSaveDir () { return getClass ().getSimpleName ().toLowerCase (); } + public PermanentDB.UnitLocation getLocation () { return location; } + public boolean getRemote () { return location == PermanentDB.UnitLocation.Server; } + + public AdecWatt getAdecWatt () { return adecWatt; } + public Unit getUnitRoot () { return ((UnitNode) unitNode.getRoot ()).getUnit (); } + public UnitNode getUnitNode () { return unitNode; } + public Unit getDirectUnit () { return this; } + public Unit getParentUnit () { return getParent (); } + public Unit getStoryUnit () { return this; } + public Editable getModel () { return null; } + + // ======================================== + public Unit getParent () { + UnitNode parentNode = (UnitNode) unitNode.getParent (); + return parentNode == null ? null : parentNode.getUnit (); + } + + // public boolean hasChild (String childName) { + // for (Enumeration e = unitNode.children (); e.hasMoreElements (); ) + // if (((UnitNode) e.nextElement ()).getUnit ().getName ().equals (childName)) + // return true; + // return false; + // } + + public ArrayList> getChildren () { + ArrayList> result = new ArrayList> (); + for (Enumeration e = unitNode.children (); e.hasMoreElements (); ) + result.add (((UnitNode) e.nextElement ()).getUnit ()); + return result; + } + + public boolean isDescendingFrom (String unitId) { + if (unitId == null || unitId.isEmpty ()) + return false; + for (Unit current = this; ; ) { + if (unitId.equals (current.getId ())) + return true; + UnitNode parent = (UnitNode) current.unitNode.getParent (); + if (parent == null) + return false; + current = parent.getUnit (); + } + } + + public ArrayList> getAvailablePermanents (boolean isEmbedded, Editable editable) { + ArrayList> result = new ArrayList> (); + for (Enumeration e = ((UnitNode) unitNode.getRoot ()).breadthFirstEnumeration (); e.hasMoreElements (); ) { + Unit unit = ((UnitNode) e.nextElement ()).getUnit (); + if (isEmbedded) { + if (unit.isUncompleted (editable)) + continue; + } else { + if (unit.getUnitNode ().isNodeAncestor (unitNode) || unit == editable) + continue; + } + result.add (unit); + } + return result; + } + + public boolean isUncompleted (Editable editable) { + for (String propName : getOrderedPropsName ()) { + if (!Permanent.isModifier (Permanent.Mandatory, getPropModifiers (propName))) + continue; + if (getPropVal (propName) != null) + continue; + if (editable == null) + return true; + Prop prop = editable.getOwnProp (propName); + if (prop != null && prop.sValue != null) + continue; + return true; + } + return false; + } + + // ======================================== + static final Unit getInstanceFromStream (AdecWatt adecWatt, InputStream dataIn, File file, PermanentDB.UnitLocation location) { + XmlUnit xmlUnit = PermanentDB.readXmlUnit (dataIn); + String id = xmlUnit.getFacet (getIdToken ()); + adecWatt.getUser ().updateDataId (id); + Unit result = getInstance (adecWatt, xmlUnit.type, id); + result.location = location; + result.file = file; + result.initXml (xmlUnit); + return result; + } + public void getCopy (String name) { + if (getParent () == null) + return; + Unit result = (Unit) getInstance (adecWatt, xmlPermanent.type, null); + result.name = name; + result.importFrom (this); + adecWatt.getPermanentDB ().add (result); + adecWatt.broadcastDisplay (AdecWatt.BroadcastUpdateUnitTree, result.getParent ()); + } + public void getNewChild (String name) { + Unit result = (Unit) getInstance (adecWatt, type, null); + result.initChild (this, name); + adecWatt.getPermanentDB ().add (result); + updateTree (); + } + + private static final Unit getInstance (AdecWatt adecWatt, UnitTypeEnum type, String id) { + switch (type) { + case Furniture: + return new Furniture (adecWatt, id); + case Information: + return new Information (adecWatt, id); + case Line: + return new Line (adecWatt, id); + case Accessory: + return new Accessory (adecWatt, id); + case Building: + return new Building (adecWatt, id); + case Lightplot: + return new Lightplot (adecWatt, id); + } + throw new IllegalArgumentException ("Can't find constructor for type ("+type+")."); + } + + // ======================================== + protected Unit (AdecWatt adecWatt, String id) { + this.adecWatt = adecWatt; + if (id == null) + id = adecWatt.getUser ().getDataId (); + this.id = id; + unitNode = new UnitNode (this); + Bundle.addBundleObserver (this); + } + + protected void initXml (XmlUnit xmlUnit) { + super.initXml (xmlUnit); + if (name == null) + // XXX c'est plus un gros problème + throw new IllegalArgumentException ("Unknown XML unit has no name ("+xmlPermanent+")."); + type = xmlUnit.type; + } + protected void importFrom (Unit from) { + super.importFrom (from); + location = PermanentDB.UnitLocation.Local; + type = from.type; + story.markNotSaved (); + Unit parent = from.getParent (); + if (parent != null) + parent.unitNode.add (unitNode); + } + protected void initChild (Unit unit, String name) { + location = PermanentDB.UnitLocation.Local; + type = unit.type; + modifiers = unit.modifiers == null || unit.modifiers.size () < 1 ? null : new TreeSet (unit.modifiers); + this.name = name; + story.markNotSaved (); + unit.unitNode.add (unitNode); + } + + public void updateXmlParent () { + if (getParent () != null) + return; + String parentId = xmlPermanent.getFacet (UnitAttrEnum.Parent); + if (parentId == null) { + adecWatt.getPermanentDB ().namedRoots.put (getName (), this); + return; + } + Unit parent = adecWatt.getPermanentDB ().getUnitById (parentId); + if (parent == null) { + System.err.println ("XXX Unit:updateXmlParent: "+parentId+" not loaded !"); + return; + } + parent.unitNode.add (unitNode); + collectEmbedded (); + } + + // ======================================== + public TreePath getPath () { + ArrayList> path = new ArrayList> (); + for (Unit unit = this; unit != null; unit = unit.getParent ()) + path.add (0, unit.unitNode); + return new TreePath (path.toArray ()); + } + + public ArrayList> search (String text) { + ArrayList> result = new ArrayList> (); + for (Enumeration e = ((UnitNode) unitNode.getRoot ()).breadthFirstEnumeration (); e.hasMoreElements (); ) { + Unit unit = ((UnitNode) e.nextElement ()).getUnit (); + if (unit.match (text)) + result.add (unit); + } + return result; + } + + // ======================================== + public void enableStory () { + stateNotifier.addUpdateObserver (adecWatt, AdecWatt.BroadcastStory); + } + public void disableStory () { + stateNotifier.removeObserver (adecWatt); + } + public void replace (Unit newUnit) { + Unit parent = getParent (); + adecWatt.getPermanentDB ().add (newUnit); + if (parent != null) + parent.unitNode.remove (unitNode); + for (Unit child : getChildren ()) + newUnit.unitNode.add (child.unitNode); + adecWatt.broadcastDisplay (AdecWatt.BroadcastUnitStory, newUnit); + } + public void findPromote (HashSet> unitLinks, TreeSet iconsLinks, TreeSet imagesLinks) { + unitLinks.add (this); + getLocalLink (new HashSet> (), unitLinks, iconsLinks, imagesLinks); + } + public void changeId (String newId) { + id = newId; + story.markNotSaved (); + } + + public void remove () { + PermanentDB permanentDB = adecWatt.getPermanentDB (); + Unit newUnit = null; + Unit parent = getParent (); + switch (location) { + case Server: + return; + case Local: + permanentDB.remove (this); + break; + case Zip: + permanentDB.forget (this); + break; + } + newUnit = permanentDB.reload (this); + if (newUnit != null) { + replace (newUnit); + newUnit.updateXmlParent (); + if (parent != null) + adecWatt.broadcastDisplay (AdecWatt.BroadcastUpdateUnitTree, parent); + else + adecWatt.broadcastUpdate (AdecWatt.BroadcastUnitRoots); + updateView (); + return; + } + parent.unitNode.remove (unitNode); + adecWatt.broadcastDisplay (AdecWatt.BroadcastUpdateUnitTree, parent); + } + + // ======================================== + public void updateBundle () { + //XXX setUserObject (getLocalName ()); + } + + // ======================================== + public void getLocalLink (HashSet> visited, HashSet> unitLinks, TreeSet iconsLinks, TreeSet imagesLinks) { + if (visited.contains (this)) + return; + super.getLocalLink (visited, unitLinks, iconsLinks, imagesLinks); + if (!getRemote () || story.isModified ()) + unitLinks.add (this); + Unit parent = getParent (); + if (parent == null) + return; + parent.getLocalLink (visited, unitLinks, iconsLinks, imagesLinks); + } + + public void save () { + File file = PermanentDB.getLocalFile (getSaveDir ()+FS+getFileName ()); + PermanentDB.writeUnit (this, file); + location = PermanentDB.UnitLocation.Local; + this.file = file; + story.markSaved (); + } + + public void promote () { + String fileName = getSaveDir ()+FS+getFileName (); + Util.backup (PermanentDB.getLocalFile (fileName), PermanentDB.lptExtention, PermanentDB.backExtention); + File remotefile = PermanentDB.getRemoteFile (fileName); + PermanentDB.writeUnit (this, remotefile); + this.file = remotefile; + location = PermanentDB.UnitLocation.Server; + story.markSaved (); + } + + public Element getXml (Node parentXml, Document document) { + Element child = super.getXml (parentXml, document); + XmlUnit.putFacet (child, UnitAttrEnum.Id, id); + Unit parent = getParent (); + if (parent != null) + XmlUnit.putFacet (child, UnitAttrEnum.Parent, parent.id); + return child; + } + + // ======================================== + public void setParentUnit (Unit parent) { + UnitNode oldParentNode = (UnitNode) unitNode.getParent (); + if (oldParentNode == null || parent == null || oldParentNode == parent.unitNode) + return; + oldParentNode.remove (unitNode); + ((Unit)parent).unitNode.add (unitNode); + } + public void updateTree () { + adecWatt.broadcastDisplay (AdecWatt.BroadcastUpdateUnitTree, this); + } + public void storyChange (Story.Commands commands, ArrayList changeProps) { + storyChange (commands, false, ownProps, changeProps); + } + public void storyTransform (Story.Commands commands, Collection modifiers, Unit parent, String newName, ArrayList transProps) { + storyTransform (commands, newName, modifiers, parent, ownProps, transProps); + } + public String toString () { + return getLocalName (); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/UnitNode.java b/src/java/adecWatt/model/UnitNode.java new file mode 100644 index 0000000..bbf858b --- /dev/null +++ b/src/java/adecWatt/model/UnitNode.java @@ -0,0 +1,54 @@ +package adecWatt.model; + +import java.util.Collections; +import java.util.Comparator; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.MutableTreeNode; +import javax.swing.tree.TreeNode; + +@SuppressWarnings ("serial") public class UnitNode> extends DefaultMutableTreeNode { + // ======================================== + public UnitNode (Unit unit) { + super (unit); + } + + @SuppressWarnings ("unchecked") + public Unit getUnit () { + return (Unit) getUserObject (); + } + + // ======================================== + @SuppressWarnings("unchecked") + public void insert (MutableTreeNode newChild, int childIndex) { + if (children == null) { + super.insert (newChild, childIndex); + return; + } + int index = Collections.binarySearch (children, newChild, nodeComparator); + if (index < 0) + super.insert (newChild, -index-1); + } + protected Comparator nodeComparator = + new Comparator () { + @Override public int compare (TreeNode o1, TreeNode o2) { + int result = o1.toString ().compareToIgnoreCase (o2.toString()); + if (result != 0) + return result; + // XXX + return ((UnitNode) o1).getUnit ().getId ().compareToIgnoreCase (((UnitNode) o2).getUnit ().getId ().toString()); + } + @Override + public boolean equals (Object obj) { + return false; + } + @Override public int hashCode() { + int hash = 7; + return hash; + } + }; + // ======================================== + public String toString () { + return getUnit ().getLocalName (); + } + // ======================================== +} diff --git a/src/java/adecWatt/model/User.java b/src/java/adecWatt/model/User.java new file mode 100644 index 0000000..eb148cd --- /dev/null +++ b/src/java/adecWatt/model/User.java @@ -0,0 +1,187 @@ +package adecWatt.model; + +import java.util.HashSet; +import java.util.Hashtable; + +import misc.Config; +import misc.StateNotifier; +import misc.Util; + +public class User extends StateNotifier { + + // ======================================== + static public final int serverId = 0; + static public final int visitorId = 1; + static public final String + BroadcastUserChangeProfil = "UserChangeProfil"; + + static public enum Role { + // import/export/print + Visitor, // afficher + StageManager, // créer/modifier/organiser des plans de feu + Architect, // créer/modifier/organiser des leux/salles + FurnitureManager, // créer/modifier/organiser des mobilier accessoires et des informations + Linguist, // traduction des formulaires (tout voir avec affiche) + DataStructuresManager, // ajout de champs et métamorphose + DataManager, // transfert sur le serveur + Yoda; // depasé les bornes, il n'y a plus de limite + } + + // ======================================== + public boolean connected = false; + private String login, password; + private int currentId; + private int userId; + private Hashtable maxIds = new Hashtable<> (); + private HashSet roles = new HashSet (); + + static public int updateRoles (HashSet roles, String rolesLine) { + roles.clear (); + roles.add (Role.Visitor); + try { + String[] tokens = rolesLine.split ("\\|"); + String id = tokens [0]; + tokens = tokens[1].split (","); + for (String token : tokens) + try { + roles.add (Role.valueOf (Role.class, token)); + } catch (Exception e) { + e.printStackTrace (); + } + return Integer.parseInt (id); + } catch (Exception e) { + return visitorId; + } + } + public HashSet getRoles () { return new HashSet (roles); } + public String getLogin () { return login; } + public String getPassword () { return password; } + public int getUserId () { return userId; } + public boolean isVisitorId () { return userId == 1; } + + // ======================================== + public boolean hasRole (Role... someRoles) { + for (Role role : someRoles) + if (roles.contains (role)) + return true; + return false; + } + public boolean isAdmin () { return hasRole (Role.Yoda); } + public boolean isLinguist () { return hasRole (Role.Linguist) || isAdmin (); } + public boolean isDataStructuresManager () { return hasRole (Role.DataStructuresManager) || isAdmin (); } + public boolean isDataManager () { return hasRole (Role.DataManager) || isAdmin (); } + public boolean isEditor () { + return + hasRole (Role.StageManager) || + hasRole (Role.Architect) || + hasRole (Role.FurnitureManager) || isAdmin (); + } + public boolean isEditor (Unit unit) { + try { + if (isAdmin ()) + return true; + switch (Permanent.UnitTypeEnum.valueOf (Permanent.UnitTypeEnum.class, Util.toCapital (unit.getUnitRoot ().getName ()))) { + case Lightplot: + return hasRole (Role.StageManager); + case Furniture: + case Information: + case Line: + case Accessory: + return hasRole (Role.FurnitureManager); + case Building: + return hasRole (Role.Architect); + } + } catch (Exception e) { + } + return false; + } + + // ======================================== + private void getConfig (Role role) { + if (Config.getBoolean ("Role"+role, false)) + roles.add (role); + } + private void setConfig (Role role) { + Config.setBoolean ("Role"+role, roles.contains (role)); + } + + // ======================================== + public User () { + currentId = userId = Config.getInt ("UserId", visitorId); + login = Config.getString ("Login", ""); + roles.add (Role.Visitor); + getConfig (Role.StageManager); + getConfig (Role.Architect); + getConfig (Role.FurnitureManager); + } + + // ======================================== + public void setLogin (String login) { + Config.setString ("Login", this.login = login); + } + public void setPassword (String password) { + this.password = password; + } + + // ======================================== + public void setRoles (HashSet roles) { + this.roles = new HashSet (roles); + this.roles.add (Role.Visitor); + currentId = isDataManager () ? serverId : userId; + setConfig (Role.StageManager); + setConfig (Role.Architect); + setConfig (Role.FurnitureManager); + broadcastUpdate (BroadcastUserChangeProfil); + } + public void setUserId (int userId) { + this.userId = userId; + Config.setInt ("UserId", userId); + currentId = isDataManager () ? serverId : userId; + } + + // ======================================== + static public String getDataId (int ownerId, int serialId) { + return String.format ("%03d-%04d", ownerId, serialId); + } + static public int[] splitId (String id) { + try { + if (id == null) + return null; + int sepIdx = id.indexOf ("-"); + int ownerId = Integer.parseInt (id.substring (0, sepIdx)); + int extIdx = id.indexOf (".", sepIdx); + int value = Integer.parseInt (extIdx > 0 ? id.substring (sepIdx+1, extIdx) : id.substring (sepIdx+1)); + return new int [] {ownerId, value}; + } catch (Exception e) { + } + return null; + } + + // ======================================== + public String getDataId () { + int maxId = 0; + try { + maxId = maxIds.get (currentId); + } catch (Exception e) { + } + maxId++; + maxIds.put (currentId, maxId); + return getDataId (currentId, maxId); + } + public void updateDataId (String id) { + int [] ids = splitId (id); + if (ids == null) + return; + int ownerId = ids[0]; + int value = ids[1]; + int maxId = 0; + try { + maxId = maxIds.get (ownerId); + } catch (Exception e) { + } + if (value > maxId) + maxIds.put (ownerId, value); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/compile b/src/java/adecWatt/model/compile new file mode 100644 index 0000000..001fd23 --- /dev/null +++ b/src/java/adecWatt/model/compile @@ -0,0 +1,782 @@ +-*- mode: compilation; default-directory: "~/perso/adecWatt56/src/java/adecWatt/model/" -*- +Compilation started at Sun Feb 4 19:00:19 + +ant -emacs -f /home/felix/perso/adecWatt56/ant/build.xml run +Buildfile: /home/felix/perso/adecWatt56/ant/build.xml + +init: +Created dir: /home/felix/perso/adecWatt56/build/api +Created dir: /home/felix/perso/adecWatt56/build/class +Created dir: /home/felix/perso/adecWatt56/data/log +Copying 31 files to /home/felix/perso/adecWatt56/build/class/data/config + +compile: +Compiling 94 source files to /home/felix/perso/adecWatt56/build/class +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:359: warning: [rawtypes] found raw type: Item + Vector clip = new Vector (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:359: warning: [rawtypes] found raw type: Item + Vector clip = new Vector (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:435: warning: [rawtypes] found raw type: Item + Vector items = jWorkspaceView.getSelectedItems (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:449: warning: [rawtypes] found raw type: Item + Vector items = jWorkspaceView.getSelectedItems (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:634: warning: [rawtypes] found raw type: Item + List selectedItems = (List) objects[1]; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:634: warning: [rawtypes] found raw type: Item + List selectedItems = (List) objects[1]; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:644: warning: [rawtypes] found raw type: Item + List selectedItems = (List) objects[1]; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:644: warning: [rawtypes] found raw type: Item + List selectedItems = (List) objects[1]; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:651: warning: [rawtypes] found raw type: Item + List selectedItems = (List) objects[1]; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:651: warning: [rawtypes] found raw type: Item + List selectedItems = (List) objects[1]; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/control/AdecWattManager.java:657: warning: [rawtypes] found raw type: Item + jAdecWatt.getJWorkspace ((Workspace) objects[0]).setSelectedItems ((List) objects[1]); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:68: warning: [rawtypes] found raw type: Item + ArrayList items = new ArrayList (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:68: warning: [rawtypes] found raw type: Item + ArrayList items = new ArrayList (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:73: warning: [rawtypes] found raw type: Item + for (Item item : items) + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:85: warning: [rawtypes] found raw type: Item + public void updateSelection (List items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:90: warning: [rawtypes] found raw type: Item + public Story.Command getDoSelection (Item item) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:93: warning: [rawtypes] found raw type: Item + public Story.Command getDoSelection (List items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:99: warning: [rawtypes] found raw type: Item + public Story.Command getUndoSelection (Item item) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:102: warning: [rawtypes] found raw type: Item + public Story.Command getUndoSelection (List items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:122: warning: [rawtypes] found raw type: Item + public void storyAddItem (Item item, Point2D.Double pos) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:125: warning: [rawtypes] found raw type: Item + commands.add (getUndoSelection ((List) null)); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:130: warning: [rawtypes] found raw type: Item + public void storyCloneItem (Item ref, Point2D.Double pos) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:133: warning: [rawtypes] found raw type: Item + Item item = ref.clone (this); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:141: warning: [rawtypes] found raw type: Item + public void storyPasteItem (Vector sItem) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:144: warning: [rawtypes] found raw type: Item + Vector preSelection = new Vector (sItem.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:144: warning: [rawtypes] found raw type: Item + Vector preSelection = new Vector (sItem.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:145: warning: [rawtypes] found raw type: Item + for (Item ref : sItem) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:154: warning: [rawtypes] found raw type: Item + Vector postSelection = new Vector (preSelection.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:154: warning: [rawtypes] found raw type: Item + Vector postSelection = new Vector (preSelection.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:156: warning: [rawtypes] found raw type: Item + for (Item ref : preSelection) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:157: warning: [rawtypes] found raw type: Item + Item item = ref.clone (this); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:168: warning: [rawtypes] found raw type: Item + public Item storyGetCloseItem (Story.Commands commands, Item item) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:168: warning: [rawtypes] found raw type: Item + public Item storyGetCloseItem (Story.Commands commands, Item item) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:169: warning: [rawtypes] found raw type: Item + Item closeItem = getLocalEmbedded (item.getId ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:176: warning: [rawtypes] found raw type: Item + public void storyHideShowItem (List sItem, boolean hidden) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:180: warning: [rawtypes] found raw type: Item + Vector toHideShow = new Vector (sItem.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:180: warning: [rawtypes] found raw type: Item + Vector toHideShow = new Vector (sItem.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:181: warning: [rawtypes] found raw type: Item + for (Item ref : sItem) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:189: warning: [rawtypes] found raw type: Item + for (Item item : toHideShow) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:196: warning: [rawtypes] found raw type: Item + commands.add (getDoSelection ((List) null)); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:199: warning: [rawtypes] found raw type: Item + public void storyRemoveItems (List sItem) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:202: warning: [rawtypes] found raw type: Item + Vector toRemove = new Vector (sItem.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:202: warning: [rawtypes] found raw type: Item + Vector toRemove = new Vector (sItem.size ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:203: warning: [rawtypes] found raw type: Item + for (Item ref : sItem) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:204: warning: [rawtypes] found raw type: Item + Item localItem = getLocalEmbedded (ref.getId ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:213: warning: [rawtypes] found raw type: Item + for (Item item : toRemove) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:221: warning: [rawtypes] found raw type: Item + commands.add (getDoSelection ((List) null)); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:224: warning: [rawtypes] found raw type: Item + public Acc storyGetCloseAcc (Story.Commands commands, Item item, Accessory accessory) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:225: warning: [unchecked] unchecked call to findEmbeddedRootOf(Unit) as a member of the raw type Editable + Acc acc = (Acc) item.findEmbeddedRootOf (accessory); + ^ + where E is a type-variable: + E extends Embedded declared in class Editable +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:231: warning: [unchecked] unchecked call to getCloseEmbedded(E) as a member of the raw type Editable + closeAcc = (Acc) item.getCloseEmbedded (acc); + ^ + where E is a type-variable: + E extends Embedded declared in class Editable +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:235: warning: [rawtypes] found raw type: Item + public void storyAddAcc (Item item, Accessory accessory) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:237: warning: [rawtypes] found raw type: Item + Item localItem = storyGetCloseItem (commands, item); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:257: warning: [rawtypes] found raw type: Item + Item localItem = getLocalEmbedded (acc.getContainer ().getId ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:264: warning: [unchecked] unchecked call to removeEmbedded(E) as a member of the raw type Editable + public void exec () { localItem.removeEmbedded (oldAcc); } + ^ + where E is a type-variable: + E extends Embedded declared in class Editable +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:265: warning: [unchecked] unchecked call to addEmbedded(E) as a member of the raw type Editable + public void undo () { localItem.addEmbedded (oldAcc); } + ^ + where E is a type-variable: + E extends Embedded declared in class Editable +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:305: warning: [rawtypes] found raw type: Item + public void storyRotItem (Vector sItem, Vector thetas) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:310: warning: [rawtypes] found raw type: Item + Item item = sItem.get (i); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:315: warning: [rawtypes] found raw type: Item + Item localItem = storyGetCloseItem (commands, item); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:321: warning: [static] static method should be qualified by type name, Item, instead of by an expression + localItem.changePos (item.getPosInside (size, pos, item.getThetaDegree (), item.getSize ())); + ^ +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:338: warning: [rawtypes] found raw type: Item + public void storyMoveItem (Vector sItem, Vector poss) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:343: warning: [rawtypes] found raw type: Item + Item item = sItem.get (i); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:344: warning: [static] static method should be qualified by type name, Item, instead of by an expression + Point2D.Double insidePos = item.getPosInside (size, poss.get (i), item.getThetaDegree (), item.getSize ()); + ^ +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:350: warning: [rawtypes] found raw type: Item + Item localItem = storyGetCloseItem (commands, item); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:359: warning: [rawtypes] found raw type: Item + public void storyRotResize (Item sItem, Point2D.Double sPos, double sThetaDegree, DimensionDouble sSize) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:361: warning: [rawtypes] found raw type: Item + Item localItem = storyGetCloseItem (commands, sItem); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:366: warning: [static] static method should be qualified by type name, Item, instead of by an expression + Point2D.Double insidePos = localItem.getPosInside (size, sPos, sThetaDegree, sSize); + ^ +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:376: warning: [rawtypes] found raw type: Item + public void storySpaceItem (Vector items, boolean isHorizontal, Double spaceRequest) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:392: warning: [rawtypes] found raw type: Item + public void storyDistributeItem (Vector items, boolean isHorizontal, Double distribRequest) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:413: warning: [rawtypes] found raw type: Item + public void storyAlignItem (Vector items, Alignment alignment) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:427: warning: [rawtypes] found raw type: Item + for (Item item : items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:429: warning: [static] static method should be qualified by type name, Item, instead of by an expression + DimensionDouble size = item.getRotSize (item.getThetaDegree (), item.getSize ()); + ^ +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:459: warning: [rawtypes] found raw type: Item + for (Item item : items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:461: warning: [static] static method should be qualified by type name, Item, instead of by an expression + DimensionDouble size = item.getRotSize (item.getThetaDegree (), item.getSize ()); + ^ +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:485: warning: [rawtypes] found raw type: Item + public double[][] getAxesValues (Vector items, boolean isHorizontal) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:489: warning: [rawtypes] found raw type: Item + for (Item item : items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:491: warning: [static] static method should be qualified by type name, Item, instead of by an expression + DimensionDouble size = item.getRotSize (item.getThetaDegree (), item.getSize ()); + ^ +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:503: warning: [rawtypes] found raw type: Item + public Vector getPos (Vector items, boolean isHorizontal, double[] poss) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:506: warning: [rawtypes] found raw type: Item + for (Item item : items) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:549: warning: [rawtypes] found raw type: Item + protected Hashtable namedItems = new Hashtable (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:549: warning: [rawtypes] found raw type: Item + protected Hashtable namedItems = new Hashtable (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:550: warning: [rawtypes] found raw type: Item + protected Vector allItems; + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:552: warning: [rawtypes] found raw type: Item + public Vector getAllItems () { return allItems; } + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:564: warning: [rawtypes] found raw type: Item + for (Item item : getInheritedEmbeddedValues ()) + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:570: warning: [rawtypes] found raw type: Item + for (Item item : buildingItems) + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:573: warning: [rawtypes] found raw type: Item + allItems = new Vector (namedItems.values ()); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:575: warning: [rawtypes] found raw type: Item + Vector itemsUsed = new Vector (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:575: warning: [rawtypes] found raw type: Item + Vector itemsUsed = new Vector (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:576: warning: [rawtypes] found raw type: Item + for (Item item : allItems) + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:577: warning: [unchecked] unchecked cast + for (String accId : (TreeSet) item.getEmbeddedIds ()) + ^ + required: TreeSet + found: TreeSet +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:583: warning: [rawtypes] found raw type: Item + for (Item item : allItems) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:650: warning: [rawtypes] found raw type: Item + public ArrayList findItems (Point2D.Double realPos, double close) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:651: warning: [rawtypes] found raw type: Item + ArrayList result = new ArrayList (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:651: warning: [rawtypes] found raw type: Item + ArrayList result = new ArrayList (); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/unit/Workspace.java:653: warning: [rawtypes] found raw type: Item + for (Item item : namedItems.values ()) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/Item.java:48: warning: [rawtypes] found raw type: Item + abstract public Item clone (Workspace workspace); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/Item.java:245: warning: [rawtypes] found raw type: Item + static public Comparator xPosComparator = new AxeItemComparator (0, 1, 2); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/Item.java:246: warning: [rawtypes] found raw type: Item + static public Comparator yPosComparator = new AxeItemComparator (1, 0, 2); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/Item.java:247: warning: [rawtypes] found raw type: Item + static public Comparator zPosComparator = new AxeItemComparator (2, 0, 1); + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/Item.java:249: warning: [rawtypes] found raw type: Item + static class AxeItemComparator implements Comparator { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +/home/felix/perso/adecWatt56/src/java/adecWatt/model/Item.java:256: warning: [rawtypes] found raw type: Item + public int compare (Item o1, Item o2) { + ^ + missing type arguments for generic class Item + where P,T,A are type-variables: + P extends XmlPermanent declared in class Item + T extends Enum declared in class Item + A extends Enum declared in class Item +Note: Some input files additionally use unchecked or unsafe operations. +100 warnings +Creating empty /home/felix/perso/adecWatt56/build/class/adecWatt/model/package-info.class +Creating empty /home/felix/perso/adecWatt56/build/class/adecWatt/view/jProp/package-info.class +Creating empty /home/felix/perso/adecWatt56/build/class/adecWatt/view/package-info.class +Creating empty /home/felix/perso/adecWatt56/build/class/adecWatt/model/xml/package-info.class + +run: + +BUILD SUCCESSFUL +Total time: 75 minutes 48 seconds + +Compilation finished at Sun Feb 4 20:16:08 diff --git a/src/java/adecWatt/model/package-info.java b/src/java/adecWatt/model/package-info.java new file mode 100644 index 0000000..fad6358 --- /dev/null +++ b/src/java/adecWatt/model/package-info.java @@ -0,0 +1,27 @@ +/** + * Architecture des classes + * + * AdecWatt = appli + * PermanentDB + * UnitNode + * + * Permanent + * Prop (property) + * Editable : prop[] (Container) + * Embedded + * Item (contient des accessoires) + * Segm : information avec 2 extrémintés + * Comp : NonWorkspace (container d'Acc) + * Acc : Comp + * Unit + * NonWorkspace (container d'Acc) + * Accessory + * Furniture + * Line + * Information + * Workspace : comp[] (container de comp) + * Building + * Lightplot : Building + * + */ +package adecWatt.model; diff --git a/src/java/adecWatt/model/unit/Accessory.java b/src/java/adecWatt/model/unit/Accessory.java new file mode 100644 index 0000000..7fafae3 --- /dev/null +++ b/src/java/adecWatt/model/unit/Accessory.java @@ -0,0 +1,10 @@ +package adecWatt.model.unit; + +import adecWatt.model.AdecWatt; + +public class Accessory extends NonWorkspace { + + public Accessory (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } +} diff --git a/src/java/adecWatt/model/unit/Building.java b/src/java/adecWatt/model/unit/Building.java new file mode 100644 index 0000000..5219607 --- /dev/null +++ b/src/java/adecWatt/model/unit/Building.java @@ -0,0 +1,28 @@ +package adecWatt.model.unit; + +import java.util.Enumeration; + +import adecWatt.model.AdecWatt; +import adecWatt.model.UnitNode; + +public class Building extends Workspace { + + // ======================================== + static public final String[] workspacesRoot = { "lightplot" }; + + public Building (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } + + // ======================================== + public void updateView () { + super.updateView (); + for (String workspaceRoot : workspacesRoot) + for (Enumeration enumUnitNode = adecWatt.getPermanentDB ().getRootByName (workspaceRoot).getUnitNode ().breadthFirstEnumeration (); + enumUnitNode.hasMoreElements (); + ) + adecWatt.broadcastDisplay (AdecWatt.BroadcastUpdateWorkspace, (Lightplot) ((UnitNode) enumUnitNode.nextElement ()).getUnit ()); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/unit/Furniture.java b/src/java/adecWatt/model/unit/Furniture.java new file mode 100644 index 0000000..ea0e6fa --- /dev/null +++ b/src/java/adecWatt/model/unit/Furniture.java @@ -0,0 +1,10 @@ +package adecWatt.model.unit; + +import adecWatt.model.AdecWatt; + +public class Furniture extends NonWorkspace { + + public Furniture (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } +} diff --git a/src/java/adecWatt/model/unit/Information.java b/src/java/adecWatt/model/unit/Information.java new file mode 100644 index 0000000..418dcd3 --- /dev/null +++ b/src/java/adecWatt/model/unit/Information.java @@ -0,0 +1,10 @@ +package adecWatt.model.unit; + +import adecWatt.model.AdecWatt; + +public class Information extends NonWorkspace { + + public Information (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } +} diff --git a/src/java/adecWatt/model/unit/Lightplot.java b/src/java/adecWatt/model/unit/Lightplot.java new file mode 100644 index 0000000..830fbf7 --- /dev/null +++ b/src/java/adecWatt/model/unit/Lightplot.java @@ -0,0 +1,75 @@ +package adecWatt.model.unit; + +import java.awt.geom.Point2D; +import java.util.Collection; +import java.util.Hashtable; + +import misc.DimensionDouble; +import misc.ScaledImage; + +import adecWatt.model.AdecWatt; +import adecWatt.model.Item; +import adecWatt.model.Prop; + +@SuppressWarnings ("serial") +public class Lightplot extends Workspace { + + // ======================================== + public Building getPattern () { return getBuilding (); } + public DimensionDouble getRealSize () { return getBuilding ().getSize (); } + public ScaledImage getBlueprint () { return getBuilding ().getBlueprint (); } + public DimensionDouble getBlueprintSize () { return getBuilding ().getBlueprintSize (); } + public Point2D.Double getBlueprintPos () { return getBuilding ().getBlueprintPos (); } + public Double getBlueprintVisibility () { return getBuilding ().getBlueprintVisibility (); } + + public Lightplot (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } + + // ======================================== + public void storyChangeBuilding (final Building building) { + final Building oldBuilding = getBuilding (); + if (oldBuilding == building) + return; + final Hashtable oldPos = getOutsideItem (building); + final Hashtable newPos = getMoveInsideItem (building, oldPos); + story.add (story.new Command (StoryChangeBuilding) { + public void exec () { moveItem (newPos); changeBuilding (building); } + public void undo () { changeBuilding (oldBuilding); moveItem (oldPos); } + public void display () { + stateNotifier.broadcastUpdate (BroadcastChangeBuilding); + stateNotifier.broadcastDisplay (BroadcastChangePos, oldPos.keySet ().toArray ()); + } + }); + } + + // ======================================== + private void changeBuilding (Building building) { + // XXX localProp ? + getProp (Prop.PropBuilding).setValue (building.getId ()); + } + private void moveItem (Hashtable items) { + for (Item item : items.keySet ()) + item.changePos (items.get (item)); + } + + // ======================================== + public Hashtable getOutsideItem (Building building) { + Hashtable result = new Hashtable (); + DimensionDouble size = building.getRealSize (); + for (Item item : getInheritedEmbeddedValues ()) + if (item.isPosOutside (size)) + result.put (item, item.getPos ()); + return result; + } + + public Hashtable getMoveInsideItem (Building building, Hashtable oldPos) { + Hashtable result = new Hashtable (); + DimensionDouble size = building.getRealSize (); + for (Item item : oldPos.keySet ()) + result.put (item, Item.getPosInside (size, oldPos.get (item), item.getThetaDegree (), item.getSize ())); + return result; + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/unit/Line.java b/src/java/adecWatt/model/unit/Line.java new file mode 100644 index 0000000..7304ad2 --- /dev/null +++ b/src/java/adecWatt/model/unit/Line.java @@ -0,0 +1,10 @@ +package adecWatt.model.unit; + +import adecWatt.model.AdecWatt; + +public class Line extends NonWorkspace { + + public Line (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } +} diff --git a/src/java/adecWatt/model/unit/NonWorkspace.java b/src/java/adecWatt/model/unit/NonWorkspace.java new file mode 100644 index 0000000..3d41503 --- /dev/null +++ b/src/java/adecWatt/model/unit/NonWorkspace.java @@ -0,0 +1,29 @@ +package adecWatt.model.unit; + +import java.util.Enumeration; + +import adecWatt.model.Acc; +import adecWatt.model.AdecWatt; +import adecWatt.model.Prop; +import adecWatt.model.Unit; +import adecWatt.model.UnitNode; + +public abstract class NonWorkspace extends Unit { + // ======================================== + static public final String[] workspacesRoot = { Prop.PropBuilding, "lightplot" }; + + public NonWorkspace (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } + + // ======================================== + public void updateView () { + for (String workspaceRoot : workspacesRoot) + for (Enumeration enumUnitNode = adecWatt.getPermanentDB ().getRootByName (workspaceRoot).getUnitNode ().breadthFirstEnumeration (); + enumUnitNode.hasMoreElements (); + ) + ((Workspace) ((UnitNode) enumUnitNode.nextElement ()).getUnit ()). + stateNotifier.broadcastDisplay (BroadcastUpdatePermItem, this); + } + // ======================================== +} diff --git a/src/java/adecWatt/model/unit/Workspace.java b/src/java/adecWatt/model/unit/Workspace.java new file mode 100644 index 0000000..099bb65 --- /dev/null +++ b/src/java/adecWatt/model/unit/Workspace.java @@ -0,0 +1,857 @@ +package adecWatt.model.unit; + +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Composite; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Paint; +import java.awt.Point; +import java.awt.RenderingHints; +import java.awt.Shape; +import java.awt.Stroke; +import java.awt.geom.AffineTransform; +import java.awt.geom.Dimension2D; +import java.awt.geom.Line2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.TreeSet; +import java.util.Vector; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; + +import misc.DimensionDouble; +import misc.ScaledImage; +import misc.Story; +import static misc.ScaledImage.ONE_TILE; + +import adecWatt.model.Acc; +import adecWatt.model.AdecWatt; +import adecWatt.model.Circuits; +import adecWatt.model.Comp; +import adecWatt.model.Editable; +import adecWatt.model.Item; +import adecWatt.model.Patch; +import adecWatt.model.Prop; +import adecWatt.model.Segm; +import adecWatt.model.Unit; +import adecWatt.model.xml.XmlComp; +import adecWatt.model.xml.XmlSegm; + +@SuppressWarnings ("serial") +public abstract class Workspace extends Unit> { + + private float buildingOpacity = .5F; + private float hiddenOpacity = .15F; + public void setOpacity (float buildingOpacity) { this.buildingOpacity = buildingOpacity; } // XXX update GUI + public float getOpacity () { return buildingOpacity; } + + public Workspace (AdecWatt adecWatt, String id) { + super (adecWatt, id); + } + + // ======================================== + @SuppressWarnings ("unchecked") + public void collectEmbedded () { + if (xmlPermanent == null) + return; + super.collectEmbedded (); + ArrayList items = new ArrayList (); + for (XmlSegm xmlSegm : xmlPermanent.getSegms ()) + items.add (new Segm (this, xmlSegm)); + for (XmlComp xmlComp : xmlPermanent.getComps ()) + items.add (new Comp (this, xmlComp)); + for (Item item : items) + item.fixName (true); + } + + // ======================================== + public void updateView () { + adecWatt.broadcastDisplay (AdecWatt.BroadcastUpdateWorkspace, this); + updateTree (); + } + public void updateConnection () { + adecWatt.broadcastDisplay (BroadcastConnection, this); + } + public void updateSelection (List items) { + adecWatt.broadcastDisplay (BroadcastSetSelectionItems, this, items); + } + + // ======================================== + public Story.Command getDoSelection (Item item) { + return getDoSelection (Arrays.asList (item)); + } + public Story.Command getDoSelection (final List items) { + return story.new Command (StorySelectItem) { + public void exec () { updateSelection (items); } + public void undo () { } + }; + } + public Story.Command getUndoSelection (Item item) { + return getUndoSelection (Arrays.asList (item)); + } + public Story.Command getUndoSelection (final List items) { + return story.new Command (StorySelectItem) { + public void exec () { } + public void undo () { updateSelection (items); } + }; + } + + // ======================================== + public void storyAddComp (NonWorkspace model, Point2D.Double pos) { + Comp comp = new Comp (this, model); + if (comp.isSticky ()) + return; + storyAddItem (comp, pos); + } + public void storyAddSegm (NonWorkspace model, Point2D.Double pos) { + Segm segm = new Segm (this, model); + if (segm.isSticky ()) + return; + storyAddItem (segm, pos); + } + public void storyAddItem (Item item, Point2D.Double pos) { + item.changePos (pos); + Story.Commands commands = story.new Commands (StoryAddItem) {}; + commands.add (getUndoSelection ((List) null)); + item.validateContainer (commands, StoryAddItem); + commands.add (getDoSelection (item)); + story.add (commands); + } + public void storyCloneItem (Item ref, Point2D.Double pos) { + if (ref.isSticky ()) + return; + Item item = ref.clone (this); + item.changePos (pos); + Story.Commands commands = story.new Commands (StoryCloneItem) {}; + commands.add (getUndoSelection (ref)); + item.validateContainer (commands, StoryCloneItem); + commands.add (getDoSelection (item)); + story.add (commands); + } + public void storyPasteItem (Vector sItem) { + if (sItem == null) + return; + Vector preSelection = new Vector (sItem.size ()); + for (Item ref : sItem) { + if (ref.isSticky ()) + continue; + preSelection.add (ref); + } + if (preSelection.size () < 1) + return; + DimensionDouble size = getRealSize (); + Story.Commands commands = story.new Commands (StoryPasteItem) {}; + Vector postSelection = new Vector (preSelection.size ()); + commands.add (getUndoSelection (preSelection)); + for (Item ref : preSelection) { + Item item = ref.clone (this); + Point2D.Double pos = item.getPos (); + // XXX si objet à la même place + //pos.x += .5; pos.y += .5; + item.changePos (Item.getPosInside (size, pos, item.getThetaDegree (), item.getSize ())); + postSelection.add (item); + item.validateContainer (commands, StoryPasteItem); + } + commands.add (getDoSelection (postSelection)); + story.add (commands); + } + public Item storyGetCloseItem (Story.Commands commands, Item item) { + Item closeItem = getLocalEmbedded (item.getId ()); + if (closeItem != null) + return closeItem; + closeItem = getCloseEmbedded (item); + closeItem.validateContainer (commands, StoryLinkItem); + return closeItem; + } + public void storyHideShowItem (List sItem, final boolean hidden) { + if (sItem == null) + return; + Story.Commands commands = story.new Commands (StoryHideItem) {}; + Vector toHideShow = new Vector (sItem.size ()); + for (Item ref : sItem) { + if (ref.isHidden () == hidden) + continue; + toHideShow.add (storyGetCloseItem (commands, ref)); + } + if (toHideShow.size () < 1) + return; + commands.add (getUndoSelection (toHideShow)); + for (final Item item : toHideShow) { + commands.add (story.new Command (StoryHideItem) { + public void exec () { if (hidden) item.addModifier (Hidden); else item.removeModifier (Hidden); } + public void undo () { if (hidden) item.removeModifier (Hidden); else item.addModifier (Hidden); } + public void display () { item.updateView (); } // XXX utile ? + }); + } + commands.add (getDoSelection ((List) null)); + story.add (commands); + } + public void storyRemoveItems (List sItem) { + if (sItem == null) + return; + Vector toRemove = new Vector (sItem.size ()); + for (Item ref : sItem) { + Item localItem = getLocalEmbedded (ref.getId ()); + if (localItem == null || localItem.isSticky ()) + continue; + toRemove.add (localItem); + } + if (toRemove.size () < 1) + return; + Story.Commands commands = story.new Commands (StoryRemoveItem) {}; + commands.add (getUndoSelection (toRemove)); + for (final Item item : toRemove) { + commands.add (story.new Command (StoryRemoveItem) { + public void exec () { removeEmbedded (item); } + public void undo () { addEmbedded (item); } + public void displayExec () { item.updateView (BroadcastRemoveItem); } + public void displayUndo () { item.updateView (BroadcastNewItem); } + }); + } + commands.add (getDoSelection ((List) null)); + story.add (commands); + } + public Acc storyGetCloseAcc (Story.Commands commands, Item item, Accessory accessory) { + Acc acc = (Acc) item.findEmbeddedRootOf (accessory); + if (acc == null) + return null; + Acc closeAcc = (Acc) item.getLocalEmbedded (acc.getId ()); + if (closeAcc != null) + return closeAcc; + closeAcc = (Acc) item.getCloseEmbedded (acc); + closeAcc.validateContainer (commands, StoryLinkAcc); + return closeAcc; + } + public void storyAddAcc (Item item, final Accessory accessory) { + Story.Commands commands = story.new Commands (StoryAddAcc) {}; + final Item localItem = storyGetCloseItem (commands, item); + final Acc localAcc = storyGetCloseAcc (commands, localItem, accessory); + if (localAcc == null) + return; + final NonWorkspace oldAccessoryModel = localAcc.getModel (); + if (accessory != oldAccessoryModel) + commands.add (story.new Command (StoryAddAcc) { + public void exec () { + localAcc.setModel (accessory); + } + public void undo () { + localAcc.setModel (oldAccessoryModel); + } + public void display () { + localItem.updateView (); + } + }); + story.add (commands); + } + public void storyRemoveAcc (Acc acc) { + final Item localItem = getLocalEmbedded (acc.getContainer ().getId ()); + if (localItem == null) + return; + final Acc oldAcc = (Acc) localItem.getLocalEmbedded (acc.getId ()); + if (oldAcc == null) + return; + story.add (story.new Command (StoryRemoveAcc) { + public void exec () { localItem.removeEmbedded (oldAcc); } + public void undo () { localItem.addEmbedded (oldAcc); } + public void display () { localItem.updateView (); } + }); + } + public void storyConnect (Comp srcComp, Acc srcAcc, final String dstCompName, final String dstAccName) { + Comp localComp = (Comp) getCloseEmbedded (srcComp); + final Acc localAcc = localComp.getCloseEmbedded (srcAcc); + Story.Commands commands = story.new Commands (StoryConnectAcc) {}; + localAcc.validateContainer (commands, StoryLinkAcc); + + final String oldConnectedTo = localAcc.getConnectedTo (); + final Prop oldConnectedToProp = localAcc.getPropVal (Prop.PropConnectedTo); + final String oldConnectedOn = localAcc.getConnectedOn (); + final Prop oldConnectedOnProp = localAcc.getPropVal (Prop.PropConnectedOn); + // XXX if (dstCompName == null) => remove + // XXX if (dstAccName == null) => remove + + commands.add (story.new Command (StoryConnectAcc) { + public void exec () { + localAcc.changeConnectedTo (dstCompName); + localAcc.changeConnectedOn (dstAccName); + } + public void undo () { + if (oldConnectedToProp == null) + localAcc.removeOwnProp (Prop.PropConnectedTo); + else + localAcc.changeConnectedTo (oldConnectedTo); + if (oldConnectedOnProp == null) + localAcc.removeOwnProp (Prop.PropConnectedOn); + else + localAcc.changeConnectedOn (oldConnectedOn); + } + public void display () { + localAcc.updateView (); + updateConnection (); + } + }); + story.add (commands); + } + + public void storyRotItem (Vector sItem, Vector thetas) { + Story.Commands commands = story.new Commands (StoryRotItem) {}; + final DimensionDouble size = getRealSize (); + int nbSelected = sItem.size (); + for (int i = 0; i < nbSelected; i++) { + final Item item = sItem.get (i); + final double thetaDegree = thetas.get (i); + final double oldThetaDegree = item.getThetaDegree (); + if (thetaDegree == oldThetaDegree) + continue; + final Item localItem = storyGetCloseItem (commands, item); + final Prop oldProp = item.getOwnProp (Prop.PropRot); + final Point2D.Double pos = item.getPos (); + commands.add (story.new Command (StoryRotItem) { + public void exec () { + localItem.changeThetaDegree (thetaDegree); + localItem.changePos (Item.getPosInside (size, pos, item.getThetaDegree (), item.getSize ())); + } + public void undo () { + if (oldProp == null) + localItem.removeOwnProp (Prop.PropRot); + else + localItem.changeThetaDegree (oldThetaDegree); + localItem.changePos (pos); + } + public void display () { + localItem.updateView (BroadcastChangePos); + localItem.updateView (BroadcastChangeRot); + } + }); + } + story.add (commands); + } + + public void storyMoveItem (Vector sItem, Vector poss) { + Story.Commands commands = story.new Commands (StoryMoveItem) {}; + DimensionDouble size = getRealSize (); + int nbSelected = sItem.size (); + for (int i = 0; i < nbSelected; i++) { + Item item = sItem.get (i); + final Point2D.Double insidePos = Item.getPosInside (size, poss.get (i), item.getThetaDegree (), item.getSize ()); + final Point2D.Double old = item.getPos (); + if (insidePos.equals (old)) { + item.updateView (BroadcastChangePos); + continue; + } + final Item localItem = storyGetCloseItem (commands, item); + commands.add (story.new Command (StoryMoveItem) { + public void exec () { localItem.changePos (insidePos); } + public void undo () { localItem.changePos (old); } + public void display () { localItem.updateView (BroadcastChangePos); } + }); + } + story.add (commands); + } + + public void storyRotResize (Item sItem, Point2D.Double sPos, final double sThetaDegree, final DimensionDouble sSize) { + Story.Commands commands = story.new Commands (StoryRotResizeItem) {}; + final Item localItem = storyGetCloseItem (commands, sItem); + DimensionDouble size = getRealSize (); + final Point2D.Double oldPos = localItem.getPos (); + final DimensionDouble oldSize = localItem.getSize (); + final double oldThetaDegree = localItem.getThetaDegree (); + final Point2D.Double insidePos = Item.getPosInside (size, sPos, sThetaDegree, sSize); + commands.add (story.new Command (StoryRotResizeItem) { + public void exec () { localItem.changeRotSize (insidePos, sThetaDegree, sSize); } + public void undo () { localItem.changeRotSize (oldPos, oldThetaDegree, oldSize); } + public void display () { localItem.updateView (BroadcastChangeRotSize); } + }); + story.add (commands); + } + + // ======================================== + public Line2D.Double getMagnetPoint (Point2D.Double pos, Point2D.Double onGrid, double close) { + double minD = close; + Point2D.Double minPos = new Point2D.Double (); + if (adecWatt.getHandleGlue ()) { + Point2D.Double closeHandle = (Point2D.Double) pos.clone (); + for (double[] bounds : allBounds) + minD = Item.getCloseBound (bounds, pos, minD, closeHandle); + if (minD < close) { + pos.x = closeHandle.x; + pos.y = closeHandle.y; + return new Line2D.Double (pos, pos); + } + } + if (adecWatt.getGridGlue ()) + if (onGrid.distance (pos) < close) { + pos.x = onGrid.x; + pos.y = onGrid.y; + } + if (adecWatt.getBoundGlue ()) { + boolean inSegment = adecWatt.getInSegmentGlue (); + double minL = close; + // XXX si croissement + //Vector lines = new Vector (); + Line2D.Double minLine = null; + for (double[] bounds : allBounds) { + // XXX nombres magiques + double oldX = bounds [6], oldY = bounds [7]; + for (int x = 0, y = 1; x < 8; x+=2, y+=2) { + Line2D.Double line = new Line2D.Double (oldX, oldY, oldX = bounds[x], oldY = bounds[y]); + // XXX si line=point null ? + double d = inSegment ? line.ptSegDist (pos) : line.ptLineDist (pos); + if (d < minL) { + //lines.add (line); + minLine = line; + minL = d; + } + } + } + // XXX et rester sur la grille ? + // if (lines.size () > 0) { + // for (Line2D.Double line : lines) { + if (minLine != null) { + double xDelta = minLine.x2 - minLine.x1; + double yDelta = minLine.y2 - minLine.y1; + if ((xDelta == 0) && (yDelta == 0)) + // XXX vérif ci-dessus si line=point + return null; + double u = ((pos.x - minLine.x1) * xDelta + (pos.y - minLine.y1) * yDelta) / (xDelta * xDelta + yDelta * yDelta); + if (inSegment) + u = Math.min (1, Math.max (0, u)); + Point2D.Double result = new Point2D.Double (minLine.x1 + u*xDelta, minLine.y1 + u*yDelta); + pos.x = result.x; + pos.y = result.y; + return minLine; + } + } + return null; + } + + public void storySpaceItem (Vector items, boolean isHorizontal, Double spaceRequest) { + if (items == null || items.size () < 2) + return; + items.sort (isHorizontal ? Item.xPosComparator : Item.yPosComparator); + double[][] axesValues = getAxesValues (items, isHorizontal); + double minSpace = getMinSpace (axesValues[1]); + int nbItems = items.size (); + double space = spaceRequest != null ? + spaceRequest : + (axesValues[0][nbItems-1]-axesValues[0][0] - minSpace)/(nbItems-1); + if (space < 0) + space = 0; + for (int i = 1; i < nbItems; i++) + axesValues[0][i] = space+axesValues[0][i-1]+(axesValues[1][i-1]+axesValues[1][i])/2; + storyMoveItem (items, getPos (items, isHorizontal, axesValues[0])); + } + public void storyDistributeItem (Vector items, boolean isHorizontal, Double distribRequest) { + if (items == null || items.size () < 2) + return; + items.sort (isHorizontal ? Item.xPosComparator : Item.yPosComparator); + double[][] axesValues = getAxesValues (items, isHorizontal); + int nbItems = items.size (); + double distrib = distribRequest != null ? + distribRequest : + (axesValues[0][nbItems-1]-axesValues[0][0])/(nbItems-1); + double minDistrib = getMinDistribution (axesValues[1]); + if (distrib < minDistrib) + distrib = minDistrib; + for (int i = 1; i < nbItems; i++) + axesValues[0][i] = axesValues[0][i-1]+distrib; + storyMoveItem (items, getPos (items, isHorizontal, axesValues[0])); + } + + static public enum Alignment { + LEFT, CENTER, RIGHT, TOP, MIDDLE, BOTTOM; + } + + public void storyAlignItem (Vector items, Alignment alignment) { + if (items == null || items.size () < 2) + return; + int nbItems = items.size (); + Vector poss = new Vector (nbItems); + double x = 0, y = 0; + switch (alignment) { + case LEFT: + x = items.get (0).getPos ().x; + break; + case TOP: + y = items.get (0).getPos ().y; + break; + } + for (Item item : items) { + Point2D.Double pos = item.getPos (); + DimensionDouble size = Item.getRotSize (item.getSize (), item.getThetaDegree ()); + switch (alignment) { + case LEFT: + x = Math.min (x, pos.x-size.width/2); + break; + case CENTER: + x += pos.x; + break; + case RIGHT: + x = Math.max (x, pos.x+size.width/2); + break; + case TOP: + y = Math.min (y, pos.y-size.height/2); + break; + case MIDDLE: + y += pos.y; + break; + case BOTTOM: + y = Math.max (y, pos.y+size.height/2); + break; + } + } + switch (alignment) { + case CENTER: + x /= nbItems; + break; + case MIDDLE: + y /= nbItems; + break; + } + for (Item item : items) { + Point2D.Double pos = item.getPos (); + DimensionDouble size = Item.getRotSize (item.getSize (), item.getThetaDegree ()); + switch (alignment) { + case LEFT: + poss.add (new Point2D.Double (x+size.width/2, pos.y)); + break; + case CENTER: + poss.add (new Point2D.Double (x, pos.y)); + break; + case RIGHT: + poss.add (new Point2D.Double (x-size.width/2, pos.y)); + break; + case TOP: + poss.add (new Point2D.Double (pos.x, y+size.height/2)); + break; + case MIDDLE: + poss.add (new Point2D.Double (pos.x, y)); + break; + case BOTTOM: + poss.add (new Point2D.Double (pos.x, y-size.height/2)); + break; + } + } + storyMoveItem (items, poss); + } + public double[][] getAxesValues (Vector items, boolean isHorizontal) { + int nbItems = items.size (); + double[][] result = new double [2][nbItems]; + int i = 0; + for (Item item : items) { + Point2D.Double pos = item.getPos (); + DimensionDouble size = Item.getRotSize (item.getSize (), item.getThetaDegree ()); + if (isHorizontal) { + result[0][i] = pos.x; + result[1][i] = size.width; + } else { + result[0][i] = pos.y; + result[1][i] = size.height; + } + i++; + } + return result; + } + public Vector getPos (Vector items, boolean isHorizontal, double[] poss) { + Vector result = new Vector (); + int i = 0; + for (Item item : items) { + Point2D.Double pos = item.getPos (); + result.add (isHorizontal ? + new Point2D.Double (poss[i], pos.y) : + new Point2D.Double (pos.x, poss[i])); + i++; + } + return result; + } + + public double getMinDistribution (double [] widths) { + double result = 0; + for (int i = 1; i < widths.length; i++) + result = Math.max (result, widths[i-1]+widths[i]); + return result/2; + } + public double getMinSpace (double [] widths) { + double result = 0; + for (int i = 0; i < widths.length; i++) + result += widths[i]; + result -= (widths[0]+widths[widths.length-1])/2; + return result; + } + + // ======================================== + public Element getXml (Node parent, Document document) { + Element child = super.getXml (parent, document); + return child; + } + + // ======================================== + public Patch getPatch () { + try { + Circuits circuits = Circuits.getCircuits (this, getAdecWatt ().getPermanentDB ().getPowerPlugId ()); + return new Patch (circuits); + } catch (Exception e) { + return null; + } + } + + // public boolean match (String text) { + // try { + // if (super.match (text)) + // return true; + // for (Item item : getAllItems ()) + // if (item.match (text)) + // // if (item.getName ().toLowerCase ().indexOf (text) >= 0 || + // // item.getLocalName ().toLowerCase ().indexOf (text) >= 0 || + // // item.getId ().indexOf (text) >= 0) + // return true; + // } catch (Exception e) { + // } + // return false; + // } + + // ======================================== + // XXX cache revoir acces + protected HashSet plugedComps = new HashSet (); + protected Hashtable namedItems = new Hashtable (); + protected Vector allItems; + protected Vector allBounds; + + public Vector getAllItems () { return allItems; } + public void addPlugedComps (Comp comp) { plugedComps.add (comp); } + public boolean containsItem (String itemId) { return namedItems.containsKey (itemId) || embedded.containsKey (itemId); } + + public void print (Graphics2D printGraphics, double lineWidth, Collection itemsNotToPrint, boolean printCircuit) { + Composite defaultComposit = printGraphics.getComposite (); + Composite buildingComposit = ((AlphaComposite) defaultComposit).derive (buildingOpacity); + Composite hiddenBuildingComposit = ((AlphaComposite) defaultComposit).derive (buildingOpacity*hiddenOpacity); + Composite hiddenComposit = ((AlphaComposite) defaultComposit).derive (hiddenOpacity); + printBlueprint (printGraphics); + namedItems.clear (); + plugedComps.clear (); + for (Item item : getInheritedEmbeddedValues ()) + namedItems.put (item.getId (), item); + Building building = getBuilding (); + Collection> buildingItems = null; + if (building != null) { + buildingItems = building.getInheritedEmbeddedValues (); + for (Item item : buildingItems) + namedItems.putIfAbsent (item.getId (), item); + } + allItems = new Vector (namedItems.values ()); + allItems.sort (Item.zPosComparator); + Vector itemsUsed = new Vector (); + for (Item item : allItems) + for (String accId : (TreeSet) item.getEmbeddedIds ()) + try { + itemsUsed.add (namedItems.get (item.findEmbedded (accId).getConnectedTo ())); + } catch (Exception e) { + } + String plugId = adecWatt.getPermanentDB ().getPowerPlugId (); + allBounds = new Vector (namedItems.size ()); + for (Item item : allItems) { + if (item.isReserved () || (itemsNotToPrint != null && itemsNotToPrint.contains (item.getId ()))) + continue; + boolean isBuilding = buildingItems != null && buildingItems.contains (item); + boolean isHidden = item.isHidden (); + if (!itemsUsed.contains (item)) { + if (isHidden) + printGraphics.setComposite (isBuilding ? hiddenBuildingComposit : hiddenComposit); + else if (isBuilding) + printGraphics.setComposite (buildingComposit); + } + try { + allBounds.add (item.getBounds ()); + item.print (printGraphics, this, plugId); + } catch (Exception e) { + System.err.println ("Can't print <"+item.getId ()+"> ("+item.getModel ()+")"); + // XXX supprimé dans l'héritage + continue; + } + if (isBuilding||isHidden) + printGraphics.setComposite (defaultComposit); + } + if (!printCircuit) + return; + HashMap linked = new HashMap (); + for (Comp beginComp : plugedComps) + for (Acc beginAcc : beginComp.allPlugs) + try { + Comp endComp = (Comp) namedItems.get (beginAcc.getConnectedTo ()); + if (endComp == null) + continue; + linked.put (beginAcc, endComp); + Acc.printConnection (printGraphics, lineWidth, + beginComp.getAccCenter (beginAcc.getId ()), + endComp.getAccCenter (beginAcc.getConnectedOn ())); + } catch (Exception e) { + //e.printStackTrace (); + } + Circuits circuits = new Circuits (linked, plugedComps); + for (Comp plugedComp : plugedComps) + for (Acc acc : plugedComp.allPlugs) { + Circuits.CircuitState circuitState = circuits.getState (plugedComp, acc); + if (circuitState == null) + continue; + Acc.printCircuit (printGraphics, lineWidth, plugedComp.getAccCenter (acc.getId ()), circuitState); + } + } + + public void printBlueprint (Graphics2D printGraphics) { + ScaledImage scaledBlueprint = getBlueprint (); + if (scaledBlueprint == null) + return; + Double visible = getBlueprintVisibility (); + if (visible != null && visible <= 0) + return; + DimensionDouble blueprintSize = getBlueprintSize (); + if (blueprintSize == null) + blueprintSize = getRealSize (); + Point2D.Double blueprintPos = null; + try { + blueprintPos = getBlueprintPos (); + } catch (Exception e) { + } + if (blueprintPos == null) + blueprintPos = new Point2D.Double (); + printImage (printGraphics, scaledBlueprint, blueprintPos, blueprintSize, 0., null); + } + + public ArrayList findItems (Point2D.Double realPos, double close) { + ArrayList result = new ArrayList (); + double [] coord = new double [] {realPos.x, realPos.y}; + for (Item item : namedItems.values ()) { + coord[0] = realPos.x; + coord[1] = realPos.y; + if (item.containsClose (coord, close)) + result.add (item); + } + return result; + } + + // ======================================== + static public void printImage (Graphics2D printGraphics, ScaledImage scaledImage, + Point2D realPos, DimensionDouble realSize, double thetaDegree, Double[] tileSize) { + Point2D pos = new Point2D.Double (realPos.getX (), realPos.getY ()); + DimensionDouble size = new DimensionDouble (realSize.getWidth (), realSize.getHeight ()); + double theta = Math.toRadians (thetaDegree); + Dimension tile = Item.getTile (tileSize, realSize); + ScaledImage.ImageInfo imageInfo = scaledImage.newInfo2 (size, theta); + BufferedImage reference = scaledImage.reference; + if (pos != null) + printGraphics.translate (pos.getX ()+imageInfo.x, pos.getY ()+imageInfo.y); + if (ONE_TILE.equals (tile)) + printGraphics.drawImage (reference, imageInfo.at, null); + else { + double width = reference.getWidth (), height = reference.getHeight (); + double scaleX = 1./tile.width, scaleY = 1./tile.height; + double stepX = width/tile.width, stepY = height/tile.height; + for (int i = 0; i < tile.width; i++) + for (int j = 0; j < tile.height; j++) { + AffineTransform at = new AffineTransform (imageInfo.at); + at.translate (i*stepX, j*stepY); + at.scale (scaleX, scaleY); + printGraphics.drawImage (reference, at, null); + } + } + if (pos != null) + printGraphics.translate (-pos.getX ()-imageInfo.x, -pos.getY ()-imageInfo.y); + } + + static public void printText (Graphics2D printGraphics, String label, Color color, Point2D realPos, DimensionDouble realSize) { + double minSide = Math.min (realSize.width, realSize.height); + printText (printGraphics, label, color, realPos, new DimensionDouble (minSide, minSide), 0); + } + static public void printText (Graphics2D printGraphics, String label, Color color, Point2D realPos, DimensionDouble realSize, double thetaDegree) { + if (label == null || "".equals (label)) + return; + AffineTransform af = printGraphics.getTransform (); + + Font labelFont = getLabelFont (label, printGraphics.getFont (), realSize, printGraphics); + printGraphics.setFont (labelFont); + Rectangle2D bounds = labelFont.getStringBounds (label, printGraphics.getFontRenderContext ()); + // XXX bug Java + // FontMetrics fontMetrics = printGraphics.getFontMetrics (labelFont); + // int ascent = fontMetrics.getMaxAscent (); + // int descent = fontMetrics.getMaxDescent (); + // double bottom = descent*bounds.getHeight ()/(ascent+descent); + // System.err.println ("coucou font "+ascent+" "+descent+" =? "+bounds.getHeight ()+" "+bounds.getWidth ()); + double bottom = labelFont.getSize2D ()*0.201298701299; + Point2D.Double pos = new Point2D.Double (realPos.getX (), //-bounds.getWidth ()/2, + realPos.getY ()); //-bounds.getHeight ()/2); //+labelFont.getSize2D ()/2-bottom);bounds + printGraphics.translate (pos.getX (), pos.getY ()); + printGraphics.rotate (Math.toRadians (thetaDegree)); + printGraphics.setColor (new Color (1f, 1f, 1f, .8f)); + printGraphics.draw (new Rectangle2D.Double (bounds.getX () - bounds.getWidth ()/2, bounds.getY (), + bounds.getWidth (), bounds.getHeight ())); + printGraphics.setColor (color); + printGraphics.drawString (label, (float) (-bounds.getWidth ()/2), (float) (labelFont.getSize2D ()/2-bottom)); + printGraphics.setTransform (af); + } + + static public Font getLabelFont (String labelText, Font labelFont, Dimension2D size, Graphics2D printGraphics) { + if (labelText == null || labelText.isEmpty () || printGraphics == null) + return labelFont; + float height = (float) size.getHeight ();//-labelSpace; + labelFont = labelFont.deriveFont (height); + int stringWidth = printGraphics.getFontMetrics (labelFont).stringWidth (labelText); + float width = (float) size.getWidth ();//-labelSpace; + float newFontSize = height * width / stringWidth; + if (newFontSize < height) + labelFont = labelFont.deriveFont (newFontSize); + return labelFont; + } + + static public void printLine (Graphics2D printGraphics, Paint paint, Stroke stroke, + Point2D realPos, double length, double thetaDegree, + Stroke arrowStroke, Shape arrowStart, Shape arrowEnd) { + Paint prevPaint = printGraphics.getPaint (); + AffineTransform af = printGraphics.getTransform (); + //Stroke prevStroke = printGraphics.getStroke (); + + Line2D line = new Line2D.Double (-length/2, 0, length/2, 0); + printGraphics.setStroke (stroke); + printGraphics.setPaint (paint); + printGraphics.translate (realPos.getX (), realPos.getY ()); + printGraphics.rotate (Math.toRadians (thetaDegree)); + printGraphics.draw (line); + printGraphics.setStroke (arrowStroke); + //printGraphics.setPaint (java.awt.Color.blue); + if (arrowStart != null) { + printGraphics.setTransform (af); + printGraphics.translate (realPos.getX (), realPos.getY ()); + printGraphics.rotate (Math.toRadians (thetaDegree)); + printGraphics.translate (-length/2, 0); + printGraphics.rotate (Math.toRadians (180)); + printGraphics.fill (arrowStart); + printGraphics.draw (arrowStart); + } + //printGraphics.setPaint (java.awt.Color.red); + if (arrowEnd != null) { + printGraphics.setTransform (af); + printGraphics.translate (realPos.getX (), realPos.getY ()); + printGraphics.rotate (Math.toRadians (thetaDegree)); + printGraphics.translate (length/2, 0); + printGraphics.fill (arrowEnd); + printGraphics.draw (arrowEnd); + } + + printGraphics.setTransform (af); + printGraphics.setPaint (prevPaint); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/XmlAcc.java b/src/java/adecWatt/model/xml/XmlAcc.java new file mode 100644 index 0000000..b143121 --- /dev/null +++ b/src/java/adecWatt/model/xml/XmlAcc.java @@ -0,0 +1,16 @@ +package adecWatt.model.xml; + +import org.w3c.dom.Node; + +import adecWatt.model.Acc; +import adecWatt.model.Permanent; + +public class XmlAcc extends XmlPermanent { + + // ======================================== + public XmlAcc (Node node) { + parseNode (node, Acc.AccTypeEnum.class, Acc.AccAttrEnum.class); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/XmlComp.java b/src/java/adecWatt/model/xml/XmlComp.java new file mode 100644 index 0000000..a8abcf9 --- /dev/null +++ b/src/java/adecWatt/model/xml/XmlComp.java @@ -0,0 +1,16 @@ +package adecWatt.model.xml; + +import org.w3c.dom.Node; + +import adecWatt.model.Comp; +import adecWatt.model.Permanent; + +public class XmlComp extends XmlPermanent { + + // ======================================== + public XmlComp (Node node) { + parseNode (node, Comp.CompTypeEnum.class, Comp.CompAttrEnum.class); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/XmlPermanent.java b/src/java/adecWatt/model/xml/XmlPermanent.java new file mode 100644 index 0000000..0989529 --- /dev/null +++ b/src/java/adecWatt/model/xml/XmlPermanent.java @@ -0,0 +1,201 @@ +package adecWatt.model.xml; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.TreeSet; +import org.w3c.dom.Attr; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import misc.Util; + +public class XmlPermanent, A extends Enum> { + + // ======================================== + public T type; + private Hashtable facets = new Hashtable (); + private String value; + + ArrayList unknownAttr = new ArrayList (); + ArrayList unknownNodes = new ArrayList (); + + // ======================================== + @SuppressWarnings ({"unchecked", "rawtypes"}) + public void parseNode (Node node, Class nodeEnum, Class attrEnum) { + if (Node.ELEMENT_NODE != node.getNodeType ()) + throw new IllegalArgumentException ("XML unit not a node ("+node+")."); + type = (T) Enum.valueOf ((Class)nodeEnum, Util.toCapital (node.getNodeName ())); + NamedNodeMap allFacets = node.getAttributes (); + for (int i = 0; i < allFacets.getLength (); i++) { + Node facetNode = allFacets.item (i); + try { + if (facetNode.getNodeValue ().isEmpty ()) + continue; + facets.put ((A) Enum.valueOf ((Class)attrEnum, Util.toCapital (facetNode.getNodeName ())), facetNode.getNodeValue ()); + } catch (Exception e) { + unknownAttr.add (facetNode); + } + } + NodeList childrens = node.getChildNodes (); + for (int i = 0; i < childrens.getLength (); i++) { + Node child = childrens.item (i); + if (isEmpty (child)) + continue; + if (isText (child)) { + String val = child.getNodeValue ().trim (); + if (value != null) + value += " "+val; + else + value = val; + continue; + } + unknownNodes.add (child); + } + } + + // ======================================== + static public boolean isEmpty (Node node) { + return + Node.TEXT_NODE == node.getNodeType () && + 0 == node.getChildNodes ().getLength () && + 0 == node.getNodeValue ().trim ().length () && + (null == node.getAttributes () || 0 == node.getAttributes ().getLength ()); + } + + static public boolean isText (Node node) { + return + Node.TEXT_NODE == node.getNodeType () && + 0 == node.getChildNodes ().getLength () && + (null == node.getAttributes () || 0 == node.getAttributes ().getLength ()); + } + + // ======================================== + public String getValue () { + String result = value; + value = null; + return result; + } + + public String getFacet (A a) { + return facets.remove (a); + } + + public Collection getSplitFacet (A a) { + String result = facets.remove (a); + if (result == null) + return null; + return new TreeSet (Arrays.asList (result.toLowerCase ().split ("\\|"))); + } + public List getOrderedSplitFacet (A a) { + String result = facets.remove (a); + if (result == null) + return null; + return Arrays.asList (result.toLowerCase ().split ("\\|")); + } + + // ======================================== + public ArrayList getProps () { + ArrayList xmlProps = new ArrayList (); + for (Iterator it = unknownNodes.iterator (); it.hasNext (); ) { + Node node = it.next (); + try { + xmlProps.add (new XmlProp (node)); + it.remove (); + } catch (Exception e) { + } + } + return xmlProps; + } + public ArrayList getSegms () { + ArrayList xmlSegms = new ArrayList (); + for (Iterator it = unknownNodes.iterator (); it.hasNext (); ) { + Node node = it.next (); + try { + xmlSegms.add (new XmlSegm (node)); + it.remove (); + } catch (Exception e) { + } + } + return xmlSegms; + } + public ArrayList getComps () { + ArrayList xmlComps = new ArrayList (); + for (Iterator it = unknownNodes.iterator (); it.hasNext (); ) { + Node node = it.next (); + try { + xmlComps.add (new XmlComp (node)); + it.remove (); + } catch (Exception e) { + } + } + return xmlComps; + } + public ArrayList getAccs () { + ArrayList xmlAccs = new ArrayList (); + for (Iterator it = unknownNodes.iterator (); it.hasNext (); ) { + Node node = it.next (); + try { + xmlAccs.add (new XmlAcc (node)); + it.remove (); + } catch (Exception e) { + } + } + return xmlAccs; + } + + public Element getXml (Document document) { + Element element = document.createElement (type.toString ().toLowerCase ()); + if (value != null) + element.appendChild (document.createTextNode (value)); + for (A facet : facets.keySet ()) + element.setAttribute (facet.toString ().toLowerCase (), facets.get (facet)); + for (Node subNode : unknownAttr) + element.setAttributeNode ((Attr) (document.importNode (subNode, true))); + for (Node subNode : unknownNodes) + element.appendChild (document.importNode (subNode, true)); + return element; + } + + // ======================================== + static public void putValue (Element element, String value) { + if (value == null || value.isEmpty ()) + return; + element.appendChild (element.getOwnerDocument ().createTextNode (value)); + } + + static public void putFacet (Element element, Enum a, String value) { + if (value == null || value.isEmpty ()) + return; + element.setAttribute (a.toString ().toLowerCase (), value); + } + @SuppressWarnings ("unchecked") + static public void putSplitFacet (Element element, Enum a, Collection... tValues) { + String result = ""; + String sep = ""; + for (Collection values : tValues) { + if (values == null || values.size () == 0) + continue; + result += sep + String.join ("|", values); + sep = "|"; + } + putFacet (element, a, result); + } + + // ======================================== + // XXX a supprimer + // public String toString () { + // String result = type.toString ().toLowerCase ()+":"; + // for (A facet : facets.keySet ()) + // result+= " "+facet.toString ().toLowerCase ()+"="+facets.get (facet); + // return result; + // } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/XmlProp.java b/src/java/adecWatt/model/xml/XmlProp.java new file mode 100644 index 0000000..381ce95 --- /dev/null +++ b/src/java/adecWatt/model/xml/XmlProp.java @@ -0,0 +1,19 @@ +package adecWatt.model.xml; + +import org.w3c.dom.Node; + +import adecWatt.model.Permanent; +import adecWatt.model.Prop; + +/** + text|icon|image|enum|number|geo|square|cube|article +*/ +public class XmlProp extends XmlPermanent { + + // ======================================== + public XmlProp (Node node) { + parseNode (node, Prop.PropTypeEnum.class, Prop.PropAttrEnum.class); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/XmlSegm.java b/src/java/adecWatt/model/xml/XmlSegm.java new file mode 100644 index 0000000..adede9d --- /dev/null +++ b/src/java/adecWatt/model/xml/XmlSegm.java @@ -0,0 +1,16 @@ +package adecWatt.model.xml; + +import org.w3c.dom.Node; + +import adecWatt.model.Segm; +import adecWatt.model.Permanent; + +public class XmlSegm extends XmlPermanent { + + // ======================================== + public XmlSegm (Node node) { + parseNode (node, Segm.SegmTypeEnum.class, Segm.SegmAttrEnum.class); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/XmlUnit.java b/src/java/adecWatt/model/xml/XmlUnit.java new file mode 100644 index 0000000..15d3c74 --- /dev/null +++ b/src/java/adecWatt/model/xml/XmlUnit.java @@ -0,0 +1,26 @@ +package adecWatt.model.xml; + +import java.util.ArrayList; +import org.w3c.dom.Node; + +import adecWatt.model.Permanent; +import adecWatt.model.Unit; + +/** + */ +public class XmlUnit extends XmlPermanent { + + // ======================================== + //public Unit unit; + + public ArrayList comps = new ArrayList (); + public ArrayList attributes = new ArrayList (); + + // ======================================== + + public XmlUnit (Node xmlUnitNode) { + parseNode (xmlUnitNode, Unit.UnitTypeEnum.class, Unit.UnitAttrEnum.class); + } + + // ======================================== +} diff --git a/src/java/adecWatt/model/xml/package-info.java b/src/java/adecWatt/model/xml/package-info.java new file mode 100644 index 0000000..0a95a8b --- /dev/null +++ b/src/java/adecWatt/model/xml/package-info.java @@ -0,0 +1,10 @@ +/** + * Architecture des classes + * + * XmlPermanent + * XmlProp + * XmlComp + * XmlUnit + * + */ +package adecWatt.model.xml; diff --git a/src/java/adecWatt/view/JAcc.java b/src/java/adecWatt/view/JAcc.java new file mode 100644 index 0000000..36fcfb1 --- /dev/null +++ b/src/java/adecWatt/view/JAcc.java @@ -0,0 +1,123 @@ +package adecWatt.view; + +import java.awt.Dimension; +import java.awt.Point; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.JLabel; +import adecWatt.model.Acc; +import adecWatt.model.Item; + +@SuppressWarnings ("serial") +public class JAcc extends JLabel { + + // ======================================== + protected JWorkspaceView jWorkspaceView; + private Item item; + private Acc acc; + + public Acc getAcc () { return acc; } + public Item getItem () { return item; } + + // ======================================== + public JAcc (JWorkspaceView jWorkspaceView, Item item, Acc acc) { + this.jWorkspaceView = jWorkspaceView; + this.item = item; + this.acc = acc; + setIcon (acc.getModel ().getIcon (16)); + setSize (getPreferredSize ()); + setPos (); + AccMouseAdapter accMouseAdapter = new AccMouseAdapter (); + addMouseListener (accMouseAdapter); + addMouseMotionListener (accMouseAdapter); + } + public void setPos () { + setPos (jWorkspaceView.scaleModelToView (item.getAccCenter (acc.getId ()))); + } + public void setPos (Point pos) { + pos.x -= getWidth ()/2; + pos.y -= getHeight ()/2; + setLocation (pos); + } + + public void setScale () { + // center = new double [] {accPos.x, accPos.y}; + // jComp.getAT ().transform (center, 0, center, 0, 1); + // setLocation ((int) (center[0]+(jComp.getWidth ()-getWidth ())/2), (int) (center[1]+(jComp.getHeight ()-getHeight ())/2)); + // String accConnectedTo = acc.getConnectedTo (); + // if (accConnectedTo != null) + // jComp.addConnectedAcc (acc); + } + + // ======================================== + public class AccMouseAdapter extends MouseAdapter { + public void mousePressed (MouseEvent e) { + jWorkspaceView.mousePressed (e); + } + public void mouseReleased (MouseEvent e) { + jWorkspaceView.mouseReleased (e); + } + public void mouseDragged (MouseEvent e) { + jWorkspaceView.mouseDragged (e); + } + } + + // ======================================== + // JDragUnit selectedJDragAcc; + // Point mousePosOnJDragUnit; + + // public void startDrag (MouseEvent e) { + // JRootPane jRootPane = getRootPane (); + // JLayeredPane jLayeredPane = jRootPane.getLayeredPane (); + // if (selectedJDragAcc != null) + // jLayeredPane.remove (selectedJDragAcc); + // selectedJDragAcc = new JDragUnit (acc.getModel ()); + // mousePosOnJDragUnit = e.getPoint (); + // Point absPos = jRootPane.getMousePosition (true); + // selectedJDragAcc.setLocation (absPos.x-mousePosOnJDragUnit.x, absPos.y-mousePosOnJDragUnit.y); + // jLayeredPane.add (selectedJDragAcc); + // jLayeredPane.setLayer (selectedJDragAcc, JLayeredPane.DRAG_LAYER.intValue ()); + // //repaint (); + // } + + // public void stopDrag (MouseEvent e) { + // if (selectedJDragAcc == null) + // return; + // selectedJDragAcc.setVisible (false); + // selectedJDragAcc.getParent ().remove (selectedJDragAcc); + // // XXX recherche comp et acc + // try { + // AdecWatt adecWatt = jWorkspaceView.getJAdecWatt ().getAdecWatt (); + // // XXX Il peut y en avoir plusieurs + // ArrayList dstComps = jWorkspaceView.findComps (SwingUtilities.convertPoint (this, e.getPoint (), jWorkspaceView)); + // if (dstComps.size () < 1) { + // adecWatt.broadcastDisplay (AdecWattManager.actionRemoveAcc, jWorkspaceView, acc); + // return; + // } + // // XXX + // // PermanentDB permanentDB = adecWatt.getPermanentDB (); + // // JAcc dstJAcc = dstJComp.getJAcc (SwingUtilities.convertPoint (this, e.getPoint (), dstJComp)); + // // if (acc.getDirectUnit ().isDescendingFrom (permanentDB.getPowerPlugId ())) + // // jWorkspaceView.storyConnect (jComp, this, dstJComp, dstJAcc, permanentDB.getPowerSocketId ()); + // } catch (Exception e2) { + // e2.printStackTrace (); + // } + // } + // public void drag (MouseEvent e) { + // if (selectedJDragAcc == null) + // return; + // Point absPos = getRootPane ().getMousePosition (true); + // try { + // selectedJDragAcc.setLocation (absPos.x-mousePosOnJDragUnit.x, absPos.y-mousePosOnJDragUnit.y); + // } catch (Exception e2) { + // } + // } + + // ======================================== + public void dragAcc (Dimension delta) { + Point oldUnitPos = getLocation (); + setLocation (oldUnitPos.x+delta.width, oldUnitPos.y+delta.height); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JAccPopup.java b/src/java/adecWatt/view/JAccPopup.java new file mode 100644 index 0000000..948d4eb --- /dev/null +++ b/src/java/adecWatt/view/JAccPopup.java @@ -0,0 +1,67 @@ +package adecWatt.view; + +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.swing.JPopupMenu; + +import misc.Util; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.Acc; +import adecWatt.model.Item; +import adecWatt.model.AdecWatt; +import adecWatt.model.User; + +@SuppressWarnings ("serial") public class JAccPopup extends JPopupMenu { + + private Acc getLocal (JWorkspaceView jWorkspaceView, Item item, Acc acc) { + // return acc; + item = jWorkspaceView.workspace.getCloseEmbedded (item); + return (Acc) item.getCloseEmbedded (acc); + } + private List getLocal2 (JWorkspaceView jWorkspaceView, Item item, Acc acc) { + ArrayList localSelectedAccs = new ArrayList (1); + localSelectedAccs.add (jWorkspaceView.workspace.getCloseEmbedded (item).getCloseEmbedded (acc)); + return localSelectedAccs; + } + + // ======================================== + public JAccPopup (final JWorkspaceView jWorkspaceView, final Item item, final Acc acc, Point pos) { + final AdecWatt adecWatt = jWorkspaceView.getAdecWatt (); + //Item localItem = jWorkspaceView.workspace.getLocalEmbedded (item.getId ()); + User user = adecWatt.getUser (); + boolean editor = user.isEditor (jWorkspaceView.getWorkspace ()); + final List selectedAccs = Arrays.asList (acc); + + Util.addMenuItem (AdecWattManager.actionDisplayAcc, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionDisplayAcc, selectedAccs); + } + }, this); + if (editor) { + Util.addMenuItem (AdecWattManager.actionModifyAcc, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionModifyAcc, getLocal2 (jWorkspaceView, item, acc)); + } + }, this); + Util.addMenuItem (AdecWattManager.actionTransformAcc, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionTransformAcc, getLocal (jWorkspaceView, item, acc)); + } + }, this); + // if (item != null && item.getLocalEmbedded (acc.getId ()) != null) + // Util.addMenuItem (AdecWattManager.actionRemoveAcc, new ActionListener () { + // public void actionPerformed (ActionEvent e) { + // adecWatt.broadcastDisplay (AdecWattManager.actionRemoveAcc, jWorkspaceView, acc); + // } + // }, this); + } + show (jWorkspaceView, pos.x, pos.y); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JAdecWatt.java b/src/java/adecWatt/view/JAdecWatt.java new file mode 100644 index 0000000..6c0f356 --- /dev/null +++ b/src/java/adecWatt/view/JAdecWatt.java @@ -0,0 +1,510 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Point; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.TreeMap; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JLayeredPane; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JRootPane; +import javax.swing.JScrollPane; +import javax.swing.JSplitPane; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.JTree; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreePath; + +import misc.Config; +import misc.EasterEgg; +import misc.StateNotifier; +import misc.Util; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.AdecWatt; +import adecWatt.model.ImageDB; +import adecWatt.model.PermanentDB; +import adecWatt.model.Prop; +import adecWatt.model.Unit; +import adecWatt.model.UnitNode; +import adecWatt.model.User; +import adecWatt.model.unit.Accessory; +import adecWatt.model.unit.Building; +import adecWatt.model.unit.Lightplot; +import adecWatt.model.unit.NonWorkspace; +import adecWatt.model.unit.Workspace; +import adecWatt.model.xml.XmlUnit; + +@SuppressWarnings ("serial") public class JAdecWatt extends JPanel { + + static public final int space = 10; + static public final String + BroadcastChangeScale = "ChangeScale", + // BroadcastEditableSelection = "EditableSelection", + BroadcastSelection = "Selection", + BroadcastUnitStory = AdecWatt.BroadcastUnitStory, + BroadcastWorkspace = "Workspace"; + + // ======================================== + public StateNotifier stateNotifier = new StateNotifier (); + private AdecWatt adecWatt; + public final Dimension screenSize = Toolkit.getDefaultToolkit ().getScreenSize (); + + private JTabbedPane jTPStorage = new JTabbedPane (); + private JLabel background = new JLabel ("", SwingConstants.CENTER); + private JTabbedPane jTPWorkspace = new JTabbedPane (); + private JTextArea jConsole = new JTextArea (); + private Workspace currentWorkspace; + private Font localFont, normalFont, modifiedFont; + + public AdecWatt getAdecWatt () { return adecWatt; } + + public JWorkspaceView getCurrentJWorkspace () { + try { + return ((JScrollPaneWorkspace) jTPWorkspace.getComponentAt (jTPWorkspace.getSelectedIndex ())).getJWorkspaceView (); + } catch (Exception e) { + return null; + } + } + public JWorkspaceView getJWorkspace (Workspace workspace) { + try { + return (JWorkspaceView) getJScrollPaneWorkspace (workspace).getJWorkspaceView (); + } catch (Exception e) { + return null; + } + } + public Workspace getCurrentWorkspace () { + return currentWorkspace; + } + public void setCurrentWorkspace (Workspace workspace) { + currentWorkspace = workspace; + stateNotifier.broadcastUpdate (BroadcastWorkspace); + adecWatt.broadcastUpdate (AdecWatt.BroadcastTitle); + } + + // ======================================== + public JAdecWatt (AdecWatt adecWatt) { + super (new BorderLayout ()); + this.adecWatt = adecWatt; + normalFont = getFont (); + modifiedFont = normalFont.deriveFont (Font.BOLD, normalFont.getSize ()); + localFont = normalFont.deriveFont (Font.ITALIC, normalFont.getSize ()); + try { + EasterEgg easterEgg = new EasterEgg ("images/adecWatt-anim.gif"); + easterEgg.addPeriode ("1220", "1231", "images/adecWatt-anim-noel.gif"); + easterEgg.addPeriode ("0101", "0115", "images/adecWatt-anim-noel.gif"); + easterEgg.addPeriode ("0517", "0527", "images/2017-festival-adec56.png"); + easterEgg.addPeriode ("0505", "0516", "images/2017-festival-adec56.gif"); + background.setIcon (Util.loadImageIcon (Config.dataDirname, easterEgg.getValue ())); + } catch (Exception e) { + } + background.setLayout (new BorderLayout ()); + background.add (jTPWorkspace, BorderLayout.CENTER); + jConsole.setPreferredSize (new Dimension (400, 50)); + JSplitPane tmp = Util.getJSplitPane (JSplitPane.VERTICAL_SPLIT, background, Util.getJScrollPane (jConsole)); + tmp.setResizeWeight (1); + add (Util.getJSplitPane (JSplitPane.HORIZONTAL_SPLIT, jTPStorage, tmp), BorderLayout.CENTER); + adecWatt.addUpdateObserver (this, AdecWatt.BroadcastUnitRoots); + adecWatt.addMsgObserver (this, AdecWatt.BroadcastConsole, AdecWatt.BroadcastUpdateWorkspace, AdecWatt.BroadcastUpdateUnitTree); + updateUnitRoots (); + + jTPWorkspace.addChangeListener (new ChangeListener () { + public void stateChanged (ChangeEvent e) { + try { + setCurrentWorkspace (((JScrollPaneWorkspace) jTPWorkspace.getSelectedComponent ()).getWorkspace ()); + } catch (Exception e2) { + } + } + }); + + jTPWorkspace.addMouseListener (new MouseAdapter () { + public void mousePressed (MouseEvent e) { + int idx = jTPWorkspace.indexAtLocation (e.getX (), e.getY ()); + if (idx < 0) { + stateNotifier.broadcastDisplay (BroadcastUnitStory, currentWorkspace); + return; + } + stateNotifier.broadcastDisplay (BroadcastUnitStory, ((JScrollPaneWorkspace) jTPWorkspace.getComponentAt (idx)).getWorkspace ()); + // if (idx < 0 || !SwingUtilities.isRightMouseButton (e)) + // return; + // JPopupMenu jPopupMenu = new JPopupMenu (); + // Util.addMenuItem ("CloseWorkspace", jPopupMenu, new ActionListener () { + // public void actionPerformed (ActionEvent e) { + // jTPWorkspace.remove (idx); + // } + // }); + // jPopupMenu.show (jTPWorkspace, e.getX (), e.getY ()); + } + }); + } + + // ======================================== + public void closeWorkspaces () { + jTPWorkspace.removeAll (); + stateNotifier.broadcastUpdate (BroadcastWorkspace); + } + public void closeWorkspace (Workspace workspace) { + JScrollPaneWorkspace jScrollPaneWorkspace = getJScrollPaneWorkspace (workspace); + if (jScrollPaneWorkspace == null) + return; + jTPWorkspace.remove (jScrollPaneWorkspace); + stateNotifier.broadcastUpdate (BroadcastWorkspace); + } + public void closeCurrentWorkspace () { + jTPWorkspace.remove (jTPWorkspace.getSelectedComponent()); + stateNotifier.broadcastUpdate (BroadcastWorkspace); + } + + public void searchUnit (String text) { + for (Unit rootUnit : allJTree.keySet ()) { + JTree jTree = allJTree.get (rootUnit); + jTree.clearSelection (); + if (text == null || text.isEmpty ()) { + for (int row = jTree.getRowCount ()-1; row > 0; row--) + jTree.collapseRow (row); + jTree.expandRow (0); + jTree.scrollPathToVisible (rootUnit.getPath ()); + continue; + } + for (int row = jTree.getRowCount ()-1; row > 0; row--) + jTree.collapseRow (row); + for (Unit unit : rootUnit.search (text)) { + TreePath path = unit.getPath (); + jTree.expandPath (path); + jTree.addSelectionPath (path); + jTree.scrollPathToVisible (path); + } + } + } + + public void searchComp (String text) { + for (int i = 0; i < jTPWorkspace.getTabCount (); i++) + ((JScrollPaneWorkspace) jTPWorkspace.getComponentAt (i)).getJWorkspaceView ().setSelectedItemsBySearch (text); + } + + // ======================================== + public void displayOrModify (Unit unit) { + adecWatt.broadcastDisplay (adecWatt.getUser ().isEditor (unit) ? AdecWattManager.actionModifyUnit : AdecWattManager.actionDisplayUnit, + Arrays.asList (unit)); + } + Hashtable, JTree> allJTree = new Hashtable, JTree> (); + public void updateUnitRoots () { + closeWorkspaces (); + jTPStorage.removeAll (); + allJTree.clear (); + Hashtable> namedRoots = adecWatt.getNamedRoots (); + TreeMap> sortedRoots = new TreeMap> (); + JScrollPane selectedStorage = null; + for (Unit unit : namedRoots.values ()) + sortedRoots.put (unit.getLocalName (), unit); + for (String localName : sortedRoots.descendingKeySet ()) { + Unit unit = sortedRoots.get (localName); + final JTree jTree = new JTree (unit.getUnitNode (), false); + allJTree.put (unit, jTree); + jTree.setCellRenderer (xmlTreeRenderer); + jTree.setToggleClickCount (0); + jTree.setFocusable (false); + JScrollPane currentStorage = Util.getJScrollPane (jTree); + jTPStorage.add (localName, currentStorage); + if (Prop.PropBuilding.equals (unit.getName ())) + selectedStorage = currentStorage; + jTree.addMouseListener (new MouseAdapter () { + public void mousePressed (MouseEvent e) { + int selRow = jTree.getRowForLocation (e.getX (), e.getY ()); + if (selRow < 0) { + // stateNotifier.broadcastDisplay (BroadcastEditableSelection, (Unit) null); + return; + } + TreePath selPath = jTree.getPathForLocation (e.getX (), e.getY ()); + Unit unit = ((UnitNode) selPath.getLastPathComponent ()).getUnit (); + // stateNotifier.broadcastDisplay (BroadcastEditableSelection, unit); + stateNotifier.broadcastDisplay (BroadcastUnitStory, unit); + if (e.getClickCount() == 2) { + e.consume (); + switch (unit.getTypeToken ()) { + case Furniture: + case Information: + case Line: + case Accessory: + displayOrModify (unit); + return; + default: + break; + } + if (unit.isUncompleted (null) || isWorkspaceContains (unit, true)) { + displayOrModify (unit); + return; + } + addWorkspace ((Workspace) unit); + return; + } + if (SwingUtilities.isRightMouseButton (e)) { + new JUnitPopup (adecWatt, jTree, unit, e.getPoint ()); + return; + } + Point rowLocation = jTree.getRowBounds (selRow).getLocation (); + //e.consume (); + User user = adecWatt.getUser (); + if (!(user.isDataStructuresManager () || user.isEditor (unit)) && unit.isUncompleted (null)) + return; + startDragJDragUnit (new JDragUnit (unit), e, rowLocation); + } + public void mouseReleased (MouseEvent e) { + stopJDragUnit (e); + } + }); + jTree.addMouseMotionListener (new MouseAdapter () { + public void mouseDragged (MouseEvent e) { + dragJDragUnit (e); + } + }); + } + try { + jTPStorage.setSelectedComponent (selectedStorage); + } catch (Exception e) { + } + } + + // ======================================== + DefaultTreeCellRenderer xmlTreeRenderer = new DefaultTreeCellRenderer () { + public Component getTreeCellRendererComponent (JTree tree, Object value, + boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { + super.getTreeCellRendererComponent (tree, value, selected, expanded, leaf, row, hasFocus); + Unit unit = ((UnitNode) value).getUnit (); + setFont (unit.story.isModified () ? modifiedFont : (unit.getRemote () ? normalFont : localFont)); + setText (unit.getLocalName ()); + setIcon (unit.getIcon (16)); + return this; + } + }; + + public void updateUnit (Unit unit, boolean structChange) { + try { + DefaultTreeModel model = (DefaultTreeModel) allJTree.get (unit.getUnitRoot ()).getModel(); + if (structChange) + model.nodeStructureChanged (unit.getUnitNode ()); + else + model.nodeChanged (unit.getUnitNode ()); + } catch (Exception e) { + } + } + + + // ======================================== + public void addWorkspace (Workspace workspace) { + if (isWorkspaceContains (workspace, true)) + return; + JScrollPaneWorkspace jScrollPaneWorkspace = new JScrollPaneWorkspace (JWorkspaceView.getInstance (this, workspace)); + jTPWorkspace.addTab (workspace.toString (), workspace.getIcon (16), jScrollPaneWorkspace); + jTPWorkspace.setSelectedComponent (jScrollPaneWorkspace); + stateNotifier.broadcastUpdate (BroadcastWorkspace); + } + public boolean hasWorkspace () { + return jTPWorkspace.getTabCount () > 0; + } + public JScrollPaneWorkspace getJScrollPaneWorkspace (Unit unit) { + for (int i = 0; i < jTPWorkspace.getTabCount (); i++) { + JScrollPaneWorkspace jScrollPaneWorkspace = (JScrollPaneWorkspace) jTPWorkspace.getComponentAt (i); + if (jScrollPaneWorkspace.getWorkspace () == unit) + return jScrollPaneWorkspace; + } + return null; + } + public boolean isWorkspaceContains (Unit unit, boolean select) { + JScrollPaneWorkspace jScrollPaneWorkspace = getJScrollPaneWorkspace (unit); + if (jScrollPaneWorkspace == null) + return false; + if (select) + jTPWorkspace.setSelectedComponent (jScrollPaneWorkspace); + return true; + } + + // ======================================== + JDragUnit selectedJDragUnit; + Point mousePosOnJDragUnit; + public void startDragJDragUnit (JDragUnit jDragUnit, MouseEvent e, Point rowLocation) { + mousePosOnJDragUnit = e.getPoint (); + mousePosOnJDragUnit.translate (-rowLocation.x, -rowLocation.y); + jDragUnit.setBackground (Color.lightGray); + JRootPane jRootPane = getRootPane (); + Point absPos = jRootPane.getMousePosition (true); + jDragUnit.setLocation (absPos.x-mousePosOnJDragUnit.x, absPos.y-mousePosOnJDragUnit.y); + JLayeredPane jLayeredPane = jRootPane.getLayeredPane (); + if (selectedJDragUnit != null) + jLayeredPane.remove (selectedJDragUnit); + selectedJDragUnit = jDragUnit; + jLayeredPane.add (jDragUnit); + jLayeredPane.setLayer (jDragUnit, JLayeredPane.DRAG_LAYER.intValue ()); + repaint (); + } + + public void dragJDragUnit (MouseEvent e) { + if (selectedJDragUnit == null) + return; + Point absPos = getRootPane ().getMousePosition (true); + try { + selectedJDragUnit.setLocation (absPos.x-mousePosOnJDragUnit.x, absPos.y-mousePosOnJDragUnit.y); + } catch (Exception e2) { + } + } + + public void stopJDragUnit (MouseEvent e) { + if (selectedJDragUnit == null) + return; + //selectedJDragUnit.setBackground (UIManager.getColor ("Panel.background")); + selectedJDragUnit.setVisible (false); + selectedJDragUnit.getParent ().remove (selectedJDragUnit); + boolean inWorkspace = false; + JWorkspaceView jWorkspaceView = null; + JTree jTree = null; + try { + for (Component + component = findComponentAt (getMousePosition (true)), + parent = null; + component != null; + component = parent) { + parent = component.getParent (); + if (component == jTPWorkspace) { + inWorkspace = true; + break; + } + if (component instanceof JTree) { + jTree = (JTree) component; + break; + } + if (component instanceof JWorkspaceView) { + jWorkspaceView = (JWorkspaceView) component; + break; + } + } + } catch (Exception e2) { + } + Unit src = selectedJDragUnit.unit; + selectedJDragUnit = null; + if (jTree != null) + dropInJTree (src, jTree, e); + else if (src.isUncompleted (null)) + ; + else if (jWorkspaceView != null) + dropInWorkspace (src, jWorkspaceView); + else if (inWorkspace) + dropInEmptySpace (src); + repaint (); + } + private void dropInJTree (Unit src, JTree jTree, MouseEvent e) { + User user = adecWatt.getUser (); + if (!(user.isDataStructuresManager () || user.isEditor (src))) + return; + int selRow = jTree.getRowForLocation (e.getX (), e.getY ()); + if (selRow < 0) { + // stateNotifier.broadcastDisplay (BroadcastEditableSelection, (Unit) null); + return; + } + TreePath selPath = jTree.getPathForLocation (e.getX (), e.getY ()); + Unit dst = ((UnitNode) selPath.getLastPathComponent ()).getUnit (); + src.storyTransform (null, dst, null, null); + } + private void dropInEmptySpace (Unit src) { + switch (src.getTypeToken ()) { + case Furniture: + case Information: + case Line: + case Accessory: + return; + case Building: + addWorkspace ((Building) src); + break; + case Lightplot: + addWorkspace ((Lightplot) src); + break; + } + } + private void dropInWorkspace (Unit src, JWorkspaceView jWorkspaceView) { + Unit dst = jWorkspaceView.workspace; + if (src == dst || src.isUncompleted (null)) + return; + if (src instanceof NonWorkspace && + !adecWatt.getUser ().isEditor (dst)) + return; + switch (src.getTypeToken ()) { + case Furniture: + case Information: + jWorkspaceView.dropComp ((NonWorkspace) src, jWorkspaceView.getMousePosition (true)); + return; + case Line: + jWorkspaceView.dropSegm ((NonWorkspace) src, jWorkspaceView.getMousePosition (true)); + return; + case Accessory: + jWorkspaceView.dropAcc ((Accessory) src, jWorkspaceView.getMousePosition (true)); + return; + case Building: + if (dst.getTypeToken () == Unit.UnitTypeEnum.Lightplot && + adecWatt.getUser ().isEditor (dst)) { + ((Lightplot) dst).storyChangeBuilding ((Building) src); + break; + } + addWorkspace ((Building) src); + break; + case Lightplot: + if (dst.getTypeToken () == Unit.UnitTypeEnum.Building && + adecWatt.getUser ().isEditor (src)) { + if (!isWorkspaceContains (src, true)) + addWorkspace ((Lightplot) src); + ((Lightplot) src).storyChangeBuilding ((Building) dst); + break; + } + addWorkspace ((Lightplot) src); + break; + } + } + + // ======================================== + public void displayUpdateUnitTree (Object... objects) { + Unit unit = (Unit) objects[0]; + updateUnit (unit, true); + } + public void displayUpdateWorkspace (Object... objects) { + Workspace workspace = (Workspace) objects[0]; + JScrollPaneWorkspace jScrollPaneWorkspace = getJScrollPaneWorkspace (workspace); + if (jScrollPaneWorkspace == null) + return; + Workspace currentWorkspace = this.currentWorkspace; + closeWorkspace (workspace); + addWorkspace (workspace); + setCurrentWorkspace (currentWorkspace); + } + + public void displayConsole (Object... objects) { + synchronized (jConsole) { + jConsole.invalidate (); + String message = (String) objects[0]; + jConsole.append (message); + jConsole.validate (); + jConsole.repaint (); + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JAdecWattDialog.java b/src/java/adecWatt/view/JAdecWattDialog.java new file mode 100644 index 0000000..cd41da1 --- /dev/null +++ b/src/java/adecWatt/view/JAdecWattDialog.java @@ -0,0 +1,255 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.Container; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.TreeSet; +import java.util.Vector; +import javax.swing.JCheckBox; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.filechooser.FileNameExtensionFilter; + +import misc.Bundle; +import misc.Config; +import misc.ImagePreview; +import misc.OwnFrame; +import misc.RemoteUpdateManager; +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCNL; + +import adecWatt.model.AdecWatt; +import adecWatt.model.Editable; +import adecWatt.model.PermanentDB; +import adecWatt.model.Unit; +import adecWatt.model.User; +import adecWatt.model.unit.Workspace; + +public class JAdecWattDialog implements SwingConstants { + + // ======================================== + OwnFrame controller; + public OwnFrame getOwnFrame () { return controller; } + public JAdecWattDialog (OwnFrame controller) { + this.controller = controller; + } + + // ======================================== + public void todo () { + JOptionPane.showMessageDialog (controller.getJFrame (), "TODO !\n Oui, cette fonction n'est pas encore r\u00E9alis\u00E9 :-("); + } + public String getSimpleMessage (String msg, String value) { + return JOptionPane.showInputDialog (controller.getJFrame (), msg, value); + } + + // ======================================== + public void magnetPolicies (AdecWatt adecWatt) { + JPanel content = Util.getGridBagPanel (); + JCheckBox jHandleCD = Util.addCheckIcon ("HandleGlue", null, adecWatt.getHandleGlue (), content, GBC); + Util.addLabel ("HandleGlue", LEFT, content, GBCNL); + JCheckBox jBoundCB = Util.addCheckIcon ("BoundGlue", null, adecWatt.getBoundGlue (), content, GBC); + Util.addLabel ("BoundGlue", LEFT, content, GBCNL); + JCheckBox jGridCB = Util.addCheckIcon ("GridGlue", null, adecWatt.getGridGlue (), content, GBC); + Util.addLabel ("GridGlue", LEFT, content, GBCNL); + JCheckBox jInSegCB = Util.addCheckIcon ("InSegmentGlue", null, adecWatt.getInSegmentGlue (), content, GBC); + Util.addLabel ("InSegmentGlue", LEFT, content, GBCNL); + if (JOptionPane.showConfirmDialog (controller.getJFrame (), content, Bundle.getTitle ("MagnetPolicies"), + JOptionPane.YES_NO_OPTION) + != JOptionPane.YES_OPTION) + return; + adecWatt.setHandleGlue (jHandleCD.isSelected ()); + adecWatt.setBoundGlue (jBoundCB.isSelected ()); + adecWatt.setGridGlue (jGridCB.isSelected ()); + adecWatt.setInSegmentGlue (jInSegCB.isSelected ()); + } + + // ======================================== + public void patch (Workspace workspace) { + JPanel content = new JPatch (workspace.getPatch ()); + JDialog jDialog = removeDisplay (workspace); + boolean center = false; + if (jDialog == null) { + center = true; + jDialog = new JDialog (controller.getJFrame (), "Patch "+workspace.getLocalName (), false); + } + Container container = jDialog.getContentPane (); + container.removeAll (); + container.add (content, BorderLayout.CENTER); + addDisplay (workspace, jDialog, center); + } + private Hashtable, JDialog> currentDisplays = new Hashtable, JDialog> (); + public JDialog removeDisplay (Editable editable) { + try { + JDialog jDialog = currentDisplays.get (editable); + jDialog.setVisible (false); + currentDisplays.remove (editable); + return jDialog; + } catch (Exception e) { + return null; + } + } + public void removeAllDisplay () { + for (Editable editable : currentDisplays.keySet ()) + currentDisplays.get (editable).setVisible (false); + currentDisplays.clear (); + } + private void addDisplay (final Editable editable, JDialog jDialog, boolean center) { + currentDisplays.put (editable, jDialog); + jDialog.addWindowListener (new WindowAdapter () { + public void windowClosing (WindowEvent e) { + // XXX confirmBundle + removeDisplay (editable); + } + }); + jDialog.pack (); + if (center) + jDialog.setLocation ((int) controller.getJFrame ().getLocation ().getX () - (jDialog.getWidth () - controller.getJFrame ().getWidth ())/2, + (int) controller.getJFrame ().getLocation ().getY () - (jDialog.getHeight() - controller.getJFrame ().getHeight ())/2); + jDialog.setVisible (true); + jDialog.toFront (); + } + public void display (boolean edit, List> editables) { + Editable editable = editables.get (0); + JDialog jDialog = removeDisplay (editable); + JEditable jEditable = new JEditable (editables); + JPanel content = jEditable.getDislay (edit); + if (!edit) { + boolean center = false; + if (jDialog == null) { + center = true; + jDialog = new JDialog (controller.getJFrame (), editable.getLocalName (), false); + } + Container container = jDialog.getContentPane (); + container.removeAll (); + container.add (content, BorderLayout.CENTER); + addDisplay (editable, jDialog, center); + return; + } + if (JOptionPane.showConfirmDialog (controller.getJFrame (), content, Bundle.getTitle ("Edit"), + JOptionPane.YES_NO_OPTION) + != JOptionPane.YES_OPTION) + return; + jEditable.confirmChange (); + jEditable.confirmBundle (); + } + public void transform (Editable editable) { + JTransform jTransform = new JTransform (editable); + for (;;) { + if (JOptionPane.showConfirmDialog (controller.getJFrame (), jTransform, Bundle.getTitle ("Transform"), JOptionPane.YES_NO_OPTION) + != JOptionPane.YES_OPTION) + return; + if (jTransform.valideChange ()) + break; + // XXX message prop en double ou text en cours + } + jTransform.confirmChange (); + } + + // ======================================== + public boolean validation (String message, String name, PermanentDB.UnitLocation location) { + return + JOptionPane.showConfirmDialog (controller.getJFrame (), + MessageFormat.format (Bundle.getMessage (message), name, location), + null, JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION; + } + + public boolean validation (String message, String name, PermanentDB.UnitLocation location, + HashSet> units, TreeSet icons, TreeSet images) { + JPanel msgPanel = Util.getGridBagPanel (); + Util.addComponent (new JLabel (MessageFormat.format (Bundle.getMessage (message), name, location)), msgPanel, GBCNL); + Util.addLabel ("Units", LEFT, msgPanel, GBC); + Util.addLabel ("Icons", LEFT, msgPanel, GBC); + Util.addLabel ("Images", LEFT, msgPanel, GBCNL); + Vector unitsVector = new Vector (); + for (Unit unit : units) + unitsVector.add (unit.toString ()); + if (icons.size () == 0) + icons = new TreeSet (Arrays.asList (" ")); + if (images.size () == 0) + images = new TreeSet (Arrays.asList (" ")); + Util.addComponent (Util.getJScrollPane (new JList (unitsVector)), msgPanel, GBC); + Util.addComponent (Util.getJScrollPane (new JList (new Vector (icons))), msgPanel, GBC); + Util.addComponent (Util.getJScrollPane (new JList (new Vector (images))), msgPanel, GBCNL); + return + JOptionPane.showConfirmDialog (controller.getJFrame (), msgPanel, null, JOptionPane.YES_NO_OPTION) + == JOptionPane.YES_OPTION; + } + + public String getName (String answer) { + return JOptionPane.showInputDialog (controller.getJFrame (), Bundle.getMessage ("GiveName"), answer); + } + + public Double getSpace () { + String answer = JOptionPane.showInputDialog (controller.getJFrame (), Bundle.getMessage ("GiveSpace"), ""); + if (answer == null) + return -1.; + try { + return Double.parseDouble (answer.replace (",", ".")); + } catch (Exception e) { + return null; + } + } + + public void checkAdmin (User user, RemoteUpdateManager remoteUpdateManager) { + JUser jUser = new JUser (user, remoteUpdateManager); + switch (JOptionPane.showConfirmDialog (controller.getJFrame (), jUser, Bundle.getTitle ("ChangeRole"), + JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE)) { + case JOptionPane.YES_OPTION: + jUser.confirm (); + return; + case JOptionPane.NO_OPTION: + return; + } + } + + public boolean abortModification () { + return JOptionPane.showConfirmDialog (controller.getJFrame (), Bundle.getMessage ("QuitJAdecWatt"), + Bundle.getTitle ("AdecWattStillRunning"), + JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION; + } + + // ======================================== + public File getChooseOpenFile (File lastFile) { + JFileChooser jFileChooser = new JFileChooser (Config.getString ("ExportDirName", "data/export")); + jFileChooser.setFileFilter (new FileNameExtensionFilter (Bundle.getLabel ("ExportFilter"), PermanentDB.exportExtention)); + jFileChooser.setFileSelectionMode (JFileChooser.FILES_ONLY); + jFileChooser.setAccessory (new ImagePreview (jFileChooser, 1024*1024)); + if (lastFile != null) + jFileChooser.setSelectedFile (lastFile); + if (jFileChooser.showOpenDialog (controller.getJFrame ()) != JFileChooser.APPROVE_OPTION) + return null; + File file = jFileChooser.getSelectedFile (); + Config.setFile ("ExportDirName", file.getParentFile ()); + return file; + } + + public File getChooseSaveFile (File lastFile) { + JFileChooser jFileChooser = new JFileChooser (Config.getString ("ExportDirName", "data/export")); + jFileChooser.setFileFilter (new FileNameExtensionFilter (Bundle.getLabel ("ExportFilter"), PermanentDB.exportExtention)); + jFileChooser.setFileSelectionMode (JFileChooser.FILES_ONLY); + jFileChooser.setAccessory (new ImagePreview (jFileChooser, 1024*1024)); + if (lastFile != null) + jFileChooser.setSelectedFile (lastFile); + if (jFileChooser.showSaveDialog (controller.getJFrame ()) != JFileChooser.APPROVE_OPTION) + return null; + File file = jFileChooser.getSelectedFile (); + Config.setFile ("ExportDirName", file.getParentFile ()); + return file; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JAdecWattMenuBar.java b/src/java/adecWatt/view/JAdecWattMenuBar.java new file mode 100644 index 0000000..bf33621 --- /dev/null +++ b/src/java/adecWatt/view/JAdecWattMenuBar.java @@ -0,0 +1,67 @@ +package adecWatt.view; + +import java.util.Hashtable; +import javax.swing.AbstractButton; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.JMenu; +import javax.swing.JMenuBar; + +import misc.ApplicationManager; +import misc.ToolBarManager; +import misc.Util; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.User; + +@SuppressWarnings ("serial") public class JAdecWattMenuBar extends JMenuBar { + + JMenu editMenu, placementMenu, yodaMenu; + + // ======================================== + public JAdecWattMenuBar (ApplicationManager controllerManager, ApplicationManager adecWattManager, ApplicationManager storyManager, + ApplicationManager proxyManager, ApplicationManager remoteUpdateManager, ApplicationManager helpManager, + ToolBarManager toolBarManager) { + setLayout (new BoxLayout (this, BoxLayout.X_AXIS)); + JMenu fileMenu = Util.addJMenu (this, "File"); + editMenu = Util.addJMenu (this, "Edit"); + placementMenu = Util.addJMenu (this, "Placement"); + yodaMenu = Util.addJMenu (this, "Yoda"); + add (Box.createHorizontalGlue ()); + JMenu helpMenu = Util.addJMenu (this, "Help"); + + storyManager.addMenuItem (editMenu); + adecWattManager.addMenuItem (fileMenu, editMenu, placementMenu, yodaMenu, helpMenu); + controllerManager.addMenuItem (fileMenu); + proxyManager.addMenuItem (helpMenu); + remoteUpdateManager.addMenuItem (helpMenu); + helpManager.addMenuItem (helpMenu); + toolBarManager.addMenuItem (helpMenu); + + Hashtable buttons = new Hashtable (); + Util.collectButtons (buttons, fileMenu); + Util.collectButtons (buttons, editMenu); + Util.collectButtons (buttons, placementMenu); + Util.collectButtons (buttons, helpMenu); + + controllerManager.addActiveButtons (buttons); + adecWattManager.addActiveButtons (buttons); + storyManager.addActiveButtons (buttons); + proxyManager.addActiveButtons (buttons); + remoteUpdateManager.addActiveButtons (buttons); + helpManager.addActiveButtons (buttons); + toolBarManager.addActiveButtons (buttons); + + Util.setAccelerator (buttons, AdecWattManager.actionsControl); + } + + public void changeProfil (User user) { + boolean editor = user.isEditor (); + editMenu.setVisible (editor); + placementMenu.setVisible (editor); + yodaMenu.setVisible (user.isAdmin ()); + } + + // ======================================== +} + diff --git a/src/java/adecWatt/view/JAdecWattSearchToolBar.java b/src/java/adecWatt/view/JAdecWattSearchToolBar.java new file mode 100644 index 0000000..a560ee2 --- /dev/null +++ b/src/java/adecWatt/view/JAdecWattSearchToolBar.java @@ -0,0 +1,44 @@ +package adecWatt.view; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JTextField; +import javax.swing.JToolBar; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; + +import misc.Util; + +@SuppressWarnings ("serial") public class JAdecWattSearchToolBar extends JToolBar implements ActionListener { + + JTextField searchTF = new JTextField (8); + + public JAdecWattSearchToolBar (final JAdecWatt jAdecWatt) { + super ("Search"); + searchTF.getDocument ().addDocumentListener (new DocumentListener () { + public void changedUpdate (DocumentEvent e) { + String search = Util.removeAccent (searchTF.getText ()).toLowerCase (); + jAdecWatt.searchUnit (search); + jAdecWatt.searchComp (search); + } + public void insertUpdate (DocumentEvent e) { changedUpdate (e); } + public void removeUpdate (DocumentEvent e) { changedUpdate (e); } + }); + // JPanel jPanel = new JPanel (new BorderLayout ()); + // jPanel.add (Util.newIconButton ("Find", this), BorderLayout.WEST); + // jPanel.add (searchTF, BorderLayout.CENTER); + // Util.unBoxButton (jPanel); + // add (jPanel, BorderLayout.NORTH); + + add (Util.newIconButton ("Search", this)); + add (searchTF); + //Util.unBoxButton (jPanel); + } + + public void setOrientation (int o) { + super.setOrientation (HORIZONTAL); + } + public void actionPerformed (ActionEvent e) { + // XXX + } +} diff --git a/src/java/adecWatt/view/JAdecWattToolBar.java b/src/java/adecWatt/view/JAdecWattToolBar.java new file mode 100644 index 0000000..9758b6e --- /dev/null +++ b/src/java/adecWatt/view/JAdecWattToolBar.java @@ -0,0 +1,64 @@ +package adecWatt.view; + +import java.util.Hashtable; +import javax.swing.AbstractButton; +import javax.swing.JToolBar; + +import misc.ApplicationManager; +import misc.ToolBarManager; +import misc.Util; + +import adecWatt.model.User; + +public class JAdecWattToolBar { + + JToolBar editToolBar; + JToolBar placementToolBar; + + // ======================================== + static public final String defaultCardinalPoint = "North"; + + public JAdecWattToolBar (ApplicationManager controllerManager, ApplicationManager adecWattManager, ApplicationManager storyManager, + ApplicationManager proxyManager, ApplicationManager remoteUpdateManager, ApplicationManager helpManager, + ToolBarManager toolBarManager, JToolBar searchToolBar, JToolBar slidersToolBar) { + + JToolBar fileToolBar = toolBarManager.newJToolBar ("File", defaultCardinalPoint); + editToolBar = toolBarManager.newJToolBar ("Edit", defaultCardinalPoint); + placementToolBar = toolBarManager.newJToolBar ("Placement", defaultCardinalPoint); + toolBarManager.add (searchToolBar, defaultCardinalPoint); + toolBarManager.add (slidersToolBar, defaultCardinalPoint); + JToolBar helpToolBar = toolBarManager.newJToolBar ("Help", defaultCardinalPoint); + + controllerManager.addIconButtons (fileToolBar); + storyManager.addIconButtons (editToolBar); + adecWattManager.addIconButtons (fileToolBar, editToolBar, placementToolBar, searchToolBar, slidersToolBar, helpToolBar); + proxyManager.addIconButtons (helpToolBar); + remoteUpdateManager.addIconButtons (helpToolBar); + helpManager.addIconButtons (helpToolBar); + toolBarManager.addIconButtons (helpToolBar); + + Hashtable buttons = new Hashtable (); + Util.collectButtons (buttons, fileToolBar); + Util.collectButtons (buttons, editToolBar); + Util.collectButtons (buttons, placementToolBar); + Util.collectButtons (buttons, searchToolBar); + Util.collectButtons (buttons, slidersToolBar); + Util.collectButtons (buttons, helpToolBar); + + controllerManager.addActiveButtons (buttons); + adecWattManager.addActiveButtons (buttons); + storyManager.addActiveButtons (buttons); + proxyManager.addActiveButtons (buttons); + remoteUpdateManager.addActiveButtons (buttons); + helpManager.addActiveButtons (buttons); + toolBarManager.addActiveButtons (buttons); + } + + public void changeProfil (User user) { + boolean editor = user.isEditor (); + editToolBar.setVisible (editor); + placementToolBar.setVisible (editor); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JBuildingView.java b/src/java/adecWatt/view/JBuildingView.java new file mode 100644 index 0000000..6249f23 --- /dev/null +++ b/src/java/adecWatt/view/JBuildingView.java @@ -0,0 +1,13 @@ +package adecWatt.view; + +import adecWatt.model.unit.Building; + +@SuppressWarnings ("serial") public class JBuildingView extends JWorkspaceView { + + // ======================================== + public JBuildingView (JAdecWatt jAdecWatt, Building building) { + super (jAdecWatt, building); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JComp.java b/src/java/adecWatt/view/JComp.java new file mode 100644 index 0000000..068f2b3 --- /dev/null +++ b/src/java/adecWatt/view/JComp.java @@ -0,0 +1,76 @@ +package adecWatt.view; + +//import javax.swing.UIManager; +import java.awt.Color; +import java.awt.Dimension; +import misc.ScaledImage; + +import adecWatt.model.AdecWatt; +import adecWatt.model.Comp; +import adecWatt.model.Item; + +@SuppressWarnings ("serial") public class JComp extends JItem { + + // ======================================== + public Comp comp; + + protected boolean isLow; + protected ScaledImage scaledImage; + protected Dimension tile = ScaledImage.ONE_TILE; + //protected JLabel jLabel; + + public Item getItem () { return comp; } + public boolean isLow () { return isLow; } + public ScaledImage getScaledImage () { return scaledImage; } + + // ======================================== + public JComp (JWorkspaceView jWorkspaceView, Comp comp) { + super (jWorkspaceView, comp); + } + + // ======================================== + public void setItem (Item item) { + if (item == null) + return; + comp = (Comp) item; + scaledImage = comp.getIcon (); + setCurrentThetaDegree (comp.getThetaDegree ()); + updateLevel (); + setCurrentSize (); + setCurrentPos (); + } + + // ======================================== + public void setScale () { + tile = Comp.getTile (comp.getTileSize (), comp.getSize ()); + super.setScale (); + } + + // ======================================== + public void updateLevel () { + if (comp.getLevel () <= AdecWatt.lowLevel == isLow) + return; + isLow = ! isLow; + if (!isLow) { + scaledImage = comp.getIcon (); + return; + } + ScaledImage scaledLowImage = comp.getLowIcon (); + if (scaledLowImage != null) + scaledImage = scaledLowImage; + Color compColor = comp.getColor (); + if (compColor != null) + scaledImage = comp.getAdecWatt ().getIconDB ().getColoredScaledImages (scaledImage, compColor); + } + + // ======================================== + public void updateIcon () { + if (currentPos == null || currentSize == null) + return; + tile = Comp.getTile (comp.getTileSize (), currentSize); + updateLevel (); + super.updateIcon (); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JDefLabel.java b/src/java/adecWatt/view/JDefLabel.java new file mode 100644 index 0000000..f5e5311 --- /dev/null +++ b/src/java/adecWatt/view/JDefLabel.java @@ -0,0 +1,41 @@ +package adecWatt.view; + +import java.util.List; +import java.util.Vector; +import javax.swing.JPanel; +import javax.swing.JTextField; + +@SuppressWarnings ("serial") +public class JDefLabel extends JPanel { + + private Vector refList = new Vector (); + private Vector list = new Vector (); + private JTextField[] labels; + + public List getLabels () { + if (refList.size () < 1) + return null; + return refList; + } + + public JDefLabel (List multiLabel) { + if (multiLabel == null) + return; + refList = new Vector (multiLabel); + } + public void initLabels (int nbLabel) { + removeAll (); + labels = new JTextField[nbLabel]; + for (int i = 0; i < nbLabel; i++) { + String ref = refList != null && refList.size () > i ? refList.get (i) : null; + add (labels[i] = new JTextField (ref, 8)); + } + } + public void confirmLabels () { + refList.clear (); + if (labels == null) + return; + for (JTextField label : labels) + refList.add (label.getText ()); + } +} diff --git a/src/java/adecWatt/view/JDefPropTable.java b/src/java/adecWatt/view/JDefPropTable.java new file mode 100644 index 0000000..c4c48a9 --- /dev/null +++ b/src/java/adecWatt/view/JDefPropTable.java @@ -0,0 +1,409 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Hashtable; +import java.util.List; +import java.util.Vector; +import javax.swing.AbstractButton; +import javax.swing.DefaultCellEditor; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.event.ListSelectionEvent; +import javax.swing.table.AbstractTableModel; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; + +import misc.Bundle; +import misc.Util; + +import adecWatt.model.Editable; +import adecWatt.model.Permanent; +import adecWatt.model.Prop; +import adecWatt.model.Unit; + +@SuppressWarnings ("serial") public class JDefPropTable extends JPanel implements ActionListener { + // ======================================== + static public final String + actionUp = "Up", + actionDown = "Down", + actionSetEnum = "SetEnum", + actionAdd = "Add", + actionRemove = "Remove"; + + static public final List + leftDefPropActionsNames = Arrays.asList (actionUp, actionDown, actionSetEnum, actionAdd), + rightDefPropActionsNames = Arrays.asList (actionRemove); + + @SuppressWarnings ("unchecked") + static public final Hashtable actionsMethod = + Util.collectMethod (JDefPropTable.class, + leftDefPropActionsNames, rightDefPropActionsNames); + + public void actionPerformed (ActionEvent e) { + Util.actionPerformed (actionsMethod, e, this); + } + + // ======================================== + public class PropShadow { + String propName; + Prop prop; + Collection oldModifiers; + Collection parentModifiers; + ArrayList jModifiers; + JComboBox jType; + JStringSet jStringSet; + JDefLabel jDefLabel; + + public PropShadow (String propName, Prop prop, Collection parentModifiers) { + this.propName = propName; + this.prop = prop; + this.oldModifiers = prop == null ? null : prop.getModifiers (); + if (parentModifiers != null && parentModifiers.size () > 0) + this.parentModifiers = parentModifiers; + jType = Util.newEnum (Prop.PropTypeEnum.class, Prop.PropTypeEnum.Text); + if (prop != null) { + oldModifiers = prop.getModifiers (); + jType.setSelectedIndex (prop.getTypeToken ().ordinal ()); + } else { + try { + Unit parent = jTransform.getPermanent ().getDirectUnit (); + oldModifiers = parent.getPropModifiers (propName); + jType.setSelectedIndex (parent.getProp (propName).getTypeToken ().ordinal ()); + } catch (Exception e) { + } + } + jModifiers = JTransform.getJModifiers (modifiersSet, oldModifiers, jTransform.isLock (propName) && !admin); + jStringSet = new JStringSet (prop == null ? null : prop.enumChoice); + jDefLabel = new JDefLabel (prop == null ? null : prop.multiLabel); + } + public Collection getModifiers () { + Collection modifiers = JTransform.getModifiers (jModifiers, oldModifiers, admin, Permanent.PropHiddenModifiersSet); + if (modifiers == null || parentModifiers == null) + return modifiers; + if (Permanent.getModifiersString (parentModifiers).equals (Permanent.getModifiersString (modifiers))) + return null; + return modifiers; + } + } + + // ======================================== + private String[] tabExtraNames = { Bundle.getLabel ("Type"), Bundle.getLabel ("Property") }; + private JTransform jTransform; + private Vector objectData = new Vector (); + private JTable jTableObject; + private JScrollPane jScrollPane; + private JButton setEnum; + public JTextField jNewPropName = new JTextField (16); + private boolean admin; + private Collection modifiersSet; + private int modifiersSetSize; + private TableObjectModel dataObjectModel; + + public Vector getObjectData () { return objectData; } + //public TableObjectModel getDataObjectModel () { return dataObjectModel; } + + // ======================================== + public JDefPropTable (JTransform jTransform, Editable editable) { + super (new BorderLayout ()); + this.jTransform = jTransform; + admin = jTransform.isAdmin (); + modifiersSet = admin ? Permanent.PropModifiersSet : Permanent.PropNotHiddenModifiersSet; + modifiersSetSize = modifiersSet.size (); + dataObjectModel = new TableObjectModel (); + + for (Prop prop : editable.getOrderedOwnProps ()) { + if (editable.getParentProp (prop.getName ()) != null && + prop.enumChoice == null && (prop.getModifiers () == null || + prop.getModifiersString ().equals (Prop.getModifiersString + (editable.getParentPropModifiers (prop.getName ()))))) + continue; + // XXX 2 fois editable.getParentPropModifiers (prop.getName () + Collection parentModifiers = editable.getParentPropModifiers (prop.getName ()); + objectData.add (new PropShadow (prop.getName (), prop, parentModifiers)); + } + jTableObject = new JTable (dataObjectModel) { + public void valueChanged (ListSelectionEvent e) { + super.valueChanged (e); + int idx = jTableObject.getSelectedRow (); + updateSetEnum (idx < 0 ? null : objectData.elementAt (idx)); + } + }; + jTableObject.getTableHeader ().setReorderingAllowed (true); + jTableObject.setShowHorizontalLines (false); + jTableObject.setShowVerticalLines (false); + jTableObject.setRowSelectionAllowed (true); + jTableObject.setColumnSelectionAllowed (false); + // jTableObject.setIntercellSpacing(new Dimension(spacing, spacing)); + jTableObject.setRowHeight (24); + jTableObject.setSelectionMode (0); + //jTableObject.setAutoResizeMode (0); + int columnIdx = 0; + for (String modifier : modifiersSet) { + CheckIconEditorRenderer editor = new CheckIconEditorRenderer (modifier); + TableColumn tableColumn = jTableObject.getColumnModel ().getColumn (columnIdx); + tableColumn.setCellRenderer (editor); + tableColumn.setCellEditor (editor); + tableColumn.setMaxWidth (24); + columnIdx++; + } + EnumEditorRenderer enumEditor = new EnumEditorRenderer (Prop.PropTypeEnum.class); + TableColumn tableColumn = jTableObject.getColumnModel ().getColumn (columnIdx); + tableColumn.setCellRenderer (enumEditor); + tableColumn.setCellEditor (enumEditor); + + add (jScrollPane = Util.getJScrollPane (jTableObject), BorderLayout.CENTER); + dataObjectModel.revalidate (-1); + + // command panel + JPanel propCmdPanel = new JPanel (new BorderLayout ()); + JPanel leftPropCmdPanel = new JPanel (); + Util.addIconButton (leftDefPropActionsNames, this, leftPropCmdPanel); + propCmdPanel.add (leftPropCmdPanel, BorderLayout.WEST); + propCmdPanel.add (jNewPropName, BorderLayout.CENTER); + propCmdPanel.add (Util.newIconButton (actionRemove, this), BorderLayout.EAST); + add (propCmdPanel, BorderLayout.SOUTH); + + Hashtable buttons = Util.collectButtons (null, leftPropCmdPanel); + Util.collectButtons (buttons, propCmdPanel); + for (AbstractButton button : buttons.values ()) + Util.unBoxButton (button); + setEnum = (JButton) buttons.get (actionSetEnum); + updateSetEnum (null); + } + + // ======================================== + public class TableObjectModel extends AbstractTableModel { + public int getColumnCount () { + return modifiersSetSize+tabExtraNames.length; + } + public int getRowCount () { + return objectData.size (); + } + public Object getValueAt (int row, int column) { + if (row >= objectData.size ()) + return null; + PropShadow prop = objectData.elementAt (row); + if (column < modifiersSetSize) + return prop.jModifiers.get (column); + switch (column-modifiersSetSize) { + case 0: return prop.jType; + case 1: return prop.propName; + } + return null; + } + public String getColumnName (int column) { + if (column < modifiersSetSize) + return ""; //modifiersSet.get (column); + return tabExtraNames[column-modifiersSetSize]; + } + public Class getColumnClass (int column) { + if (column < modifiersSetSize) + return JCheckBox.class; + switch (column-modifiersSetSize) { + case 0: return JComboBox.class; + case 1: return String.class; + } + throw new IllegalArgumentException ("Column 0 >= "+column+" > "+(modifiersSetSize+2)); + } + public boolean isCellEditable (int row, int column) { + PropShadow prop = objectData.elementAt (row); + if (prop == null) + return false; + return !jTransform.isLock (prop.propName) || admin; + } + public void setValueAt (Object aValue, int row, int column) { + PropShadow prop = objectData.elementAt (row); + if (column < modifiersSetSize) { + prop.jModifiers.get (column).setSelected ((Boolean) aValue); + return; + } + switch (column-modifiersSetSize) { + case 0: + prop.jType.setSelectedItem ((String) aValue); + updateSetEnum (prop); + return; + case 1: + prop.propName = (String) aValue; + return; + } + } + public void revalidate (int idx) { + if (jTableObject == null) + return; + jTableObject.revalidate (); + jTableObject.getSelectionModel ().clearSelection (); + Dimension preferredSize = new Dimension (jTableObject.getPreferredSize ()); + preferredSize.height += 40; + jScrollPane.setPreferredSize (preferredSize); + Util.packWindow (jScrollPane); + if (idx < 0) + return; + jTableObject.getSelectionModel ().setLeadSelectionIndex (idx); + } + public boolean contains (String propName) { + for (PropShadow prop : objectData) + if (prop.propName.equals (propName)) + return true; + return false; + } + public void addRow (String propName) { + objectData.add (new PropShadow (propName, null, null)); + revalidate (objectData.size ()-1); + } + public void removeRow () { + int idx = jTableObject.getSelectedRow (); + if (idx < 0) + return; + Prop prop = objectData.get (idx).prop; + if (prop != null && prop.isLock () && !admin) + return; + objectData.remove (idx); + if (idx == objectData.size ()) + idx--; + revalidate (idx); + } + public void move (int delta) { + int idx = jTableObject.getSelectedRow (); + if (idx < 0) + return; + int mod = objectData.size (); + PropShadow old = objectData.remove (idx); + idx = (idx+delta+mod) % mod; + if (idx == objectData.size ()) + objectData.add (old); + else + objectData.add (idx, old); + revalidate (idx); + } + public void setEnum () { + int idx = jTableObject.getSelectedRow (); + if (idx < 0) + return; + int nbLabel = 0; + switch (Prop.PropTypeEnum.values () [objectData.elementAt (idx).jType.getSelectedIndex ()]) { + case Enum: + JStringSet jStringSet = objectData.elementAt (idx).jStringSet; + jStringSet.init (); + if (JOptionPane.showConfirmDialog (JDefPropTable.this, + jStringSet, + null, JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) + return; + jStringSet.confirm (); + return; + case Square: + case Geo: + nbLabel = 2; + break; + case Cube: + nbLabel = 3; + break; + default: + return; + } + JDefLabel jDefLabel = objectData.elementAt (idx).jDefLabel; + jDefLabel.initLabels (nbLabel); + if (JOptionPane.showConfirmDialog (JDefPropTable.this, + jDefLabel, + null, JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) + return; + jDefLabel.confirmLabels (); + } + } + + // ======================================== + public class EnumEditorRenderer extends DefaultCellEditor implements TableCellRenderer { + public EnumEditorRenderer (Class> enumClass) { + super (Util.newEnum (enumClass, null)); + } + @Override + public Component getTableCellEditorComponent (JTable table, Object value, boolean isSelected, int row, int column) { + ((JComboBox)editorComponent).setSelectedIndex (((JComboBox) value).getSelectedIndex ()); + return editorComponent; + } + public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + JComboBox jCombobox = objectData.elementAt (row).jType; + jCombobox.setBackground (isSelected ? table.getSelectionBackground () : table.getBackground ()); + jCombobox.setForeground (isSelected ? table.getSelectionForeground () : table.getForeground ()); + jCombobox.setSelectedItem (((JComboBox) value).getSelectedIndex ()); + return jCombobox; + } + }; + + // ======================================== + public class CheckIconEditorRenderer extends DefaultCellEditor implements TableCellRenderer { + public CheckIconEditorRenderer (String action) { + super (Util.newCheckIcon (Util.toCapital (action), null)); + } + @Override + public Component getTableCellEditorComponent (JTable table, Object value, boolean isSelected, int row, int column) { + ((JCheckBox)editorComponent).setSelected (((JCheckBox) value).isSelected ()); + return editorComponent; + } + public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + PropShadow prop = objectData.elementAt (row); + JCheckBox jCheckBox = prop.jModifiers.get (Util.viewToModel (table, column)); + if (jCheckBox == null) + return null; + jCheckBox.setBackground (isSelected ? table.getSelectionBackground () : table.getBackground ()); + jCheckBox.setForeground (isSelected ? table.getSelectionForeground () : table.getForeground ()); + jCheckBox.setSelected (((JCheckBox) value).isSelected ()); + return jCheckBox; + } + }; + + // ======================================== + public void actionUp () { + dataObjectModel.move (-1); + } + public void actionDown () { + dataObjectModel.move (+1); + } + public void actionSetEnum () { + dataObjectModel.setEnum (); + } + public void actionAdd () { + String propName = jNewPropName.getText (); + if (dataObjectModel.contains (propName)) + return; + dataObjectModel.addRow (propName); + jNewPropName.setText (""); + } + + // ======================================== + public void actionRemove () { + dataObjectModel.removeRow (); + } + public void updateSetEnum (PropShadow prop) { + boolean enable = false; + try { + switch (Prop.PropTypeEnum.values () [prop.jType.getSelectedIndex ()]) { + case Enum: + enable = true; + break; + case Square: + case Geo: + case Cube: + // XXX sauf si lock et pas admin + enable = true; + } + } catch (Exception e) { + } + setEnum.setEnabled (enable); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JDragUnit.java b/src/java/adecWatt/view/JDragUnit.java new file mode 100644 index 0000000..62c2782 --- /dev/null +++ b/src/java/adecWatt/view/JDragUnit.java @@ -0,0 +1,20 @@ +package adecWatt.view; + +import javax.swing.JLabel; + +import adecWatt.model.Unit; + +@SuppressWarnings ("serial") public class JDragUnit extends JLabel { + + // ======================================== + public Unit unit; + + public JDragUnit (Unit unit) { + this.unit = unit; + setIcon (unit.getIcon (16)); + setText (unit.toString ()); + setSize (getPreferredSize ()); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JEditable.java b/src/java/adecWatt/view/JEditable.java new file mode 100644 index 0000000..c50e1ca --- /dev/null +++ b/src/java/adecWatt/view/JEditable.java @@ -0,0 +1,354 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.SwingConstants; + +import misc.Bundle; +import misc.LocalizedUserLabel; +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCNL; + +import misc.ScaledImage; +import misc.Story; + +import adecWatt.model.AdecWatt; +import adecWatt.model.Editable; +import adecWatt.model.Prop; +import adecWatt.model.Unit; +import adecWatt.model.unit.Workspace; +import adecWatt.view.PrintWorkspace; +import adecWatt.view.jProp.JPropGeo; +import adecWatt.view.jProp.JPropIcon; +import static adecWatt.model.Permanent.PropTypeEnum; +import static adecWatt.model.Prop.DoubleMix; +import static adecWatt.model.Prop.PropIcon; +import static adecWatt.model.Prop.PropMix; + +public class JEditable implements SwingConstants { + + // ======================================== + static public final int previewSize = 800; + + private Unit storyUnit; + private HashSet> editableSet = new HashSet> (); + private boolean linguist; + private JTabbedPane jTabbedPane = new JTabbedPane (); + private JPanel jPropList = Util.getGridBagPanel (); + protected LocalizedUserLabel localizedUserLabel; + private ArrayList localizedTabName = new ArrayList (); + + public boolean isLinguist () { return linguist; } + public AdecWatt getAdecWatt () { return storyUnit.getAdecWatt (); } + public void addLocalizedUserLabel (LocalizedUserLabel localizedUserLabel) { localizedTabName.add (localizedUserLabel); } + + public String getId () { + if (editableSet.size () > 1) + return PropMix; + for (Editable editable : editableSet) + return editable.getId (); + return null; + } + public String getModelName () { + String result = null; + for (Editable editable : editableSet) + try { + String model = editable.getModel ().getLocalName (); + if (result == null) { + result = model; + continue; + } + if (!result.equals (model)) + return PropMix; + } catch (Exception e) { + return null; + } + return result; + } + public String getName () { + if (editableSet.size () > 1) + return PropMix; + for (Editable editable : editableSet) + return editable.getName (); + return null; + } + public List getOrderedPropsName () { + List result = null; + for (Editable editable : editableSet) { + List tmp = editable.getOrderedPropsName (); + if (tmp == null) + continue; + if (result == null) { + result = tmp; + continue; + } + result.retainAll (tmp); + } + return result; + } + public PropTypeEnum getTypeToken (String propName) { + for (Editable editable : editableSet) { + Prop type = editable.getProp (propName); + if (type != null) + return type.getTypeToken (); + } + return null; + } + public int getNbVal (String propName) { + for (Editable editable : editableSet) { + Prop type = editable.getProp (propName); + if (type != null) + return type.nbVal; + } + return 0; + } + public List getPropLabel (String propName) { + List result = null; + for (Editable editable : editableSet) { + List tmp = editable.getPropLabel (propName); + if (result == null) { + result = tmp; + continue; + } + if (result.equals (tmp)) + continue; + return null; + } + return result; + } + public Collection getPropEnumChoice (String propName) { + Collection result = null; + for (Editable editable : editableSet) { + Collection tmp = editable.getPropEnumChoice (propName); + if (result == null) { + result = tmp; + continue; + } + if (result.equals (tmp)) + continue; + return null; + } + return result; + } + public boolean getPropHidden (String propName) { + for (Editable editable : editableSet) + if (!editable.getPropHidden (propName)) + return false; + return true; + } + public boolean getPropLocalized (String propName) { + for (Editable editable : editableSet) + if (editable.getPropLocalized (propName)) + return true; + return false; + } + public boolean getPropHorizontalSpin (String propName, boolean skipFirst) { + for (Editable editable : editableSet) + if (editable.getPropHorizontalSpin (propName, skipFirst)) + return true; + return false; + } + public String getPropValue (String propName, boolean skipFirst) { + String result = null; + boolean nullExist = false; + for (Editable editable : editableSet) { + try { + String tmp = editable.getPropVal (propName, skipFirst).sValue; + if (tmp == null) { + if (result != null) + return PropMix; + nullExist = true; + continue; + } + if (result == null) { + if (nullExist) + return PropMix; + result = tmp; + continue; + } + if (result.equals (tmp)) + continue; + return PropMix; + } catch (Exception e) { + if (!skipFirst && editable.getProp (propName) == null) + return PropMix; + nullExist = true; + continue; + } + } + if (result != null && nullExist) + return PropMix; + return result; + } + public Double[] getPartialPropValue (String propName, int nbVal, boolean skipFirst) { + Double[] result = null; + for (Editable editable : editableSet) { + Double[] tmp = new Double [nbVal]; + editable.getPartialProp (propName, tmp, skipFirst); + if (result == null) { + result = tmp; + continue; + } + int nbMix = 0; + for (int i = 0; i < result.length; i++) { + if (result[i] == DoubleMix) { + nbMix++; + continue; + } + if (result[i] == tmp[i] || (result[i] != null && result[i].equals (tmp[i]))) + continue; + result[i] = DoubleMix; + nbMix++; + } + if (nbMix == result.length) + return result; + } + return result; + } + public ScaledImage getPreview () { + try { + return new ScaledImage (PrintWorkspace.getIcon ((Workspace) storyUnit, previewSize, true)); + } catch (Exception e) { + return null; + } + } + private JPropGeo firstGeo; + ArrayList allProps = new ArrayList (); + + public void setFirstGeo (JPropGeo firstGeo) { + if (this.firstGeo == null) + this.firstGeo = firstGeo; + } + + public void plotCity (double latitude, double longitude) { + if (firstGeo == null) + return; + firstGeo.setGeo (latitude, longitude); + } + public void toFront (Component c) { + jTabbedPane.setSelectedComponent (c); + } + + // ======================================== + public JEditable (List> editables) { + for (Editable editable : editables) { + Unit storyUnit = editable.getStoryUnit (); + if (this.storyUnit != null && storyUnit != this.storyUnit) + throw new IllegalArgumentException ("Can't managed heterogenous unit"); + this.storyUnit = storyUnit; + editableSet.add (editable); + } + if (storyUnit == null) + throw new IllegalArgumentException ("Can't managed no unit"); + linguist = getAdecWatt ().getUser ().isLinguist (); + } + public JPanel getDislay (boolean edit) { + JPanel jDisplay = new JPanel (new BorderLayout ()); + JPanel right = new JPanel (); + jDisplay.add (right, BorderLayout.EAST); + right.add (jPropList); + // XXX si edit ... + String editableId = getId (); + String modelName = getModelName (); + modelName = modelName == null || modelName == PropMix ? "" : (" ("+modelName+")"); + JLabel jLabelId = new JLabel ((editableId == PropMix ? Bundle.getMessage ("MixId") : editableId)+modelName); + jLabelId.setForeground (Color.GRAY); + Util.addComponent (jLabelId, jPropList, GBCNL); + JPropIcon jPropIcon = new JPropIcon (PropIcon, this); + String editableName = getName (); + JLabel jLabelName = null; + if (editableName == PropMix) + jLabelName = new JLabel (Bundle.getMessage ("MixName")); + else { + localizedUserLabel = new LocalizedUserLabel (editableName, storyUnit.isLocalized (), linguist); + jLabelName = localizedUserLabel.getJLabel (); + } + jLabelName.setHorizontalTextPosition (SwingConstants.RIGHT); + // XXX si line autre icon + allProps.add (jPropIcon); + Util.addComponent (jPropIcon.getMainIcon (edit), jPropList, GBC); + Util.addComponent (jLabelName, jPropList, GBCNL); + for (String propName : getOrderedPropsName ()) + try { + if (PropIcon.equals (propName)) + continue; + JProp jProp = JProp.getJProp (propName, this); + allProps.add (jProp); + jProp.display (edit, jPropList, jTabbedPane); + } catch (Exception e) { + e.printStackTrace (); + } + if (jTabbedPane.getTabCount () > 0) + jDisplay.add (jTabbedPane, BorderLayout.CENTER); + if (linguist) + jTabbedPane.addMouseListener (new MouseAdapter () { + public void mousePressed (MouseEvent e) { + int idx = jTabbedPane.indexAtLocation (e.getX (), e.getY ()); + if (idx < 0) + return; + LocalizedUserLabel localizedUserLabel = localizedTabName.get (idx); + localizedUserLabel.mousePressed (e); + jTabbedPane.setTitleAt (idx, localizedUserLabel.getCurrentLabel ()); + } + }); + return jDisplay; + } + + // ======================================== + public boolean valideChange () { + // if (!jNewPropName.getText ().isEmpty ()) + // return false; + return true; + } + + public void confirmBundle () { + if (!getAdecWatt ().getUser ().isLinguist ()) + return; + if (localizedUserLabel != null) { + String newLabel = localizedUserLabel.getNewLabel (); + if (newLabel != null) + Bundle.setUser (JProp.AdecWattUser, getName (), newLabel); + } + for (JProp jProp : allProps) + jProp.confirmBundle (); + Bundle.save (JProp.AdecWattUser); + } + + public void updateStoryView () { + for (Editable editable : editableSet) + editable.updateView (); + } + public void confirmChange () { + // XXX revoir code avant 1/10/16 storyUnit.getLocalName () + // start story + Story.Commands commands = storyUnit.story.new Commands (Editable.StoryEdit) { + public void display () { updateStoryView (); } + }; + for (Editable editable : editableSet) { + ArrayList changeProps = new ArrayList (); + for (JProp jProp : allProps) { + String propName = jProp.getPropName (); + // props = {type, parent, own, last}; + Prop [] props = new Prop [] {editable.getProp (propName), editable.getParentPropVal (propName), + editable.getOwnProp (propName), null}; + jProp.getChange (props); + changeProps.add (props); + } + editable.storyChange (commands, changeProps); + } + storyUnit.story.add (commands); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JItem.java b/src/java/adecWatt/view/JItem.java new file mode 100644 index 0000000..ede6a6b --- /dev/null +++ b/src/java/adecWatt/view/JItem.java @@ -0,0 +1,172 @@ +package adecWatt.view; + +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Point; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.geom.Point2D; +import java.awt.image.BufferedImage; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; + +import misc.DimensionDouble; +import misc.Log; + +import adecWatt.model.Comp; +import adecWatt.model.Item; +import adecWatt.model.Segm; + +@SuppressWarnings ("serial") abstract public class JItem extends JLabel { + + // ======================================== + protected ItemMouseAdapter itemMouseAdapter = new ItemMouseAdapter (); + protected JWorkspaceView jWorkspaceView; + protected double currentThetaDegree; + protected Point2D.Double currentPos; + protected DimensionDouble currentSize; + protected double [] currentBounds = null; + + abstract public Item getItem (); + abstract public void setItem (Item item); + + public JWorkspaceView getJWorkspaceView () { return jWorkspaceView; } + public Point2D.Double getCurrentPos () { return currentPos; } + public DimensionDouble getCurrentSize () { return currentSize; } + public double getCurrentThetaDegree () { return currentThetaDegree; } + public double [] getCurrentBounds () { return currentBounds; } + + // ======================================== + static public JItem getNewJItem (JWorkspaceView jWorkspaceView, Item item) { + if (item instanceof Comp) + return new JComp (jWorkspaceView, (Comp) item); + if (item instanceof Segm) + return new JSegm (jWorkspaceView, (Segm) item); + throw new IllegalArgumentException ("Bad item type ("+item+")!"); + } + + public JItem (JWorkspaceView jWorkspaceView, Item item) { + try { + this.jWorkspaceView = jWorkspaceView; + setItem (item); + setCurrentSize (); + updateIcon (); + addMouseListener (itemMouseAdapter); + addMouseMotionListener (itemMouseAdapter); + } catch (Exception e) { + Log.keepLastException ("JItem ("+getItem ()+") :", e); + } + } + + // ======================================== + public class ItemMouseAdapter extends MouseAdapter { + public void mouseClicked (MouseEvent e) { + jWorkspaceView.mouseClicked (SwingUtilities.convertMouseEvent (JItem.this, e, jWorkspaceView)); + } + public void mousePressed (MouseEvent e) { + MouseEvent ec = SwingUtilities.convertMouseEvent (JItem.this, e, jWorkspaceView); + jWorkspaceView.mousePressed (ec); + } + public void mouseReleased (MouseEvent e) { + jWorkspaceView.mouseReleased (SwingUtilities.convertMouseEvent (JItem.this, e, jWorkspaceView)); + } + public void mouseDragged (MouseEvent e) { + jWorkspaceView.mouseDragged (SwingUtilities.convertMouseEvent (JItem.this, e, jWorkspaceView)); + } + }; + + // ======================================== + public void setCurrentPos (Point2D.Double currentPos) { + this.currentPos = currentPos; + updateBounds (); + updateLocation (); + } + public void setCurrentSize (DimensionDouble size) { + currentSize = size; + updateBounds (); + updateIcon (); + } + public void setCurrentThetaDegree (double currentThetaDegree) { + this.currentThetaDegree = currentThetaDegree; + updateBounds (); + updateIcon (); + } + public void setCurrentSize (Point2D.Double pos, DimensionDouble size) { + setCurrentGeo (pos, getItem ().getThetaDegree (), size); + } + public void setCurrentGeoDelta (Point2D.Double pos, double deltaTheta, DimensionDouble size) { + setCurrentGeo (pos, Math.toDegrees (Math.toRadians (currentThetaDegree)+deltaTheta), size); + } + private void setCurrentGeo (Point2D.Double pos, double thetaDegree, DimensionDouble size) { + currentPos = pos; + currentSize = size; + currentThetaDegree = thetaDegree; + updateBounds (); + updateIcon (); + } + + // ======================================== + public void setCurrentPos () { + setCurrentPos (getItem ().getPos ()); + } + public void setCurrentSize () { + setCurrentSize (getItem ().getSize ()); + } + public void setCurrentThetaDegree () { + setCurrentThetaDegree (getItem ().getThetaDegree ()); + } + public void setScale () { + updateIcon (); + } + + // ======================================== + public void updateLocation () { + Point pos = jWorkspaceView.scaleModelToView (currentPos); + pos.x -= getWidth ()/2; + pos.y -= getHeight ()/2; + setLocation (pos); + jWorkspaceView.setLayer (this, jWorkspaceView.levelModelToView (getItem ().getLevel ())); + } + + // ======================================== + public void cap (Point relPos) { + Dimension size = getSize (); + setCurrentThetaDegree (Math.toDegrees (Math.PI/2+Math.atan2 (relPos.y-size.height/2, relPos.x-size.width/2))); + } + + public void rotation (MouseEvent e) { + cap (e.getPoint ()); + } + + public void dragItem (DimensionDouble delta) { + setCurrentPos (new Point2D.Double (currentPos.x+delta.width, currentPos.y+delta.height)); + } + + // ======================================== + public void updateIcon () { + if (currentPos == null || currentSize == null) + return; + double scale = jWorkspaceView.getScale (); + Item item = getItem (); + DimensionDouble size = Item.getRotSize (new DimensionDouble (currentSize.width*scale, currentSize.height*scale), currentThetaDegree); + BufferedImage image = new BufferedImage (Math.max (1, (int) size.width), Math.max (1, (int) size.height), BufferedImage.TYPE_INT_ARGB); + + DimensionDouble currentRotSize = Item.getRotSize (currentSize, currentThetaDegree); + Point2D.Double halfCurrentRotSize = new Point2D.Double (currentRotSize.width/2, currentRotSize.height/2); + + Graphics2D printGraphics = (Graphics2D) image.getGraphics (); + printGraphics.scale (scale, scale); + item.print (printGraphics, jWorkspaceView.getWorkspace (), halfCurrentRotSize, currentSize, currentThetaDegree); + setIcon (new ImageIcon (image)); + setSize (getPreferredSize ()); + updateLocation (); + } + public void updateBounds () { + if (currentPos == null || currentSize == null) + return; + currentBounds = Item.getBounds (currentPos, currentSize, currentThetaDegree); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JItemHandler.java b/src/java/adecWatt/view/JItemHandler.java new file mode 100644 index 0000000..9b72fdb --- /dev/null +++ b/src/java/adecWatt/view/JItemHandler.java @@ -0,0 +1,168 @@ +package adecWatt.view; + +import java.awt.Point; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; + +import misc.Util; +import misc.DimensionDouble; + +public class JItemHandler { + + // ======================================== + static public final ImageIcon handlerImage = Util.loadActionIcon ("handler"); + + // ======================================== + public JWorkspaceView jWorkspaceView; + public JLabel jSelectionPane; + public JItem jItem; + public HandlerSet corners, sides; + public boolean lineSelection; + + // ======================================== + public JItemHandler (JWorkspaceView jWorkspaceView, JLabel jSelectionPane, JItem jItem, boolean lineSelection) { + this.jWorkspaceView = jWorkspaceView; + this.jSelectionPane = jSelectionPane; + this.jItem = jItem; + this.lineSelection = lineSelection; + if (!lineSelection) + corners = new HandlerSet (true); + sides = new HandlerSet (false); + } + public void setCurrentBounds (double[] bounds) { + if (corners != null) + corners.setCurrentBounds (bounds); + sides.setCurrentBounds (bounds); + } + + Point mousePosOnItem; + int selectedIndex; + double oposedX, oposedY; + DimensionDouble currentSize; + double currentDiagonalLength; + + // ======================================== + class HandlerSet { + public boolean cornerSelection; + public double[] x = new double [4], y = new double [4]; + public JLabel[] handlers = new JLabel [4]; + + public HandlerSet (boolean cornerSelection) { + this.cornerSelection = cornerSelection; + for (int i = 0; i < 4; i++) { + if (i%2 != 0 && lineSelection) + continue; + final JLabel handler = new JLabel (handlerImage); + final int index = i; + handlers [i] = handler; + handler.setSize (8, 8); + MouseAdapter mouseAdapter = new MouseAdapter () { + // identique à JItem + public void mousePressed (MouseEvent e) { + if (SwingUtilities.isRightMouseButton (e)) { + // XXX ??? collectif ? + new JItemPopup (jWorkspaceView, jItem.getItem (), SwingUtilities.convertPoint (handler, e.getPoint (), jWorkspaceView)); + return; + } + selectedIndex = index; + oposedX = x[(index+2)%4]; + oposedY = y[(index+2)%4]; + currentSize = jItem.getCurrentSize (); + currentDiagonalLength = Math.sqrt (currentSize.width*currentSize.width + currentSize.height*currentSize.height); + mousePosOnItem = e.getPoint (); + } + public void mouseDragged (MouseEvent e) { + if (jWorkspaceView.notEditable ()) + return; + dragHandler (e); + jWorkspaceView.updateSelectionLayer (); + } + public void mouseReleased (MouseEvent e) { + if (jWorkspaceView.notEditable ()) + return; + jWorkspaceView.storyRotResizeItem (jItem); + } + }; + handler.addMouseListener (mouseAdapter); + handler.addMouseMotionListener (mouseAdapter); + } + } + + // ======================================== + public void setCurrentBounds (double[] bounds) { + if (cornerSelection) + for (int i = 0, j = 1, k = 0; k < 4; i += 2, j += 2, k++) { + x[k] = bounds[i]; + y[k] = bounds[j]; + } + else + for (int i = 8, j = 9, k = 0; k < 4; i += 2, j += 2, k++) { + x[k] = bounds[i]; + y[k] = bounds[j]; + } + double scale = jWorkspaceView.getScale (); + for (int k = 0; k < 4; k++) { + JLabel handler = handlers [k]; + if (handler == null) + continue; + handler.setLocation ((int) (x [k]*scale-4), (int) (y [k]*scale-4)); + jWorkspaceView.recordJLabel (handler); + } + } + + // ======================================== + public void dragHandler (MouseEvent e) { + double scale = jWorkspaceView.getScale (); + Point newPos = e.getPoint (); + double newX = x[selectedIndex]+(newPos.x-mousePosOnItem.x)/scale; + double newY = y[selectedIndex]+(newPos.y-mousePosOnItem.y)/scale; + Point2D.Double closePos = new Point2D.Double (newX, newY); + jWorkspaceView.setSelectedBound (e.isControlDown () ? null : jWorkspaceView.getWorkspace ().getMagnetPoint (closePos, JWorkspaceView.onGrid (closePos), JWorkspaceView.closePixelsBounds/scale)); + Point2D.Double newItemCenter = new Point2D.Double ((oposedX+closePos.x)/2, (oposedY+closePos.y)/2); + + DimensionDouble newItemSize = null; + if (e.isShiftDown ()) { + double currentTheta = Math.toRadians (jItem.getCurrentThetaDegree ()); + double[] reverse = new double [] {closePos.x-newItemCenter.x, closePos.y-newItemCenter.y}; + AffineTransform.getRotateInstance (-currentTheta).transform (reverse, 0, reverse, 0, 1); + newItemSize = new DimensionDouble (Math.max (1/scale, Math.abs (reverse[0]*2)), + Math.max (1/scale, Math.abs (reverse[1]*2))); + if (!cornerSelection) { + if (selectedIndex%2 == 0) { + newItemSize.height = currentSize.height; + reverse [1] = 0; + } else { + newItemSize.width = currentSize.width; + reverse [0] = 0; + } + AffineTransform.getRotateInstance (currentTheta).transform (reverse, 0, reverse, 0, 1); + newItemCenter.x = oposedX+reverse [0]; + newItemCenter.y = oposedY+reverse [1]; + } + jItem.setCurrentSize (newItemCenter, newItemSize); + return; + } + if (cornerSelection) { + double rate = Math.sqrt ((closePos.x-oposedX)*(closePos.x-oposedX) + + (closePos.y-oposedY)*(closePos.y-oposedY)) / currentDiagonalLength; + newItemSize = new DimensionDouble (currentSize.width*rate, currentSize.height*rate); + } else { + double length = Math.sqrt ((closePos.x-oposedX)*(closePos.x-oposedX) + (closePos.y-oposedY)*(closePos.y-oposedY)); + if (selectedIndex%2 == 0) + newItemSize = new DimensionDouble (length, currentSize.height); + else + newItemSize = new DimensionDouble (currentSize.width, length); + } + double deltaTheta = Math.atan2 (closePos.y-oposedY, closePos.x-oposedX) - + Math.atan2 (y[selectedIndex]-oposedY, x[selectedIndex]-oposedX); + jItem.setCurrentGeoDelta (newItemCenter, deltaTheta, newItemSize); + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JItemPopup.java b/src/java/adecWatt/view/JItemPopup.java new file mode 100644 index 0000000..5dc8e7c --- /dev/null +++ b/src/java/adecWatt/view/JItemPopup.java @@ -0,0 +1,80 @@ +package adecWatt.view; + +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Collection; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JPopupMenu; + +import misc.Util; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.Item; +import adecWatt.model.AdecWatt; +import adecWatt.model.User; + +@SuppressWarnings ("serial") public class JItemPopup extends JPopupMenu { + + private Item getLocal (JWorkspaceView jWorkspaceView, Item item) { + return jWorkspaceView.workspace.getCloseEmbedded (item); + } + private List getLocal2 (JWorkspaceView jWorkspaceView, Collection selectedItems) { + ArrayList localSelectedItems = new ArrayList (selectedItems.size ()); + for (Item item : selectedItems) + localSelectedItems.add (jWorkspaceView.workspace.getCloseEmbedded (item)); + return localSelectedItems; + } + + // ======================================== + public JItemPopup (final JWorkspaceView jWorkspaceView, final Item item, final Point pos) { + final AdecWatt adecWatt = jWorkspaceView.getAdecWatt (); + Item localItem = jWorkspaceView.workspace.getLocalEmbedded (item.getId ()); // XXX a supprimer + User user = adecWatt.getUser (); + boolean editor = user.isEditor (jWorkspaceView.getWorkspace ()); + + Util.addMenuItem (AdecWattManager.actionDisplayItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionDisplayItem, jWorkspaceView.getSelectedItems ()); + } + }, this); + if (editor) { + Util.addMenuItem (AdecWattManager.actionModifyItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionModifyItem, getLocal2 (jWorkspaceView, jWorkspaceView.getSelectedItems ())); + } + }, this); + Util.addMenuItem (AdecWattManager.actionHideItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionHideShowItem, jWorkspaceView, jWorkspaceView.getSelectedItems (), true); + } + }, this); + Util.addMenuItem (AdecWattManager.actionShowItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionHideShowItem, jWorkspaceView, jWorkspaceView.getSelectedItems (), false); + } + }, this); + Util.addMenuItem (AdecWattManager.actionTransformItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionTransformItem, getLocal (jWorkspaceView, item)); + } + }, this); + Util.addMenuItem (AdecWattManager.actionCopyItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionCopyItem, jWorkspaceView, jWorkspaceView.getSelectedItems (), pos); + } + }, this); + // XXX a mettre dans le fond + if (localItem != null) + Util.addMenuItem (AdecWattManager.actionRemoveItem, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionRemoveItem, jWorkspaceView, jWorkspaceView.getSelectedItems ()); + } + }, this); + } + show (jWorkspaceView, pos.x, pos.y); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JLightplotView.java b/src/java/adecWatt/view/JLightplotView.java new file mode 100644 index 0000000..cae799b --- /dev/null +++ b/src/java/adecWatt/view/JLightplotView.java @@ -0,0 +1,39 @@ +package adecWatt.view; + +import adecWatt.model.Unit; +import adecWatt.model.unit.Building; +import adecWatt.model.unit.Lightplot; + +@SuppressWarnings ("serial") public class JLightplotView extends JWorkspaceView { + + protected Building building; + + // ======================================== + public JLightplotView (JAdecWatt jAdecWatt, Lightplot lightplot) { + super (jAdecWatt, lightplot); + changeBuilding (); + workspace.stateNotifier.addUpdateObserver (this, Unit.BroadcastChangeBuilding); + // XXX updateConnectionLayer (); + } + + void changeBuilding () { + if (building != null) + building.stateNotifier.removeObserver (this); + building = workspace.getBuilding (); + // XXX repaint + building.stateNotifier.addMsgObserver (this, + Unit.BroadcastNewItem, Unit.BroadcastRemoveItem, + Unit.BroadcastChangePos, Unit.BroadcastChangeRot); + } + + // ======================================== + public void updateChangeBuilding () { + changeBuilding (); + realSize = workspace.getRealSize (); + //scaledBlueprint = workspace.getBlueprint (); + //setBlueprint (); + setScale (scale); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JPatch.java b/src/java/adecWatt/view/JPatch.java new file mode 100644 index 0000000..d88d5f7 --- /dev/null +++ b/src/java/adecWatt/view/JPatch.java @@ -0,0 +1,98 @@ +package adecWatt.view; + +import java.awt.Component; +import java.awt.GridLayout; +import javax.swing.BorderFactory; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingConstants; +import javax.swing.border.Border; +import javax.swing.border.EtchedBorder; + +import misc.Bundle; +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCNL; + +import adecWatt.model.Circuits; +import adecWatt.model.Patch; + +@SuppressWarnings ("serial") +public class JPatch extends JPanel implements SwingConstants { + + static public Border groupBorder = BorderFactory.createEtchedBorder (EtchedBorder.LOWERED); + + static public class JInfo extends JPanel { + public JInfo (Component line1, Component line2, Component line3) { + super (new GridLayout (3, 1)); + add (line1); + add (line2); + add (line3); + setBorder (groupBorder); + } + public JInfo (Component line1, Component line2) { + super (new GridLayout (2, 1)); + add (line1); + add (line2); + setBorder (groupBorder); + } + public JInfo (Component line) { + super (new GridLayout (1, 1)); + add (line); + setBorder (groupBorder); + } + } + + public JPatch (Patch patch) { + JPanel content = Util.getGridBagPanel (); + add (Util.getJScrollPane (content)); + + Util.addComponent (new JInfo (Util.newLabel ("Circuit", RIGHT), + Util.newLabel ("Line", RIGHT), + Util.newLabel ("Watt", RIGHT)), content, GBC); + if (patch != null) + for (String circuitName : patch.circuitLines.keySet ()) { + String lineNames = "", sep = ""; + for (String name : patch.circuitLines.get (circuitName)) { + lineNames += sep+name; + sep = ", "; + } + Util.addComponent (new JInfo (new JLabel (circuitName, CENTER), + new JLabel (lineNames, CENTER), + new JLabel (Util.toNumIn10Units (patch.circuitConsumption.get (circuitName)), CENTER)), content, GBC); + } + Util.addComponent (new JLabel (), content, GBCNL); + Util.addComponent (new JInfo (Util.newLabel ("Line", RIGHT), + Util.newLabel ("Circuit", RIGHT), + Util.newLabel ("Watt", RIGHT)), content, GBC); + if (patch != null) + for (String lineName : patch.getLineKeys ()) { + String circuitName = patch.lineCircuit.get (lineName); + JLabel consumption = null; + if (Circuits.SHORTCUT == circuitName) { + circuitName = Bundle.getLabel (Circuits.SHORTCUT); + consumption = new JLabel (""); + } else + consumption = new JLabel (Util.toNumIn10Units (patch.lineConsumption.get (lineName)), CENTER); + Util.addComponent (new JInfo (new JLabel (lineName, CENTER), + new JLabel (circuitName, CENTER), + consumption), content, GBC); + } + Util.addComponent (new JLabel (), content, GBCNL); + Util.addComponent (new JInfo (Util.newLabel (Circuits.UNPLUG, RIGHT)), content, GBC); + if (patch != null) + for (String circuitName : patch.unplug) + Util.addComponent (new JInfo (new JLabel (circuitName, CENTER)), content, GBC); + Util.addComponent (new JLabel (), content, GBCNL); + Util.addComponent (new JInfo (Util.newLabel (Circuits.SHORTCUT, RIGHT)), content, GBC); + if (patch != null) + for (String circuitName : patch.shortcut) + Util.addComponent (new JInfo (new JLabel (circuitName, CENTER)), content, GBC); + Util.addComponent (new JLabel (), content, GBCNL); + Util.addComponent (new JInfo (Util.newLabel (Circuits.CIRCUITLESS, RIGHT)), content, GBC); + if (patch != null) + for (String compName : patch.circuitless) + Util.addComponent (new JInfo (new JLabel (compName, CENTER)), content, GBC); + Util.addComponent (new JLabel (), content, GBCNL); + } +} diff --git a/src/java/adecWatt/view/JPreviewImp.java b/src/java/adecWatt/view/JPreviewImp.java new file mode 100644 index 0000000..180ea83 --- /dev/null +++ b/src/java/adecWatt/view/JPreviewImp.java @@ -0,0 +1,242 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import javax.swing.BoxLayout; +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import javax.swing.JSplitPane; + +import misc.DimensionDouble; +import misc.Util; + +// sauver dans une liste de preview + +@SuppressWarnings ("serial") public class JPreviewImp extends JPanel implements ActionListener { + + // ======================================== + static public final String + actionPortrait = "Portrait", + actionLandscape = "Landscape", + actionAddZone = "AddZone", + actionAddPoster = "AddPoster", + actionAddPatch = "AddPatch", + actionRemoveZone = "RemoveZone", + actionTurnLeft = "TurnLeft", + actionTurnRight = "TurnRight", + actionCircuit = "Circuit"; + + static public final List + previewButtonsNames = Arrays.asList (//actionPortrait, actionLandscape, + actionAddZone, actionAddPoster, actionAddPatch, actionRemoveZone, + actionTurnLeft, actionTurnRight); + static public final List + previewActionsNames = Arrays.asList (//actionPortrait, actionLandscape, + actionAddZone, actionAddPoster, actionAddPatch, actionRemoveZone, + actionTurnLeft, actionTurnRight, actionCircuit); + @SuppressWarnings ("unchecked") + static public final Hashtable actionsMethod = + Util.collectMethod (JPreviewImp.class, previewActionsNames); + + public void actionPerformed (ActionEvent e) { + Util.actionPerformed (actionsMethod, e, this); + } + public void actionPortrait () { + setLandscape (false); + } + public void actionLandscape () { + setLandscape (true); + } + public void actionAddZone () { + Color color = getColor (); + JZones.Zone selectedZone = preview.getSelectedZone (); + JZones.Zone newZone = (selectedZone != null && selectedZone.getPair () != null) ? + workspace.addZone (color, selectedZone.getPair ().getRectangle ()) : + workspace.addZone (color); + preview.addZone (newZone, null); + preview.selectLastZone (); + actionCircuit (); + } + public void actionAddPoster () { + if (posterImage == null) + return; + Color color = getColor (); + preview.addZone (color, posterImage); + preview.selectLastZone (); + } + public void actionAddPatch () { + if (patchImage == null) + return; + Color color = getColor (); + preview.addZone (color, patchImage); + preview.selectLastZone (); + } + public void actionRemoveZone () { + JZones.Zone selectedZone = preview.getSelectedZone (); + if (selectedZone == null) + return; + preview.removeZone (selectedZone); + workspace.removeZone (selectedZone.getPair ()); + } + public void actionTurnLeft () { + preview.turnZoneLeft (); + } + public void actionTurnRight () { + preview.turnZoneRight (); + } + public void actionCircuit () { + JZones.Zone selectedZone = preview.getSelectedZone (); + if (selectedZone == null || !selectedZone.hasPair () || workspaceImageNoCircuit == null) + return; + boolean printCircuit = jCheckBoxCircuit.isSelected (); + if (printCircuit) { + noPrintCircuit.remove (selectedZone); + selectedZone.setImage (workspaceImage); + } else { + noPrintCircuit.add (selectedZone); + selectedZone.setImage (workspaceImageNoCircuit); + } + } + public void updateCircuit (JZones.Zone selectedZone) { + if (selectedZone == null || !selectedZone.hasPair () || workspaceImageNoCircuit == null) + return; + jCheckBoxCircuit.setSelected (!noPrintCircuit.contains (selectedZone)); + } + + // ======================================== + JSplitPane jSplitPane; + JZones workspace, preview; + HashSet noPrintCircuit = new HashSet (); + JCheckBox jCheckBoxCircuit; + BufferedImage workspaceImage, workspaceImageNoCircuit, posterImage, patchImage; + + public JPreviewImp (DimensionDouble workspaceSize, DimensionDouble pageSize, + BufferedImage workspaceImage, BufferedImage workspaceImageNoCircuit, + BufferedImage posterImage, BufferedImage patchImage, + int maxSide) { + this (new JZones (workspaceSize, maxSide), new JZones (pageSize, maxSide)); + this.workspaceImage = workspaceImage; + this.workspaceImageNoCircuit = workspaceImageNoCircuit; + this.posterImage = posterImage; + this.patchImage = patchImage; + workspace.setBackground (workspaceImage); + } + public JPreviewImp (DimensionDouble workspaceSize, DimensionDouble pageSize, int maxSide) { + this (new JZones (pageSize, maxSide), new JZones (workspaceSize, maxSide)); + } + private JPreviewImp (JZones workspace, JZones preview) { + super (new BorderLayout ()); + this.preview = preview; + this.workspace = workspace; + preview.setCornerSelection (false); + preview.setCreateZone (false); + jSplitPane = Util.getJSplitPane (JSplitPane.HORIZONTAL_SPLIT, getJZonesFrame (workspace), getJZonesFrame (preview)); + add (jSplitPane, BorderLayout.CENTER); + workspace.stateNotifier.addUpdateObserver (this, JZones.BroadcastSelectedLocationChange, JZones.BroadcastSelectedRateChange); + workspace.stateNotifier.addMsgObserver (this, JZones.BroadcastCreateZone, JZones.BroadcastSelectedChange); + preview.stateNotifier.addMsgObserver (this, JZones.BroadcastSelectedChange); + JPanel menuBar = new JPanel (); + menuBar.setLayout (new BoxLayout (menuBar, BoxLayout.X_AXIS)); + Util.addIconButton (previewButtonsNames, this, menuBar); + jCheckBoxCircuit = Util.newCheckIcon (actionCircuit, this, true); + menuBar.add (jCheckBoxCircuit); + Util.unBoxButton (menuBar); + add (menuBar, BorderLayout.NORTH); + } + public JPanel getJZonesFrame (JZones jZones) { + JPanel jPanel = new JPanel (new BorderLayout ()); + jPanel.add (Util.getJScrollPane (jZones), BorderLayout.CENTER); + jPanel.add (jZones.new SizeSlider (), BorderLayout.SOUTH); + return jPanel; + } + + static public final Color [] rainbow; + static { + int nbColors = 7; + rainbow = new Color[nbColors]; + for (int i = 0; i < nbColors; i++) + rainbow[i] = new Color (Color.HSBtoRGB (((float)i)/nbColors, 1, 1)); + } + int rainbowIndex = -1; + public Color getColor () { + rainbowIndex = (rainbowIndex+1)%rainbow.length; + return rainbow [rainbowIndex]; + } + public void displayCreateZone (Object... objects) { + if (objects[0] == null) + return; + Rectangle2D.Double area = (Rectangle2D.Double) objects[0]; + Color color = getColor (); + preview.addZone (workspace.addZone (color, area), null); + preview.selectLastZone (); + actionCircuit (); + } + public void displaySelectedChange (Object... objects) { + if (objects[0] == null) + return; + JZones src = (JZones) objects[0]; + JZones.Zone selectZone = (JZones.Zone) objects[1]; + if (selectZone == null) { + JZones dst = src == workspace ? preview : workspace; + dst.selectZoneQuiet (null); + return; + } + if (src == preview) { + updateCircuit (selectZone); + workspace.selectZoneQuiet (selectZone.getPair ()); + return; + } + JZones.Zone pair = preview.findPair (selectZone); + updateCircuit (pair); + preview.selectZoneQuiet (pair); + } + public void updateSelectedRateChange () { + JZones.Zone selectedZone = preview.getSelectedZone (); + if (selectedZone == null) + return; + selectedZone.updatePairRate (); + } + public void updateSelectedLocationChange () { + preview.repaint (); + } + public void setLandscape (boolean landscape) { + double currentPrevRate = preview.getScale (); + double currentWorkRate = workspace.getScale (); + if (!preview.setLandscape (landscape)) + return; + preview.resetScale (); + workspace.resetScale (); + //jSplitPane.resetToPreferredSizes (); + Util.packWindow (this); + preview.setScale (currentPrevRate); + workspace.setScale (currentWorkRate); + } + + // ======================================== + static public void main (String[] args) { + try { + misc.Config.setPWD (JPreviewImp.class); + BufferedImage workspaceImage = javax.imageio.ImageIO.read (new java.io.File ("/home/felix/perso/adecWatt/ws/exemplePrint.png")); + + DimensionDouble pageSize = new DimensionDouble (21, 29.7); + DimensionDouble workspaceSize = new DimensionDouble (25, 34); + int maxSide = 200; + JPreviewImp jPreviewImp = new JPreviewImp (workspaceSize, pageSize, workspaceImage, null, workspaceImage, workspaceImage, maxSide); + Util.newJFrame ("test", jPreviewImp, true); + jPreviewImp.actionAddZone (); + } catch (Exception e) { + e.printStackTrace (); + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JProp.java b/src/java/adecWatt/view/JProp.java new file mode 100644 index 0000000..5dfda31 --- /dev/null +++ b/src/java/adecWatt/view/JProp.java @@ -0,0 +1,263 @@ +package adecWatt.view; + +import java.awt.Color; +import java.awt.Font; +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collection; +import java.util.List; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JTabbedPane; +import javax.swing.SwingUtilities; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.Document; +import javax.swing.text.JTextComponent; + +import misc.Bundle; +import misc.LocalizedUserLabel; +import misc.Util; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.AdecWatt; +import adecWatt.model.ImageDB; +import adecWatt.model.PermanentDB; +import adecWatt.model.Prop; +import adecWatt.view.jProp.JPropText; +import static adecWatt.model.Permanent.PropTypeEnum; +import static adecWatt.model.Prop.PropMix; + +public abstract class JProp { + + // ======================================== + static public final String + AdecWattUser = "AdecWattUser"; + + public final static int defaultImageWidth = 256; + public final static int defaultImageHeight = 512; + + static public Color + textFgColor = Color.black, + textBgColor = Color.white, + noValueFgColor = Color.darkGray, + noValueBgColor = Color.lightGray, + badValueColor = Color.red; + + public Border + defaultBorder = null, + badValueBorder = new LineBorder (badValueColor); + + static protected JLabel getMsgLabel (String msg) { + JLabel unknown = new JLabel (msg); + unknown.setForeground (noValueFgColor); + unknown.setBackground (noValueBgColor); + unknown.setOpaque (true); + return unknown; + } + static public JLabel getUnknownLabel () { return getMsgLabel ("?"); } + static public JLabel getEmptyLabel () { return getMsgLabel ("_"); } + + // ======================================== + static public JProp getJProp (String propName, JEditable jEditable) { + PropTypeEnum type = jEditable.getTypeToken (propName); + try { + // find class adecWatt.view.jProp.JProp<> (avec TYPE = type.getTypeToken ()) + return (JProp) + ClassLoader.getSystemClassLoader (). + loadClass (JPropText.class.getPackage ().getName ()+".JProp"+type). + getConstructor (String.class, JEditable.class). + newInstance (propName, jEditable); + } catch (Exception e) { + throw new IllegalArgumentException ("Can't find constructor for type ("+type+")."); + } + } + + // ======================================== + protected JEditable jEditable; + protected AdecWatt adecWatt; // XXX ??? + protected PermanentDB permanentDB; + protected ImageDB iconDB; + protected ImageDB imageDB; + protected String propName; + protected PropTypeEnum type; + protected int nbVal; + protected Collection enumChoice; + protected boolean hidden; + protected String ownValue, parentValue, lastValue; + protected Double[] ownValues, parentValues, lastValues; + protected boolean horizontalSpin, parentHorizontalSpin; + protected LocalizedUserLabel localizedUserLabel; + protected LocalizedUserLabel[] localizedUserMultiLabels; + + //public String getSValue () { return lastValue; } + public ImageDB getIconDB () { return iconDB; } + public ImageDB getImageDB () { return imageDB; } + public String getLastValue () { return lastValue; } + public String getPropName () { return propName; } + public boolean getHorizontalSpin () { return horizontalSpin; } + protected void updateView () { } + abstract protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane); + + // ======================================== + protected JProp (String propName, JEditable jEditable) { + this.jEditable = jEditable; + adecWatt = jEditable.getAdecWatt (); + permanentDB = adecWatt.getPermanentDB (); + iconDB = adecWatt.getIconDB (); + imageDB = adecWatt.getImageDB (); + this.propName = propName; + type = jEditable.getTypeToken (propName); + nbVal = jEditable.getNbVal (propName); + enumChoice = jEditable.getPropEnumChoice (propName); + lastValue = ownValue = jEditable.getPropValue (propName, false); + parentValue = jEditable.getPropValue (propName, true); + if (nbVal > 0) { + ownValues = jEditable.getPartialPropValue (propName, nbVal, false); + parentValues = jEditable.getPartialPropValue (propName, nbVal, true); + lastValues = ownValues; + } + hidden = jEditable.getPropHidden (propName); + // XXX seulement si icon ou image + parentHorizontalSpin = jEditable.getPropHorizontalSpin (propName, true); + horizontalSpin = jEditable.getPropHorizontalSpin (propName, false)^parentHorizontalSpin; + if (ownValue == null) { + lastValue = ownValue = parentValue; + lastValues = ownValues = parentValues; + horizontalSpin = parentHorizontalSpin; + } + boolean isLocalized = jEditable.getPropLocalized (propName); + boolean linguist = jEditable.isLinguist (); + localizedUserLabel = new LocalizedUserLabel (propName, isLocalized, linguist); + List multiLabel = jEditable.getPropLabel (propName); + if (multiLabel == null) + return; + localizedUserMultiLabels = new LocalizedUserLabel [multiLabel.size ()]; + for (int i = 0; i < localizedUserMultiLabels.length; i++) { + localizedUserMultiLabels[i] = new LocalizedUserLabel (multiLabel.get (i), isLocalized, linguist); + JLabel result = localizedUserMultiLabels[i].getJLabel (); + Font defaultFont = result.getFont (); + result.setFont (new Font (defaultFont.getName (), Font.PLAIN, (defaultFont.getSize ()*3)/4)); + } + } + + // ======================================== + public void display (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + if (!edit && (hidden || lastValue == null) && type != PropTypeEnum.Preview) + return; + displayByType (edit, jPropList, jTabbedPane); + } + + public void setUnchange (JTextComponent jTextComponent, boolean unchange) { + if (unchange) { + jTextComponent.setText (""); + jTextComponent.setForeground (noValueFgColor); + jTextComponent.setBackground (noValueBgColor); + } else { + jTextComponent.setForeground (textFgColor); + jTextComponent.setBackground (textBgColor); + } + } + public void setChangeListener (final JTextComponent jTextComponent) { + final Document document = jTextComponent.getDocument (); + document.addDocumentListener (new DocumentListener () { + public void changedUpdate (DocumentEvent e) { + document.removeDocumentListener (this); + setUnchange (jTextComponent, false); + document.addDocumentListener (this); + } + public void insertUpdate (DocumentEvent e) { changedUpdate (e); } + public void removeUpdate (DocumentEvent e) { changedUpdate (e); } + }); + jTextComponent.addMouseListener (new MouseAdapter () { + @SuppressWarnings ("serial") + public void mousePressed (final MouseEvent e) { + if (!SwingUtilities.isRightMouseButton (e)) + return; + new JPopupMenu () { + { + Util.addMenuItem (AdecWattManager.actionUnchange, new ActionListener () { + public void actionPerformed (ActionEvent e) { + setUnchange (jTextComponent, true); + } + }, this); + Point pos = e.getPoint (); + show (jTextComponent, pos.x, pos.y); + } + }; + } + }); + } + public void removeVal () { + if (lastValue == parentValue) + return; + lastValue = parentValue; + lastValues = parentValues; + updateView (); + } + public void unchangeVal () { + lastValue = PropMix; + lastValues = Prop.string2tab (lastValue, nbVal); + updateView (); + } + public void setSpin (boolean horizontalSpin) { + this.horizontalSpin = horizontalSpin; + updateView (); + } + public void setVal (String newVal) { + if (newVal == null | newVal.isEmpty ()) { + removeVal (); + return; + } + if (lastValue != null && newVal.equals (lastValue)) + return; + lastValue = newVal; + lastValues = Prop.string2tab (lastValue, nbVal); + updateView (); + } + + // ======================================== + /** + props = {type, parent, own, last}; + */ + public void getChange (Prop[] props) { + lastValue = getLastValue (); + if (lastValue != null && lastValue.isEmpty ()) + lastValue = null; + boolean newHorizontalSpin = horizontalSpin ^ parentHorizontalSpin; + if (!(newHorizontalSpin)) { + if ((lastValue == null && props [2] == null) || + (lastValue != null && props [2] != null && lastValue.equals (props [2].sValue))) { + props [3] = props [2]; + return; + } + if (lastValue == null && props [2] != null) { + props [3] = props [1]; + return; + } + } + props [3] = new Prop (propName, type, horizontalSpin); + props [3].setValue (lastValue); + } + + public void confirmBundle () { + String newLabel = localizedUserLabel.getNewLabel (); + if (newLabel != null) + Bundle.setUser (AdecWattUser, localizedUserLabel.getLabel (), newLabel); + if (localizedUserMultiLabels == null) + return; + for (int i = 0; i < localizedUserMultiLabels.length; i++) { + newLabel = localizedUserMultiLabels[i].getNewLabel (); + if (newLabel != null) + Bundle.setUser (AdecWattUser, localizedUserMultiLabels[i].getLabel (), newLabel); + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JScrollPaneWorkspace.java b/src/java/adecWatt/view/JScrollPaneWorkspace.java new file mode 100644 index 0000000..0bfa575 --- /dev/null +++ b/src/java/adecWatt/view/JScrollPaneWorkspace.java @@ -0,0 +1,87 @@ +package adecWatt.view; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Rectangle; +import javax.swing.JComponent; +import javax.swing.JScrollPane; + +import misc.DimensionDouble; + +import adecWatt.model.unit.Workspace; + +@SuppressWarnings ("serial") public class JScrollPaneWorkspace extends JScrollPane { + + static public final boolean HORIZONTAL = true; + static public final boolean VERTICAL = false; + static public final int SIZE = 16; + static public final Color BG = Color.LIGHT_GRAY; + static public final int TICK_LENGTH = 5; + + private JWorkspaceView jWorkspaceView; + private JRule horizontalJRule = new JRule (HORIZONTAL); + private JRule verticalJRule = new JRule (VERTICAL); + + public JWorkspaceView getJWorkspaceView () { return jWorkspaceView; } + public Workspace getWorkspace () { return jWorkspaceView.getWorkspace (); } + + public JScrollPaneWorkspace (JWorkspaceView jWorkspaceView) { + super (jWorkspaceView, VERTICAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_AS_NEEDED); + this.jWorkspaceView = jWorkspaceView; + setColumnHeaderView (horizontalJRule); + setRowHeaderView (verticalJRule); + } + + void updateScale () { + horizontalJRule.repaint (); + verticalJRule.repaint (); + } + + public class JRule extends JComponent { + public boolean horizontal; + public JRule (boolean horizontal) { + this.horizontal = horizontal; + setPreferredSize (new Dimension (SIZE, SIZE)); + } + + protected void paintComponent (Graphics g) { + Rectangle viewRect = getViewport ().getViewRect (); + double scale = jWorkspaceView.getScale (); + DimensionDouble realSize = jWorkspaceView.getRealSize (); + + int minTick = (int) Math.round ((horizontal ? viewRect.x : viewRect.y)/scale); + int maxTick = + (int) Math.round (Math.min ((horizontal ? realSize.width : realSize.height), + (horizontal ? viewRect.x+viewRect.width : viewRect.y+viewRect.height)/scale)); + + Rectangle drawHere = g.getClipBounds (); + g.setColor (BG); + g.fillRect (drawHere.x, drawHere.y, drawHere.width, drawHere.height); + g.setFont (new Font ("SansSerif", Font.PLAIN, 8)); + g.setColor (Color.black); + + for (int i = minTick; i <= maxTick; i += 1) { + int p = (int) (i*scale - (horizontal ? viewRect.x : viewRect.y)); + if (horizontal) + g.drawLine (p, SIZE-1, p, SIZE-TICK_LENGTH-1); + else + g.drawLine (SIZE-1, p, SIZE-TICK_LENGTH-1, p); + String text = Integer.toString (i); + if (i == 0) { + text += "m"; + if (horizontal) + g.drawString (text, p+2, 8); + else + g.drawString (text, 1, p+10); + continue; + } + if (horizontal) + g.drawString (text, p-3, 8); + else + g.drawString (text, 0, p+3); + } + } + } +} diff --git a/src/java/adecWatt/view/JSegm.java b/src/java/adecWatt/view/JSegm.java new file mode 100644 index 0000000..b5eccb5 --- /dev/null +++ b/src/java/adecWatt/view/JSegm.java @@ -0,0 +1,28 @@ +package adecWatt.view; + +import adecWatt.model.Item; +import adecWatt.model.Segm; + +@SuppressWarnings ("serial") public class JSegm extends JItem { + + // ======================================== + public Segm segm; + + public Item getItem () { return segm; } + + // ======================================== + public JSegm (JWorkspaceView jWorkspaceView, Segm segm) { + super (jWorkspaceView, segm); + } + + public void setItem (Item item) { + if (item == null) + return; + segm = (Segm) item; + setCurrentThetaDegree (item.getAngle ()); + setCurrentSize (); + setCurrentPos (); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JStringSet.java b/src/java/adecWatt/view/JStringSet.java new file mode 100644 index 0000000..af116aa --- /dev/null +++ b/src/java/adecWatt/view/JStringSet.java @@ -0,0 +1,137 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.Collection; +import java.util.Collections; +import java.util.Vector; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; + +import misc.Util; + +@SuppressWarnings ("serial") +public class JStringSet extends JPanel { + + // ======================================== + static public final String + actionAdd = "Add", + actionRemove = "Remove"; + + // ======================================== + private Vector refList = new Vector (); + private Vector list = new Vector (); + private JList jList = new JList (); + private JTextField jTextField = new JTextField (8); + + public Collection getSet () { + if (list.size () < 1) + return null; + return list; + } + + // ======================================== + public JStringSet (Collection enumChoice) { + super (new BorderLayout ()); + jTextField.addAncestorListener (new AncestorListener () { + @Override + public void ancestorRemoved (final AncestorEvent event) {} + @Override + public void ancestorMoved (final AncestorEvent event) {} + @Override + public void ancestorAdded (final AncestorEvent event) { + jTextField.requestFocusInWindow (); + } + }); + jTextField.addFocusListener (new FocusListener () { + @Override + public void focusGained (final FocusEvent e) {} + @Override + public void focusLost (final FocusEvent e) { + if (isFirstTime) { + // When we lose focus, ask for it back but only once + jTextField.requestFocusInWindow (); + isFirstTime = false; + } + } + private boolean isFirstTime = true; + }); + jList.addListSelectionListener (new ListSelectionListener () { + public void valueChanged (ListSelectionEvent e) { + jTextField.setText (jList.getSelectedValue ()); + } + }); + + JPanel jPanel = new JPanel (new BorderLayout ()); + jPanel.add (Util.newIconButton (actionAdd, new ActionListener () { + public void actionPerformed (ActionEvent e) { + actionAdd (); + } + }), BorderLayout.WEST); + jPanel.add (jTextField, BorderLayout.CENTER); + jPanel.add (Util.newIconButton (actionRemove, new ActionListener () { + public void actionPerformed (ActionEvent e) { + actionRemove (); + } + }), BorderLayout.EAST); + add (jPanel, BorderLayout.SOUTH); + add (Util.getJScrollPane (jList), BorderLayout.CENTER); + Util.unBoxButton (jPanel); + if (enumChoice == null) + return; + refList.addAll (enumChoice); + Collections.sort (refList); + list.addAll (refList); + } + + // ======================================== + public void init () { + list.clear (); + list.addAll (refList); + updateList (); + } + public void confirm () { + actionAdd (); + refList.clear (); + refList.addAll (list); + } + + // ======================================== + public void updateList () { + jList.setListData (list); + jList.revalidate (); + } + + public void actionAdd () { + String value = jTextField.getText (); + jTextField.setText (""); + if (value == null || value.isEmpty ()) + return; + if (list.contains (value)) + return; + list.addElement (value); + Collections.sort (list); + updateList (); + // XXX jList.setSelectedValue (value, true); + jList.setSelectedValue (null, false); + } + public void actionRemove () { + int selection = jList.getSelectedIndex (); + if (selection < 0) + return; + list.removeElementAt (selection); + updateList (); + if (selection >= list.size ()) + selection--; + jList.setSelectedIndex (selection); + } + // ======================================== +} diff --git a/src/java/adecWatt/view/JTransform.java b/src/java/adecWatt/view/JTransform.java new file mode 100644 index 0000000..4c0a975 --- /dev/null +++ b/src/java/adecWatt/view/JTransform.java @@ -0,0 +1,151 @@ +package adecWatt.view; + +import java.awt.GridBagLayout; +import java.util.ArrayList; +import java.util.Collection; +import java.util.TreeSet; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCNL; + +import adecWatt.model.Embedded; +import adecWatt.model.Editable; +import adecWatt.model.Permanent; +import adecWatt.model.Prop; +import adecWatt.model.Unit; +import adecWatt.model.UnitNode; + +@SuppressWarnings ("serial") +public class JTransform extends JPanel { + // ======================================== + static public ArrayList getJModifiers (Collection modifiersSet, Collection modifiers, boolean isLock) { + ArrayList result = new ArrayList (); + for (String modifier : modifiersSet) { + JCheckBox button = Util.newCheckIcon (Util.toCapital (modifier), null); + if (modifiers != null && modifiers.contains (modifier)) + button.setSelected (true); + Util.unBoxButton (button); + result.add (button); + } + if (isLock) + for (JCheckBox button : result) + button.setEnabled (false); + return result; + } + + static public Collection getModifiers (ArrayList buttons, + Collection oldModifiers, boolean admin, Collection hiddenModifiers) { + TreeSet modifiers = new TreeSet (); + for (JCheckBox button : buttons) + if (button.isSelected ()) + modifiers.add (button.getActionCommand ().toLowerCase ()); + if (!admin && oldModifiers != null) + for (String modifier : hiddenModifiers) + if (oldModifiers.contains (modifier)) + modifiers.add (modifier); + return modifiers.size () < 1 ? null : modifiers; + } + + public boolean isLock (String propName) { + return editable.getDirectUnit ().getPropLock (propName); + } + + // ======================================== + private Editable editable; + private Unit root; + private boolean isRoot; + private boolean isEmbedded; + private ArrayList jModifiers; + private ArrayList> permanents; + private JComboBox jPermanents; + private JTextField jName; + private JDefPropTable jDefPropTable; + private boolean admin; + + public boolean isAdmin () { return admin; } + + public JTransform (Editable editable) { + super (new GridBagLayout ()); + this.editable = editable; + root = editable.getDirectUnit ().getUnitRoot (); + isRoot = root == editable; + isEmbedded = editable instanceof Embedded; + admin = editable.getDirectUnit ().getAdecWatt ().getUser ().isAdmin (); + + setAvailablePermanents (); + jName = new JTextField (editable.getName (), 16); + jDefPropTable = new JDefPropTable (this, editable); + + if (!isEmbedded) { + jModifiers = getJModifiers (editable.getModifiersSet (), editable.getModifiers (), editable.isLock ()); + JPanel jDisplayModifiers = new JPanel (); + for (JCheckBox jModifier : jModifiers) + jDisplayModifiers.add (jModifier); + Util.addComponent (jDisplayModifiers, this, GBC); + } + if (isRoot) + Util.addComponent (jName, this, GBCNL); + else { + Util.addComponent (jPermanents, this, isEmbedded ? GBCNL : GBC); + if (!isEmbedded) + Util.addComponent (jName, this, GBCNL); + } + Util.addComponent (Util.getJScrollPane (jDefPropTable), this, GBCNL); + + // XXX devrait être géré par jDefPropTable + } + + // ======================================== + @SuppressWarnings ("unchecked") + public void setAvailablePermanents () { + if (isRoot) + return; + permanents = (ArrayList>) editable.getDirectUnit ().getAvailablePermanents (isEmbedded, editable); + jPermanents = new JComboBox (); + for (Unit unit : permanents) + jPermanents.addItem (unit.getLocalName ()); + jPermanents.setSelectedIndex (permanents.indexOf (editable.getParentUnit ())); + } + + // ======================================== + public boolean valideChange () { + if (!jDefPropTable.jNewPropName.getText ().isEmpty ()) + return false; + TreeSet propNames = new TreeSet (); + for (JDefPropTable.PropShadow defProp : jDefPropTable.getObjectData ()) { + String propName = defProp.propName; + if (propName == null || propName.isEmpty () || propNames.contains (propName)) + return false; + propNames.add (propName); + } + return true; + } + + @SuppressWarnings ("unchecked") + public void confirmChange () { + ArrayList transProps = new ArrayList (); + int rank = 0; + for (JDefPropTable.PropShadow defProp : jDefPropTable.getObjectData ()) + transProps.add (new Prop[] { + defProp.prop, + new Prop (defProp.propName, + Prop.PropTypeEnum.values()[defProp.jType.getSelectedIndex ()], + new Integer (rank++), + defProp.getModifiers (), + defProp.jStringSet.getSet (), + defProp.jDefLabel.getLabels ()) + }); + Collection newModifiers = jModifiers == null ? null : getModifiers (jModifiers, null, admin, null); + editable.storyTransform (newModifiers, getPermanent (), jName.getText (), transProps); + } + public Unit getPermanent () { + return isRoot ? null : permanents.get (jPermanents.getSelectedIndex ()); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JUnitPopup.java b/src/java/adecWatt/view/JUnitPopup.java new file mode 100644 index 0000000..af04a5a --- /dev/null +++ b/src/java/adecWatt/view/JUnitPopup.java @@ -0,0 +1,79 @@ +package adecWatt.view; + +import java.awt.Point; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Arrays; +import java.util.List; +import javax.swing.JPopupMenu; +import javax.swing.JTree; + +import misc.Util; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.AdecWatt; +import adecWatt.model.Unit; +import adecWatt.model.User; + +@SuppressWarnings ("serial") +public class JUnitPopup extends JPopupMenu { + + // ======================================== + public JUnitPopup (final AdecWatt adecWatt, JTree jTree, final Unit unit, Point pos) { + User user = adecWatt.getUser (); + boolean editor = user.isEditor (unit); + final List selectedUnits = Arrays.asList (unit); + Util.addMenuItem (AdecWattManager.actionDisplayUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionDisplayUnit, selectedUnits); + } + }, this); + if (editor) + Util.addMenuItem (AdecWattManager.actionModifyUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionModifyUnit, selectedUnits); + } + }, this); + if (editor && unit.getParent () != null) + Util.addMenuItem (AdecWattManager.actionRenameUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionRenameUnit, selectedUnits); + } + }, this); + if (user.isDataStructuresManager ()) { + Util.addMenuItem (AdecWattManager.actionTransformUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionTransformUnit, unit); + } + }, this); + } + if (editor) { + if (unit.getParent () != null) + Util.addMenuItem (AdecWattManager.actionCopyUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionCopyUnit, unit); + } + }, this); + Util.addMenuItem (AdecWattManager.actionNewUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionNewUnit, unit); + } + }, this); + } + if ((!unit.getRemote () || unit.story.isModified ()) && !user.isVisitorId ()) + Util.addMenuItem (AdecWattManager.actionPromoteUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionPromoteUnit, unit); + } + }, this); + if (!unit.getRemote ()) + Util.addMenuItem (AdecWattManager.actionRemoveUnit, new ActionListener () { + public void actionPerformed (ActionEvent e) { + adecWatt.broadcastDisplay (AdecWattManager.actionRemoveUnit, unit); + } + }, this); + show (jTree, pos.x, pos.y); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JUser.java b/src/java/adecWatt/view/JUser.java new file mode 100644 index 0000000..45e04b0 --- /dev/null +++ b/src/java/adecWatt/view/JUser.java @@ -0,0 +1,94 @@ +package adecWatt.view; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.HashSet; +import java.util.Hashtable; +import javax.swing.JCheckBox; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPasswordField; +import javax.swing.JTextArea; +import javax.swing.JTextField; + +import misc.Bundle; +import misc.RemoteUpdate; +import misc.RemoteUpdateManager; +import misc.Util; +import static misc.Util.GBCNL; + +import adecWatt.model.User; + +@SuppressWarnings ("serial") +public class JUser extends JPanel { + + // ======================================== + private User user; + private HashSet roles; + private Hashtable rolesCB = new Hashtable (); + + private JTextField loginTF; + private JPasswordField passwordTF; + private JTextField idTF; + + // ======================================== + public JUser (User user, final RemoteUpdateManager remoteUpdateManager) { + super (new BorderLayout ()); + this.user = user; + loginTF = new JTextField (user.getLogin ()); + passwordTF = new JPasswordField (user.getPassword ()); + idTF = new JTextField (""+user.getUserId ()); + roles = user.getRoles (); + JPanel form = Util.getGridBagPanel (); + Util.addLabelFields (form, "Login", loginTF); + Util.addLabelFields (form, "Password", passwordTF); + Util.addButton ("Connection", new ActionListener () { + public void actionPerformed (ActionEvent e) { + RemoteUpdate remoteUpdate = remoteUpdateManager.getRemoteUpdate (); + remoteUpdate.logoutDokuwiki (); + char[] pass = passwordTF.getPassword (); + remoteUpdate.loginDokuwiki (loginTF.getText (), ""+new String (pass)); + String newRoles = remoteUpdate.getRoles (loginTF.getText ()); + if (newRoles == null) { + remoteUpdateManager.setConnected (false); + JOptionPane.showMessageDialog (JUser.this, Bundle.getMessage ("ConnectionFailed")); + return; + } + remoteUpdateManager.setConnected (true); + idTF.setText (""+User.updateRoles (roles, newRoles)); + for (User.Role role : User.Role.values ()) + rolesCB.get (role).setSelected (roles.contains (role)); + JOptionPane.showMessageDialog (JUser.this, Bundle.getMessage ("ConnectionSucceeded")); + } + }, form, GBCNL); + int idx = 0; + for (final User.Role role : User.Role.values ()) { + if (idx++ == 5) { + Util.addComponent (new JTextArea (Bundle.getMessage ("ChangeRole")), form, GBCNL); + Util.addLabelFields (form, "Id", idTF); + } + JCheckBox jCheckBox = Util.addCheckButton (role.toString (), new ActionListener () { + public void actionPerformed (ActionEvent e) { + if (((JCheckBox) e.getSource ()).isSelected ()) + roles.add (role); + else + roles.remove (role); + } + }, form, GBCNL); + jCheckBox.setSelected (roles.contains (role)); + rolesCB.put (role, jCheckBox); + } + add (form, BorderLayout.CENTER); + } + + // ======================================== + public void confirm () { + user.setLogin (loginTF.getText ()); + user.setPassword (new String (passwordTF.getPassword ())); + user.setUserId (Integer.parseInt (idTF.getText ())); + user.setRoles (roles); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JWorkspaceSlidersToolBar.java b/src/java/adecWatt/view/JWorkspaceSlidersToolBar.java new file mode 100644 index 0000000..1b4f5f6 --- /dev/null +++ b/src/java/adecWatt/view/JWorkspaceSlidersToolBar.java @@ -0,0 +1,80 @@ +package adecWatt.view; + +// XXX still magics values + +import javax.swing.BoxLayout; +import javax.swing.JPanel; +import javax.swing.JSlider; +import javax.swing.JToolBar; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import misc.Bundle; + +@SuppressWarnings ("serial") public class JWorkspaceSlidersToolBar extends JToolBar implements ChangeListener { + + JWorkspaceView jWorkspaceView; + JPanel jSet = new JPanel (); + JSlider jScale = new JSlider (0, 200, 100); + JSlider jOpacity = new JSlider (0, 200, 100); + + public JWorkspaceSlidersToolBar (JAdecWatt jAdecWatt) { + super ("Slider"); + add (jSet); + jScale.setMajorTickSpacing (50); + jScale.setMinorTickSpacing (10); + jSet.add (jScale); + jSet.add (jOpacity); + setJWorkspaceView (null); + jScale.addChangeListener (this); + jOpacity.addChangeListener (this); + jAdecWatt.stateNotifier.addUpdateObserver (this, JAdecWatt.BroadcastChangeScale); + // XXX jAdecWatt.stateNotifier.addUpdateObserver (this, JAdecWatt.BroadcastChangeOpacity); + jScale.setToolTipText (Bundle.getAction ("Scale")); + jOpacity.setToolTipText (Bundle.getAction ("Crossfades")); + } + public void setOrientation (int o) { + if (jScale != null) { + jScale.setOrientation (o); + jOpacity.setOrientation (o); + jSet.setLayout (new BoxLayout (jSet, o == HORIZONTAL ? BoxLayout.Y_AXIS : BoxLayout.X_AXIS)); + } + super.setOrientation (o); + } + public void setJWorkspaceView (JWorkspaceView jWorkspaceView) { + this.jWorkspaceView = jWorkspaceView; + if (jWorkspaceView == null) { + jScale.setEnabled (false); + jOpacity.setEnabled (false); + jOpacity.setValue (100); + } else { + jScale.setEnabled (true); + if (jWorkspaceView.workspace.getBuilding () != null) { + jOpacity.setEnabled (true); + jOpacity.setValue ((int) (jWorkspaceView.workspace.getOpacity ()*200)); + } else + jOpacity.setValue (100); + } + updateChangeScale (); + } + public void stateChanged (ChangeEvent e) { + if (jWorkspaceView == null) + return; + if (e.getSource () == jScale) { + jWorkspaceView.setScale (Math.pow (10, jScale.getValue ()/100.-1)*jWorkspaceView.getInitScale ()); + return; + } + jWorkspaceView.workspace.setOpacity (jOpacity.getValue ()/200F); + jWorkspaceView.repaint (); + } + + public void updateChangeScale () { + if (jWorkspaceView == null) { + jScale.setValue (100); + return; + } + jScale.removeChangeListener (this); + jScale.setValue ((int) (100*(Math.log10 (jWorkspaceView.getScale ()/jWorkspaceView.getInitScale ())+1))); + jScale.addChangeListener (this); + } +} diff --git a/src/java/adecWatt/view/JWorkspaceView.java b/src/java/adecWatt/view/JWorkspaceView.java new file mode 100644 index 0000000..d4c0364 --- /dev/null +++ b/src/java/adecWatt/view/JWorkspaceView.java @@ -0,0 +1,926 @@ +package adecWatt.view; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.Shape; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; +import java.awt.geom.AffineTransform; +import java.awt.geom.Line2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Hashtable; +import java.util.List; +import java.util.Vector; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JLayeredPane; +import javax.swing.JScrollBar; +import javax.swing.JViewport; +import javax.swing.SwingUtilities; + +import misc.DimensionDouble; +import adecWatt.control.AdecWattManager; +import adecWatt.model.Acc; +import adecWatt.model.AdecWatt; +import adecWatt.model.Comp; +import adecWatt.model.ImageDB; +import adecWatt.model.Item; +import adecWatt.model.PermanentDB; +import adecWatt.model.Prop; +import adecWatt.model.Unit; +import adecWatt.model.UnitNode; +import adecWatt.model.User; +import adecWatt.model.unit.Accessory; +import adecWatt.model.unit.Building; +import adecWatt.model.unit.Lightplot; +import adecWatt.model.unit.NonWorkspace; +import adecWatt.model.unit.Workspace; + +@SuppressWarnings ("serial") public class JWorkspaceView extends JLayeredPane { + + // ======================================== + static public final int closePixelsBounds = 10; + static public final int closePixelsAccs = 2; + static public final int closePixelsItems = 4; + static final double gridStep = .1; + + static public final Color noColor = new Color (255, 255, 255, 0); + static public final Color selectionColor = new Color (0, 255, 0, 64); + static public final Color selectionBoundColor = new Color (0, 0, 255, 96); + + protected double scale = 1, minScale = 1, maxScale = 1, initScale = 1, scaleStep = 1; + protected JAdecWatt jAdecWatt; + protected AdecWatt adecWatt; + protected User user; + protected PermanentDB permanentDB; + protected ImageDB iconDB; + + protected T workspace; + protected DimensionDouble realSize; + protected Rectangle2D.Double backgroundShape; + protected Dimension currentSize; + protected JLabel jSelectionPane; + protected Graphics2D selectionGraphics; + protected Item lastSelectedItem; + protected Hashtable selectedItems = new Hashtable (); + protected int lastSelectedAccId; + protected JAcc selectedAcc; + + public JAdecWatt getJAdecWatt () { return jAdecWatt; } + public AdecWatt getAdecWatt () { return adecWatt; } + public PermanentDB getPermanentDB () { return permanentDB; } + public ImageDB getIconDB () { return iconDB; } + public T getWorkspace () { return workspace; } + public double getScale () { return scale; } + public double getInitScale () { return initScale; } + public DimensionDouble getRealSize () { return realSize; } + public boolean notEditable () { return !user.isEditor (workspace); } + + public boolean isSelected (Item item) { + return selectedItems.containsKey (item.getId ()); + } + + public boolean isSticky (Item item) { + if (!workspace.getInheritedEmbedded ().contains (item) || item.isReserved ()) + return true; + return item.isSticky (); + } + + private JScrollPaneWorkspace getJScrollPaneWorkspace () { + for (Container parent = getParent () ; parent != null; parent = parent.getParent ()) + if (parent instanceof JScrollPaneWorkspace) + return (JScrollPaneWorkspace) parent; + return null; + } + + // ======================================== + static public JWorkspaceView getInstance (JAdecWatt jAdecWatt, Workspace workspace) { + switch (workspace.getTypeToken ()) { + case Furniture: + case Information: + case Line: + case Accessory: + throw new IllegalArgumentException ("Can't find workspace view for type "+workspace.getTypeToken ()+"."); + case Building: + return new JBuildingView (jAdecWatt, (Building) workspace); + case Lightplot: + return new JLightplotView (jAdecWatt, (Lightplot) workspace); + } + throw new IllegalArgumentException ("Can't find constructor for type "+workspace.getTypeToken ()+"."); + } + + protected JWorkspaceView (JAdecWatt jAdecWatt, T workspace) { + this.jAdecWatt = jAdecWatt; + this.workspace = workspace; + adecWatt = jAdecWatt.getAdecWatt (); + user = adecWatt.getUser (); + permanentDB = adecWatt.getPermanentDB (); + iconDB = adecWatt.getIconDB (); + // XXX comment mettre à jour realSize + realSize = workspace.getRealSize (); + backgroundShape = new Rectangle2D.Double (.0, .0, realSize.width, realSize.height); + jSelectionPane = createJLabelLayer (1001); + initScale (); + addMouseListener (workspaceViewMouseAdapter); + addMouseMotionListener (workspaceViewMouseAdapter); + addMouseWheelListener (workspaceViewMouseAdapter); + workspace.stateNotifier.addUpdateObserver (this, AdecWatt.BroadcastStory); + adecWatt.addMsgObserver (this, Unit.BroadcastSetSelectionItems); + workspace.stateNotifier. + addMsgObserver (this, + Unit.BroadcastNewItem, Unit.BroadcastRemoveItem, Unit.BroadcastUpdateItem, + Unit.BroadcastUpdatePermItem, + Unit.BroadcastChangeRotSize, Unit.BroadcastChangePos, Unit.BroadcastChangeRot); + } + + // ======================================== + private JLabel createJLabelLayer (int layer) { + JLabel result = new JLabel (); + result.setLocation (0, 0); + add (result); + setLayer (result, layer); + return result; + } + private Graphics2D createGraphicsLayer (JLabel layer) { + BufferedImage image = new BufferedImage (currentSize.width, currentSize.height, BufferedImage.TYPE_INT_ARGB); + layer.setIcon (new ImageIcon (image)); + layer.setSize (currentSize); + return image.createGraphics (); + } + + // ======================================== + public ArrayList findItems (Point pos) { + return workspace.findItems (scaleViewToModel (pos), closePixelsItems/scale); + } + public Hashtable> findAccs (Point pos, ArrayList overlap) { + Hashtable> result = new Hashtable> (); + if (overlap ==null) + return result; + Point2D.Double realPos = scaleViewToModel (new Point (pos.x, pos.y)); + for (Item item : overlap) { + ArrayList accs = item.findAccs (realPos, closePixelsAccs/scale); + if (accs.size () > 0) + result.put (item, accs); + } + return result; + } + + // ======================================== + public void paint (Graphics g) { + Graphics2D g2 = (Graphics2D) g; + AffineTransform iat = g2.getTransform (); + Shape clip = g2.getClip (); + g2.scale (scale, scale); + g2.setColor (Color.WHITE); + g2.fill (backgroundShape); + g2.setColor (Color.BLACK); + g2.setStroke (new BasicStroke ((float) (1/scale))); + g2.draw (backgroundShape); + workspace.print (g2, scale, selectedItems.keySet (), true); + g2.setTransform (iat); + g2.setClip (clip); + paintChildren (g); + } + + // ======================================== + MouseAdapter workspaceViewMouseAdapter = new MouseAdapter () { + public void mouseClicked (MouseEvent e) { JWorkspaceView.this.mouseClicked (e); } + public void mousePressed (MouseEvent e) { JWorkspaceView.this.mousePressed (e); } + public void mouseReleased (MouseEvent e) { JWorkspaceView.this.mouseReleased (e); } + public void mouseDragged (MouseEvent e) { JWorkspaceView.this.mouseDragged (e); } + public void mouseWheelMoved (MouseWheelEvent e) { + jAdecWatt.setCurrentWorkspace (workspace); + try { + if (0 != (e.getModifiersEx () & (MouseWheelEvent.SHIFT_MASK|MouseWheelEvent.SHIFT_DOWN_MASK))) + scrollView (true, e.getWheelRotation ()); + else if (0 != (e.getModifiersEx () & (MouseWheelEvent.CTRL_MASK|MouseWheelEvent.CTRL_DOWN_MASK))) + changeScale (e.getPoint (), e.getWheelRotation ()); + else + scrollView (false, e.getWheelRotation ()); + } catch (Exception e2) { + } + } + }; + // ======================================== + public void mouseClicked (MouseEvent e) { + requestFocusInWindow (); + jAdecWatt.setCurrentWorkspace (workspace); + if (selectedAcc != null) { + adecWatt.broadcastDisplay (AdecWattManager.actionDisplayAcc, selectedAcc.getAcc ()); + return; + } + ArrayList overlapItems = findItems (e.getPoint ()); + if (e.getClickCount () > 1) { + // double click + if (selectedItems.size () > 1) + for (Item item : overlapItems) + if (selectedItems.containsKey (item.getId ())) + // XXX info multiple + return; + if (overlapItems.size () < 1) + return; + setSelectedItems (overlapItems.get ((overlapItems.indexOf (lastSelectedItem)+1)%overlapItems.size ())); + List param = Arrays.asList (lastSelectedItem); + adecWatt.broadcastDisplay (AdecWattManager.actionDisplayItem, param); + return; + } + } + public void mousePressed (MouseEvent e) { + jAdecWatt.setCurrentWorkspace (workspace); + if (SwingUtilities.isRightMouseButton (e)) { + if (performPopup (e)) + return; + performSelection (e); + performPopup (e); + return; + } + if (e.isControlDown ()) { + rotation (e); + return; + } + performSelection (e); + } + protected boolean performPopup (MouseEvent e) { + if (selectedAcc != null) { + new JAccPopup (this, selectedAcc.getItem (), selectedAcc.getAcc (), e.getPoint ()); + return true; + } + if (selectedItems.size () > 0) { + // XXX ??? collectif ? + new JItemPopup (this, selectedItems.values ().iterator ().next ().getItem (), e.getPoint ()); + return true; + } + return false; + } + private ArrayList overlapItems; + protected void performSelection (MouseEvent e) { + Point mPos = e.getPoint (); + setSelectedAcc (); + overlapItems = findItems (mPos); + if (overlapItems.size () < 1) { + startsZoneSelection (e); + return; + } + firstClick = lastClick = mPos; + Hashtable> overlapAccs = findAccs (mPos, overlapItems); + if (overlapAccs.size () > 0) { + lastSelectedAccId = (lastSelectedAccId+1)%nbOverlapAccs (overlapAccs); + setSelectedAcc (overlapAccs, lastSelectedAccId); + return; + } + lastSelectedAccId = -1; + // XXX revoir si overlapAccs deja selectionnes + if (e.isShiftDown ()) { + invertItemSelection (overlapItems.get (0)); + if (selectedItems.size () < 1) { + firstClick = lastClick = null; + refHandle = null; + handleOff = null; + } + // XXX changement du choix de la poignée de référence ? + return; + } + if (selectedItems.size () > 0) + for (Item item : overlapItems) + if (selectedItems.containsKey (item.getId ())) { + selectionRefHandle (item, mPos); + return; + } + Item item = overlapItems.get ((overlapItems.indexOf (lastSelectedItem)+1) % overlapItems.size ()); + selectionRefHandle (item, mPos); + setSelectedItems (item); + } + public void selectionRefHandle (Item item, Point mPos) { + Point2D.Double firstModelClick = new Point2D.Double (mPos.x/scale, mPos.y/scale); + refHandle = (Point2D.Double) firstModelClick.clone (); + item.getCloseBound (firstModelClick, Double.MAX_VALUE, refHandle); + handleOff = new DimensionDouble (refHandle.x-firstModelClick.x, refHandle.y-firstModelClick.y); + } + public void mouseReleased (MouseEvent e) { + if (selectedAcc != null) { + dropAcc (e); + return; + } + if (zoneSelectionStart != null) { + endsZoneSelection (e); + return; + } + if (e.isControlDown () && refHandle == null) { + rotation (e); + storyRotSelectedComp (); + return; + } + //dragComps (e); + storyMoveSelectedItem (e); + } + public void mouseDragged (MouseEvent e) { + if (selectedAcc != null) { + dragAcc (e); + return; + } + if (zoneSelectionStart != null) { + extendsZoneSelection (e); + return; + } + if (e.isControlDown () && refHandle == null) { + rotation (e); + return; + } + dragItems (e); + } + + // ======================================== + Point zoneSelectionStart; + Point zoneSelectionEnd; + public void startsZoneSelection (MouseEvent e) { + removeAllSelectedItems (); + zoneSelectionEnd = zoneSelectionStart = e.getPoint (); + updateSelection (); + } + public void extendsZoneSelection (MouseEvent e) { + zoneSelectionEnd = e.getPoint (); + updateSelectionLayer (); + } + public void endsZoneSelection (MouseEvent e) { + removeAllSelectedItems (); + zoneSelectionEnd = e.getPoint (); + Point2D.Double realStart = scaleViewToModel (zoneSelectionStart); + Rectangle2D.Double selectedZone = new Rectangle2D.Double (realStart.x, realStart.y, 0, 0); + selectedZone.add (scaleViewToModel (zoneSelectionEnd)); + for (Item item : workspace.getAllItems ()) { + if (!isSticky (item) && item.inside (selectedZone)) + addSelectedItem (item); + } + zoneSelectionEnd = zoneSelectionStart = null; + updateSelection (); + } + // ======================================== + Line2D.Double selectedBound; + protected void setSelectedBound (Line2D.Double selectedBound) { + this.selectedBound = selectedBound; + } + + protected void removeAllSelectedItems () { + for (JItem jItem : selectedItems.values ()) + remove (jItem); + selectedItems.clear (); + selectedBound = null; + selectedJItemHandlers.clear (); + } + protected boolean removeSelectedItem (Item item) { + selectedBound = null; + JItem jItem = selectedItems.remove (item.getId ()); + if (jItem == null) + return false; + remove (jItem); + return true; + } + protected void addSelectedItem (Item item) { + String itemId = item.getId (); + if (selectedItems.containsKey (itemId)) + return; + JItem jItem = JItem.getNewJItem (this, item); + selectedItems.put (itemId, jItem); + add (jItem); + setLayer (jItem, levelModelToView (item.getLevel ())); + } + + public void setSelectedItemsBySearch (String text) { + removeAllSelectedItems (); + if (text != null && !text.isEmpty ()) + for (Item item : workspace.getAllItems ()) + try { + if (item.match (text)) + addSelectedItem (item); + } catch (Exception e) { + // XXX un pb étrange !!! + // e.printStackTrace (); + // System.err.println ("coucou:"+e+" "+item+" "+item.getModel ()+" "+item.getPos ()); + } + updateSelection (); + } + public void selectAllItems () { + removeAllSelectedItems (); + for (Item item : workspace.getAllItems ()) + if (!isSticky (item)) + addSelectedItem (item); + updateSelection (); + } + public void setSelectedItems () { + removeAllSelectedItems (); + updateSelection (); + } + public void setSelectedItems (List items) { + removeAllSelectedItems (); + if (items == null) + return; + for (Item item : items) { + if (!isSticky (item)) + addSelectedItem (item); + } + updateSelection (); + } + public void setSelectedItems (Item item) { + removeAllSelectedItems (); + if (item != null) + addSelectedItem (item); + lastSelectedItem = item; + updateSelection (); + } + public void invertItemSelection (Item item) { + JItem jItem = selectedItems.remove (item.getId ()); + if (jItem == null) + addSelectedItem (item); + else + remove (jItem); + updateSelection (); + } + public void updateSelection () { + jAdecWatt.stateNotifier.broadcastUpdate (JAdecWatt.BroadcastSelection); + updateSelectionLayer (); + } + public int getNbSelectedItems () { + int result = 0; + for (String itemId : selectedItems.keySet ()) + if (workspace.containsItem (itemId)) + result++; + return result; + } + public Vector getSelectedItems () { + int nbSelected = selectedItems.size (); + Vector items = new Vector (nbSelected); + if (nbSelected < 1) + return items; + for (String itemId : selectedItems.keySet ()) { + if (workspace.containsItem (itemId)) + items.add (selectedItems.get (itemId).getItem ()); + } + return items; + } + + protected int nbOverlapAccs (Hashtable> overlapAccs) { + int result = 0; + for (ArrayList accs : overlapAccs.values ()) + result += accs.size (); + return result; + } + protected void setSelectedAcc () { + if (selectedAcc == null) + return; + remove (selectedAcc); + selectedAcc = null; + updateSelection (); + } + protected void setSelectedAcc (Hashtable> overlapAccs, int idx) { + for (Item item : overlapAccs.keySet ()) { + ArrayList accs = overlapAccs.get (item); + int size = accs.size (); + if (idx >= size) { + idx -= size; + continue; + } + selectedAcc = new JAcc (this, item, accs.get (idx)); + add (selectedAcc); + setLayer (selectedAcc, levelModelToView (item.getLevel ())); + } + updateSelection (); + } + + // ======================================== + protected Hashtable selectedJItemHandlers = new Hashtable (); + protected ArrayList newJLabel = new ArrayList (); + public void recordJLabel (JLabel jLabel) { + newJLabel.add (jLabel); + } + public void updateSelectionLayer () { + AffineTransform af = selectionGraphics.getTransform (); + jSelectionPane.invalidate (); + newJLabel.clear (); + selectionGraphics.setBackground (noColor); + selectionGraphics.clearRect (0, 0, currentSize.width, currentSize.height); + selectionGraphics.setColor (selectionColor); + if (zoneSelectionStart != null) { + int x = Math.min (zoneSelectionStart.x, zoneSelectionEnd.x); + int y = Math.min (zoneSelectionStart.y, zoneSelectionEnd.y); + int width = Math.abs (zoneSelectionEnd.x - zoneSelectionStart.x); + int height = Math.abs (zoneSelectionEnd.y - zoneSelectionStart.y); + selectionGraphics.fillRect (x, y, width, height); + } + if (selectedAcc != null) { + // XXX selectionGraphics à l'échelle ? + Item item = selectedAcc.getItem (); + Acc acc = selectedAcc.getAcc (); + String accId = acc.getId (); + DimensionDouble accSize = item.getAccSize (accId); + double halfWidth = accSize.width*scale/2, halfHeight = accSize.height*scale/2; + AffineTransform at = AffineTransform.getRotateInstance (Math.toRadians (item.getThetaDegree ())); + double [] bounds = new double [] {-halfWidth, -halfHeight, -halfWidth, halfHeight, halfWidth, halfHeight, halfWidth, -halfHeight}; + at.transform (bounds, 0, bounds, 0, 4); + Point accPos = selectedAcc.getLocation (); + int [] x = new int[4]; + int [] y = new int[4]; + for (int i = 0; i < 4; i++) { + x[i] = (int) bounds [2*i]+accPos.x+8; + y[i] = (int) bounds [2*i+1]+accPos.y+8; + } + selectionGraphics.fillPolygon (x, y, 4); + } + // XXX selectionGraphics à l'échelle ? + for (String itemId : selectedItems.keySet ()) { + if (!workspace.containsItem (itemId)) + continue; + try { + JItem jItem = selectedItems.get (itemId); + Item item = jItem.getItem (); + double [] bounds = jItem.getCurrentBounds (); + int [] x = new int[4]; + int [] y = new int[4]; + for (int i = 0, j = 1, k = 0; k < 4; i += 2, j += 2, k++) { + x [k] = (int) (bounds [i]*scale); + y [k] = (int) (bounds [j]*scale); + } + selectionGraphics.fillPolygon (x, y, 4); + if (item.getPropNoMouse (Prop.PropSize)) + continue; + + JItemHandler handler = selectedJItemHandlers.get (jItem); + if (handler == null) + selectedJItemHandlers.put (jItem, handler = new JItemHandler (this, jSelectionPane, jItem, !(jItem instanceof JComp))); + handler.setCurrentBounds (bounds); + } catch (Exception e) { + e.printStackTrace (); + // XXX + } + } + for (Component component : jSelectionPane.getComponents ()) + if (!newJLabel.contains (component)) + jSelectionPane.remove (component); + for (JLabel label : newJLabel) + if (!jSelectionPane.isAncestorOf (label)) + jSelectionPane.add (label); + selectionGraphics.scale (scale, scale); + if (selectedBound != null) { + selectionGraphics.setPaint (selectionBoundColor); + selectionGraphics.setStroke (new BasicStroke (2*closePixelsBounds/(float)scale, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND, 1f)); + if (selectedBound.x1 == selectedBound.x2 && selectedBound.y1 == selectedBound.y2) { + double r = closePixelsItems/scale, dr = r+r; + java.awt.Shape disc = new java.awt.geom.Ellipse2D.Double (selectedBound.x1-r, selectedBound.y1-r, dr, dr); + selectionGraphics.draw (disc); + } else + selectionGraphics.draw (selectedBound); + } + selectionGraphics.setTransform (af); + jSelectionPane.repaint (); + jSelectionPane.validate (); + } + + // ======================================== + public void scrollView (boolean horizontal, int delta) { + JScrollPaneWorkspace jScrollPaneWorkspace = getJScrollPaneWorkspace (); + JScrollBar jScrollBar = horizontal ? jScrollPaneWorkspace.getHorizontalScrollBar () : jScrollPaneWorkspace.getVerticalScrollBar (); + int min = jScrollBar.getMinimum (); + int max = jScrollBar.getMaximum (); + int step = (max-min)/10; + jScrollBar.setValue (Math.min (max, Math.max (min, jScrollBar.getValue ()+delta*step))); + jScrollPaneWorkspace.updateScale (); + } + public void changeScale (Point mousePos, int delta) { + JViewport jViewport = getJScrollPaneWorkspace ().getViewport (); + Point viewPosA = jViewport.getViewPosition (); + Point2D.Double realPos = scaleViewToModel (mousePos); + setScale (delta < 0 ? scale+scaleStep : scale-scaleStep); + Point viewPosB = scaleModelToView (realPos); + viewPosB.translate (-mousePos.x+viewPosA.x, -mousePos.y+viewPosA.y); + if (viewPosB.x < 0) + viewPosB.x = 0; + if (viewPosB.y < 0) + viewPosB.y = 0; + jViewport.setViewPosition (viewPosB); + } + public void initScale () { + initScale = Math.rint (Math.min (jAdecWatt.screenSize.width/realSize.getWidth (), jAdecWatt.screenSize.height/realSize.getHeight ())); + minScale = initScale/10; + maxScale = initScale*10; + scaleStep = minScale/2; + setScale (initScale); + } + public void setScale (double scale) { + scale = Math.rint (Math.max (minScale, Math.min (maxScale, scale))); + this.scale = scale; + currentSize = scaleModelToView (realSize); + setPreferredSize (currentSize); + selectionGraphics = createGraphicsLayer (jSelectionPane); + for (JItem jItem : selectedItems.values ()) + jItem.setScale (); + // XXX selectedAcc.setScale (); + updateSelectionLayer (); + repaint (); + jAdecWatt.stateNotifier.broadcastUpdate (JAdecWatt.BroadcastChangeScale); + JScrollPaneWorkspace jScrollPaneWorkspace = getJScrollPaneWorkspace (); + if (jScrollPaneWorkspace == null) + return; + jScrollPaneWorkspace.updateScale (); + } + + // ======================================== + public int levelModelToView (double level) { + return (int) (level*10); + } + public Point2D.Double scaleViewToModel (Point pos) { + return new Point2D.Double (pos.x/scale, pos.y/scale); + } + public DimensionDouble scaleViewToModel (Dimension size) { + return new DimensionDouble (size.width/scale, size.height/scale); + } + public Point scaleModelToView (Point2D pos) { + return new Point ((int)(pos.getX ()*scale), (int)(pos.getY ()*scale)); + } + public Dimension scaleModelToView (DimensionDouble size) { + return new Dimension ((int)(size.getWidth ()*scale), (int)(size.getHeight ()*scale)); + } + + // ======================================== + public void rotation (MouseEvent e) { + if (notEditable ()) + return; + for (String itemId : selectedItems.keySet ()) { + if (!workspace.containsItem (itemId)) + continue; + try { + // XXX et segm ? + JComp jComp = (JComp) selectedItems.get (itemId); + if (jComp.comp.getPropNoMouse (Prop.PropRot)) + continue; + jComp.rotation (SwingUtilities.convertMouseEvent (this, e, jComp)); + } catch (Exception e2) { + // XXX c'est un segm + } + } + updateSelectionLayer (); + } + Point firstClick, lastClick; + Point2D.Double refHandle; + DimensionDouble handleOff; + public void dragItems (MouseEvent e) { + if (notEditable () || firstClick == null) + return; + Point newPos = e.getPoint (); + + Point2D.Double newModelPos = new Point2D.Double (newPos.x/scale+handleOff.width, newPos.y/scale+handleOff.height); + setSelectedBound (e.isControlDown () ? null : workspace.getMagnetPoint (newModelPos, onGrid (newModelPos), closePixelsBounds/scale)); + + lastClick = newPos; + DimensionDouble delta = new DimensionDouble (newModelPos.x-refHandle.x, newModelPos.y-refHandle.y); + refHandle = newModelPos; + for (String itemId : selectedItems.keySet ()) { + if (!workspace.containsItem (itemId)) + continue; + JItem jItem = selectedItems.get (itemId); + if (jItem.getItem ().getPropNoMouse (Prop.PropPos)) + continue; + jItem.dragItem (delta); + } + updateSelectionLayer (); + } + public void dragAcc (MouseEvent e) { + if (notEditable () || lastClick == null) + return; + Point newPos = e.getPoint (); + Dimension delta = new Dimension (newPos.x-lastClick.x, newPos.y-lastClick.y); + lastClick = newPos; + selectedAcc.dragAcc (delta); + } + + // ======================================== + public void dropAcc (MouseEvent e) { + if (notEditable ()) + return; + try { + Point2D.Double realPos = scaleViewToModel (e.getPoint ()); + ArrayList dstItems = workspace.findItems (realPos, closePixelsItems/scale); + PermanentDB permanentDB = adecWatt.getPermanentDB (); + if (selectedAcc.getAcc ().getDirectUnit ().isDescendingFrom (permanentDB.getPowerPlugId ())) { + + + if (dstItems.size () < 1) { + eraseAcc (selectedAcc.getAcc ()); + return; + } + // rechercher un "avec prise" le plus proche + // XXX Il peut y avoir plusieurs items + ArrayList dstAccs = dstItems.get (0).findAccs (realPos, closePixelsAccs/scale); + // XXX Il peut y avoir plusieurs accs + // XXX prendre le premier acc compatible et libre + Acc dstAcc = dstAccs.size () < 1 ? null : dstAccs.get (0); + try { + // XXX et segm + storyConnect ((Comp) selectedAcc.getItem (), selectedAcc.getAcc (), (Comp) dstItems.get (0), dstAcc, permanentDB.getPowerSocketId ()); + } catch (Exception e2) { + // c'est un segm + } + } + if (dstItems.size () < 1) { + // si pas prise mais "avec prise" => prendre la première libre + eraseAcc (selectedAcc.getAcc ()); + return; + } + // XXX sinon traiter la gélatine + } catch (Exception e2) { + e2.printStackTrace (); + } finally { + setSelectedAcc (); + } + } + public void dropAcc (Accessory accessory, Point pos) { + if (notEditable () || accessory == null) + return; + ArrayList overlapItems = findItems (pos); + if (overlapItems.size () < 1) + return; + //|| isSticky (jItem.item)) + // XXX + workspace.storyAddAcc (overlapItems.get (0), accessory); + } + static public Point2D.Double onGrid (Point2D.Double pos) { + return new Point2D.Double (gridStep*Math.rint (pos.x/gridStep), gridStep*Math.rint (pos.y/gridStep)); + } + public void dropSegm (NonWorkspace model, Point mPos) { + workspace.storyAddSegm (model, onGrid (scaleViewToModel (mPos))); + } + public void dropComp (NonWorkspace model, Point mPos) { + workspace.storyAddComp (model, onGrid (scaleViewToModel (mPos))); + } + public void eraseAcc (Acc acc) { + workspace.storyRemoveAcc (acc); + } + public void cloneItem (Item item, Point pos) { + workspace.storyCloneItem (item, scaleViewToModel (pos)); + } + public void hideShowItem (List items, boolean hidden) { + workspace.storyHideShowItem (items, hidden); + } + public void eraseItem (List items) { + workspace.storyRemoveItems (items); + } + public void storyRotSelectedComp () { + // XXX et segm + if (notEditable ()) + return; + int nbSelected = selectedItems.size (); + if (nbSelected < 1) + return; + Vector items = new Vector (nbSelected); + Vector thetas = new Vector (nbSelected); + for (String itemId : selectedItems.keySet ()) { + if (!workspace.containsItem (itemId)) + continue; + Item item = selectedItems.get (itemId).getItem (); + if (item.getPropNoMouse (Prop.PropRot)) + continue; + items.add (item); + thetas.add (selectedItems.get (itemId).getCurrentThetaDegree ()); + } + workspace.storyRotItem (items, thetas); + } + public void storyMoveSelectedItem (MouseEvent e) { + if (notEditable ()) + return; + try { + if (firstClick == null || firstClick.equals (e.getPoint ())) + return; + int nbSelected = selectedItems.size (); + if (nbSelected < 1) + return; + Vector items = new Vector (nbSelected); + Vector poss = new Vector (nbSelected); + for (String itemId : selectedItems.keySet ()) { + if (!workspace.containsItem (itemId)) + continue; + Item item = selectedItems.get (itemId).getItem (); + if (item.getPropNoMouse (Prop.PropPos)) + continue; + items.add (item); + poss.add (selectedItems.get (itemId).getCurrentPos ()); + } + workspace.storyMoveItem (items, poss); + } catch (Exception e2) { + e2.printStackTrace (); + } finally { + firstClick = lastClick = null; + refHandle = null; + handleOff = null; + } + } + public void storyRotResizeItem (JItem jItem) { + if (notEditable ()) + return; + workspace.storyRotResize (jItem.getItem (), jItem.getCurrentPos (), + jItem.getCurrentThetaDegree (), jItem.getCurrentSize ()); + } + + public void storyConnect (Comp srcComp, Acc srcAcc, Comp dstComp, Acc dstAcc, String dstModelId) { + if (notEditable ()) + return; + if (dstAcc == null) + dstAcc = dstComp.findEmbeddedBaseOn (dstModelId); + // XXX accessory powerSocket libre ! + if (dstAcc == null || !dstAcc.getDirectUnit ().isDescendingFrom (dstModelId)) + return; + // XXX recherche d'autres objets ? + workspace.storyConnect (srcComp, srcAcc, dstComp.getId (), dstAcc.getId ()); + } + + // ======================================== + public void updateStory () { + updateSelection (); + } + + public void displaySetSelectionItems (Object... objects) { + setSelectedItems ((List) objects[1]); + } + + public void displayNewItem (Object... objects) { + updateSelection (); + repaint (); + } + + public void displayRemoveItem (Object... objects) { + updateSelection (); + //setSelectedItems (); + repaint (); + } + + public void displayUpdateItem (Object... objects) { + try { + Item item = (Item) objects[0]; + selectedItems.get (item.getId ()).setItem (item); + } catch (Exception e) { + } + repaint (); + } + public void displayUpdatePermItem (Object... objects) { + NonWorkspace permItem = (NonWorkspace) objects[0]; + UnitNode ancestor = (UnitNode) permItem.getUnitNode (); + boolean repaint = false; + for (Item item : workspace.getAllItems ()) + if (item.getModel ().getUnitNode ().isNodeAncestor (ancestor)) { + repaint = true; + break; + } + if (! repaint) + return; + repaint (); + } + public void displayChangePos (Object... objects) { + for (Object obj : objects) { + JItem jItem = updateJItem (obj); + if (jItem == null) + continue; + jItem.setCurrentPos (); + } + } + + public void displayChangeRotSize (Object... objects) { + for (Object obj : objects) { + JItem jItem = updateJItem (obj); + if (jItem == null) + continue; + jItem.setCurrentSize (); + } + } + + public void displayChangeRot (Object... objects) { + for (Object obj : objects) { + // XXX et segm + JItem jItem = updateJItem (obj); + if (jItem == null) + return; + try { + jItem.setCurrentThetaDegree (); + } catch (Exception e) { + // XXX c'est un segm + } + } + } + private JItem updateJItem (Object obj) { + Item item = (Item) obj; + JItem jItem = selectedItems.get (item.getId ()); + if (jItem == null) + return null; + jItem.setItem (item); + return jItem; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/JZones.java b/src/java/adecWatt/view/JZones.java new file mode 100644 index 0000000..8c81442 --- /dev/null +++ b/src/java/adecWatt/view/JZones.java @@ -0,0 +1,613 @@ +package adecWatt.view; + +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.Graphics2D; +import java.awt.Graphics; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Shape; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; +import java.awt.geom.AffineTransform; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; +import java.util.ArrayList; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JLayeredPane; +import javax.swing.JScrollBar; +import javax.swing.JScrollPane; +import javax.swing.JSlider; +import javax.swing.JViewport; +import javax.swing.SwingUtilities; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; + +import misc.StateNotifier; +import misc.DimensionDouble; +import misc.Util; + +// XXX candidat "misc" +/** + Affiche des zones transparentes avec des poignées de déformation (bords ou coins). +*/ +@SuppressWarnings ("serial") public class JZones extends JLayeredPane { + + static public final int minPixels = 10; + static public final String + BroadcastSelectedLocationChange = "SelectedLocationChange", + BroadcastSelectedRateChange = "SelectedRateChange", + BroadcastSelectedChange = "SelectedChange", + BroadcastCreateZone = "CreateZone", + BroadcastChangeScale = "ChangeScale"; + static public final Color defineColor = new Color (128, 128, 128, 64); + + // ======================================== + public StateNotifier stateNotifier = new StateNotifier (); + + private DimensionDouble realSize; + private Rectangle2D.Double backgroundShape; + private double rate; + // gestion du zoom + private double scale = 1, initScale = 1, minScale = 1, maxScale = 1, scaleStep = 1; + private double minSide; + + /** Fond du panneau. */ + private BufferedImage background; + private AffineTransform bgat; + + public DimensionDouble getRealSize () { return realSize; } + public double getScale () { return scale; } + public Rectangle2D.Double getMaxRate (double rate) { + double width = realSize.width, height = realSize.height; + if (rate == 0 || rate == this.rate) + ; + else if (rate < this.rate) + width = rate*height; + else + height = width/rate; + return new Rectangle2D.Double (0, 0, width, height); + } + + public class Zone { + private Rectangle2D.Double rectangle; + private Color color; + private int rotation; + private Zone pair; + private BufferedImage image; + Rectangle2D.Double imageRectangle; + + public Zone (Rectangle2D.Double rectangle, Color color, BufferedImage image) { + this.rectangle = new Rectangle2D.Double (rectangle.x, rectangle.y, rectangle.width, rectangle.height); + this.color = color; + setImage (image); + } + public Zone (Rectangle2D.Double rectangle, Zone pair, BufferedImage image) { + this.rectangle = new Rectangle2D.Double (rectangle.x, rectangle.y, rectangle.width, rectangle.height); + this.color = pair.color; + this.pair = pair; + setImage (image); + } + public boolean hasPair () { return pair != null; } + public Zone getPair () { return pair; } + public BufferedImage getImage () { return image; } + public DimensionDouble getRealSize () { return realSize; } + public Rectangle2D.Double getRectangle () { return rectangle; } + public int getRotation () { return rotation; } + public void turnLeft () { setRotation (rotation+1); } + public void turnRight () { setRotation (rotation-1); } + public void setImage (BufferedImage image) { + this.image = image; + imageRectangle = null; + if (image == null) + return; + imageRectangle = new Rectangle2D.Double (0, 0, image.getWidth (), image.getHeight ()); + repaint (); + } + public void drawImage (Graphics2D g2) { + if (image == null) + return; + g2.drawImage (image, new AffineTransform (), null); + } + public double getScale () { + return rotation % 2 == 1 ? rectangle.width/pair.rectangle.height : rectangle.width/pair.rectangle.width; + } + private void setRotation (int rotation) { + rotation += 4; + rotation %= 4; + if (this.rotation == rotation) + return; + if ((this.rotation+rotation)%2 == 1) { + double tmp = rectangle.width; + rectangle.width = rectangle.height; + rectangle.height = tmp; + fitLandscape (); + } else if (selectedZone == this) + jZoneHandler.updateRectangle (rectangle); + this.rotation = rotation; + repaint (); + } + public void updatePairRate () { + if (pair == null) + return; + double rate = pair.rectangle.width/pair.rectangle.height; + if (rotation % 2 == 1) + rate = 1/rate; + setRate (rate); + } + private void setRate (double rate) { + double width = rectangle.width, height = rectangle.height; + double prevRate = width / height; + if (prevRate == rate) + return; + double maxWidth = realSize.width - rectangle.x, maxHeight = realSize.height - rectangle.y; + if (prevRate > 1) { + height = width/rate; + if (height > maxHeight) { + height = maxHeight; + width = rate*height; + } + } else { + width = rate*height; + if (width > maxWidth) { + width = maxWidth; + height = width/rate; + } + } + setBounds (rectangle.x, rectangle.y, width, height); + } + public void setLocation (double x, double y) { + x = Math.max (.0, Math.min (realSize.width-rectangle.width, x)); + y = Math.max (.0, Math.min (realSize.height-rectangle.height, y)); + rectangle.x = x; + rectangle.y = y; + if (selectedZone == this) + jZoneHandler.updateRectangle (rectangle); + repaint (); + stateNotifier.broadcastUpdate (BroadcastSelectedLocationChange); + } + public void setBounds (double x, double y, double width, double height) { + rectangle.width = Math.max (minSide, Math.min (realSize.width, width)); + rectangle.height = Math.max (minSide, Math.min (realSize.height, height)); + setLocation (x, y); + stateNotifier.broadcastUpdate (BroadcastSelectedRateChange); + } + public void fitLandscape () { + double rate = rectangle.width/rectangle.height; + if (rectangle.width > realSize.width) { + rectangle.width = realSize.width; + rectangle.height = rectangle.width/rate; + } + if (rectangle.height > realSize.height) { + rectangle.height = realSize.height; + rectangle.width = rate*rectangle.height; + } + rectangle.x = Math.min (rectangle.x, realSize.width - rectangle.width); + rectangle.y = Math.min (rectangle.y, realSize.height - rectangle.height); + if (selectedZone == this) + jZoneHandler.updateRectangle (rectangle); + } + public void projection (Graphics2D g2) { + Rectangle2D.Double refRectangle = pair == null ? imageRectangle : pair.rectangle; + double copyScale = rotation%2 == 1 ? rectangle.width/refRectangle.height : rectangle.width/refRectangle.width; + double theta = Math.PI*rotation/2; + double halfWidth = refRectangle.width/2, halfHeight = refRectangle.height/2; + g2.clip (rectangle); + g2.translate (rectangle.x, rectangle.y); + g2.scale (copyScale, copyScale); + if (rotation % 2 == 1) + g2.translate (halfHeight, halfWidth); + else + g2.translate (halfWidth, halfHeight); + g2.rotate (-theta); + g2.translate (-halfWidth, -halfHeight); + g2.translate (-refRectangle.x, -refRectangle.y); + } + }; + + // ======================================== + ArrayList zones = new ArrayList (); + private JZoneHandler jZoneHandler; + private boolean cornerSelection, createZone = true; + + public void setCornerSelection (boolean cornerSelection) { + if (this.cornerSelection == cornerSelection) + return; + this.cornerSelection = cornerSelection; + if (jZoneHandler != null) + jZoneHandler.setVisible (false); + jZoneHandler = new JZoneHandler (cornerSelection); + } + public void setCreateZone (boolean createZone) { + this.createZone = createZone; + repaint (); + } + public boolean setLandscape (boolean landscape) { + if (rate > 1 == landscape) + return false; + realSize = new DimensionDouble (realSize.height, realSize.width); + backgroundShape = new Rectangle2D.Double (.0, .0, realSize.width, realSize.height); + rate = realSize.width/realSize.height; + for (Zone zone : zones) + zone.fitLandscape (); + repaint (); + return true; + } + public void setCenterScale (double scale) { + JViewport jViewport = getJScrollPane ().getViewport (); + Rectangle prevView = jViewport.getViewRect (); + Point2D.Double realCenter = scaleViewToModel (new Point (prevView.x+prevView.width/2, prevView.y+prevView.height/2)); + setScale (scale); + Rectangle nextView = jViewport.getViewRect (); + Point viewCenter = scaleModelToView (realCenter); + viewCenter.translate (-nextView.width/2, -nextView.height/2); + if (viewCenter.x < 0) + viewCenter.x = 0; + if (viewCenter.y < 0) + viewCenter.y = 0; + jViewport.setViewPosition (viewCenter); + } + public void resetScale () { setScale (initScale); } + public void setScale (double scale) { + scale = Math.max (minScale, Math.min (maxScale, scale)); + this.scale = scale; + minSide = minPixels/scale; + setPreferredSize (scaleModelToView (realSize)); + if (selectedZone != null) + jZoneHandler.updateRectangle (selectedZone.rectangle); + if (background != null) + bgat = AffineTransform.getScaleInstance (realSize.width/background.getWidth (), realSize.height / background.getHeight ()); + repaint (); + stateNotifier.broadcastUpdate (BroadcastChangeScale); + } + + // ======================================== + public void setBackground (BufferedImage background) { + this.background = background; + setScale (scale); + } + + public JZones (DimensionDouble realSize, int maxSide) { + this.realSize = realSize; + setCornerSelection (true); + backgroundShape = new Rectangle2D.Double (.0, .0, realSize.width, realSize.height); + rate = realSize.width/realSize.height; + if (maxSide > 0) + initScale = maxSide/Math.max (realSize.getWidth (), realSize.getHeight ()); + scale = initScale; + minScale = initScale/10; + maxScale = initScale*10; + scaleStep = minScale/2; + addMouseListener (jZonesMouseAdapter); + addMouseMotionListener (jZonesMouseAdapter); + addMouseWheelListener (jZonesMouseAdapter); + setScale (scale); + } + + // ======================================== + public Zone addZone (Color color) { + return addZone (new Zone (getMaxRate (0), color, null)); + } + public Zone addZone (Color color, Rectangle2D.Double rectangle) { + return addZone (new Zone (rectangle, color, null)); + } + public Zone addZone (Color color, BufferedImage image) { + return addZone (new Zone (getMaxRate (((double)image.getWidth ())/image.getHeight ()), color, image)); + } + public Zone addZone (Zone pair, BufferedImage image) { + return addZone (new Zone (getMaxRate (pair.rectangle.width/pair.rectangle.height), pair, image)); + } + public Zone addZone (Zone zone) { + zones.add (zone); + repaint (); + return zone; + } + public void turnZoneLeft () { + if (selectedZone == null) + return; + selectedZone.turnLeft (); + } + public void turnZoneRight () { + if (selectedZone == null) + return; + selectedZone.turnRight (); + } + public void removeZone (Zone zone) { + if (zone == null) + return; + if (selectedZone == zone) + selectZone (null); + zones.remove (zone); + repaint (); + } + + public void paint (Graphics g) { + Graphics2D g2 = (Graphics2D) g; + AffineTransform iat = g2.getTransform (); + Shape clip = g2.getClip (); + g2.scale (scale, scale); + g2.setColor (Color.WHITE); + g2.fill (backgroundShape); + if (background != null) + g2.drawImage (background, bgat, null); + g2.setColor (Color.BLACK); + g2.setStroke (new BasicStroke ((float) (1/scale))); + g2.draw (backgroundShape); + for (Zone zone : zones) { + if (zone.pair == null && zone.image == null) + continue; + double refBgScale = zone.pair == null ? 1 : zone.pair.getRealSize ().width/zone.image.getWidth (); + g2.setTransform (iat); + g2.setClip (clip); + g2.scale (scale, scale); + zone.projection (g2); + AffineTransform bat = new AffineTransform (); + bat.scale (refBgScale, refBgScale); + g2.drawImage (zone.image, bat, null); + } + g2.setTransform (iat); + g2.setClip (clip); + g2.scale (scale, scale); + for (Zone zone : zones) { + Color color = zone.color; + Color aColor = new Color (color.getRed (), color.getGreen (), color.getBlue (), 64); + g2.setColor (aColor); + g2.fill (zone.rectangle); + } + g2.setTransform (iat); + g2.setColor (defineColor); + if (createZone && defineSelectionStart != null) { + Rectangle selection = new Rectangle (defineSelectionStart); + selection.add (defineSelectionEnd); + g2.fill (selection); + } + paintChildren (g); + } + + public DimensionDouble scaleViewToModel (Dimension size) { + return new DimensionDouble (size.width/scale, size.height/scale); + } + public Dimension scaleModelToView (DimensionDouble size) { + return new Dimension ((int)(size.getWidth ()*scale), (int)(size.getHeight ()*scale)); + } + public Point2D.Double scaleViewToModel (Point pos) { + return new Point2D.Double (pos.x/scale, pos.y/scale); + } + public Point scaleModelToView (Point2D pos) { + return new Point ((int)(pos.getX ()*scale), (int)(pos.getY ()*scale)); + } + + private JScrollPane getJScrollPane () { + for (Container parent = getParent () ; parent != null; parent = parent.getParent ()) + if (parent instanceof JScrollPane) + return (JScrollPane) parent; + return null; + } + public void scrollView (boolean horizontal, int delta) { + JScrollPane jScrollPane = getJScrollPane (); + JScrollBar jScrollBar = horizontal ? jScrollPane.getHorizontalScrollBar () : jScrollPane.getVerticalScrollBar (); + int min = jScrollBar.getMinimum (); + int max = jScrollBar.getMaximum (); + int step = (max-min)/10; + jScrollBar.setValue (Math.min (max, Math.max (min, jScrollBar.getValue ()+delta*step))); + } + + public void changeScale (Point mousePos, int delta) { + JViewport jViewport = getJScrollPane ().getViewport (); + Point viewPosA = jViewport.getViewPosition (); + Point2D.Double realPos = scaleViewToModel (mousePos); + setScale (delta < 0 ? scale+scaleStep : scale-scaleStep); + Point viewPosB = scaleModelToView (realPos); + viewPosB.translate (-mousePos.x+viewPosA.x, -mousePos.y+viewPosA.y); + if (viewPosB.x < 0) + viewPosB.x = 0; + if (viewPosB.y < 0) + viewPosB.y = 0; + jViewport.setViewPosition (viewPosB); + } + + // ======================================== + private Zone selectedZone; + public Zone getSelectedZone () { + return selectedZone; + } + public void selectLastZone () { + if (zones.size () < 0) + return; + selectZone (zones.get (zones.size ()-1)); + } + public void selectZone (Zone zone) { + if (selectedZone == zone) + return; + selectZoneQuiet (zone); + stateNotifier.broadcastDisplay (BroadcastSelectedChange, this, zone); + } + public Zone findPair (Zone pair) { + if (pair == null) { + return null; + } + for (Zone zone : zones) + if (zone.pair == pair) { + return zone; + } + return null; + } + public void selectZoneQuiet (Zone zone) { + selectedZone = zone; + if (selectedZone != null) + jZoneHandler.updateRectangle (selectedZone.rectangle); + jZoneHandler.setVisible (selectedZone != null); + } + + private Point defineSelectionStart, defineSelectionEnd; + private MouseAdapter jZonesMouseAdapter = new MouseAdapter () { + Point2D.Double mousePosOnZone; + public void mousePressed (MouseEvent e) { + if (SwingUtilities.isRightMouseButton (e)) { + selectZone (null); + return; + } + Point2D.Double posInPage = scaleViewToModel (e.getPoint ()); + ArrayList overlap = new ArrayList (); + for (Zone zone : zones) + if (zone.rectangle.contains (posInPage.x, posInPage.y)) + overlap.add (zone); + if (overlap.size () < 1) { + selectZone (null); + defineSelectionStart = defineSelectionEnd = e.getPoint (); + return; + } + JZones.this.selectZone (overlap.get ((zones.indexOf (selectedZone)+1)%overlap.size ())); + mousePosOnZone = posInPage; + mousePosOnZone.x -= selectedZone.rectangle.x; + mousePosOnZone.y -= selectedZone.rectangle.y; + } + public void mouseReleased (MouseEvent e) { + if (!createZone || defineSelectionStart == null) + return; + Rectangle selection = new Rectangle (defineSelectionStart); + selection.add (defineSelectionEnd); + defineSelectionStart = defineSelectionEnd = null; + Point2D.Double start = scaleViewToModel (selection.getLocation ()); + DimensionDouble dim = scaleViewToModel (selection.getSize ()); + Rectangle2D.Double area = new Rectangle2D.Double (start.x, start.y, dim.width, dim.height); + if (area.width > minSide && area.height > minSide) + stateNotifier.broadcastDisplay (BroadcastCreateZone, area); + repaint (); + } + public void mouseDragged (MouseEvent e) { + if (defineSelectionStart != null) { + defineSelectionEnd = e.getPoint (); + repaint (); + } + if (selectedZone == null) + return; + Point2D.Double posInPage = scaleViewToModel (e.getPoint ()); + selectedZone.setLocation (posInPage.x - mousePosOnZone.x, posInPage.y - mousePosOnZone.y); + } + public void mouseWheelMoved (MouseWheelEvent e) { + try { + if (0 != (e.getModifiersEx () & (MouseWheelEvent.SHIFT_MASK|MouseWheelEvent.SHIFT_DOWN_MASK))) + scrollView (true, e.getWheelRotation ()); + else if (0 != (e.getModifiersEx () & (MouseWheelEvent.CTRL_MASK|MouseWheelEvent.CTRL_DOWN_MASK))) + changeScale (e.getPoint (), e.getWheelRotation ()); + else + scrollView (false, e.getWheelRotation ()); + } catch (Exception e2) { + } + } + }; + + // ======================================== + static public final ImageIcon handlerImage = Util.loadActionIcon ("handler"); + public class JZoneHandler { + private boolean cornerSelection; + private double[] x = new double [4], y = new double [4]; + private JLabel[] handlers = new JLabel [4]; + private double oposedX, oposedY; + + public JZoneHandler (final boolean cornerSelection) { + this.cornerSelection = cornerSelection; + for (int i = 0; i < 4; i++) { + final JLabel handler = new JLabel (handlerImage); + final int index = i; + handlers [i] = handler; + handler.setSize (8, 8); + MouseAdapter mouseAdapter = new MouseAdapter () { + Point mousePosOnHandler; + public void mousePressed (MouseEvent e) { + if (SwingUtilities.isRightMouseButton (e)) { + selectZone (null); + return; + } + oposedX = x[(index+2)%4]; + oposedY = y[(index+2)%4]; + mousePosOnHandler = e.getPoint (); + } + public void mouseDragged (MouseEvent e) { + Point deltaMousePos = e.getPoint (); + deltaMousePos.x -= mousePosOnHandler.x; + deltaMousePos.y -= mousePosOnHandler.y; + Point2D.Double deltaInPage = scaleViewToModel (deltaMousePos); + double newX = Math.max (.0, Math.min (realSize.width, x[index]+deltaInPage.x)); + double newY = Math.max (.0, Math.min (realSize.height, y[index]+deltaInPage.y)); + if (cornerSelection) { + double cx = (oposedX+newX)/2; + double cy = (oposedY+newY)/2; + double width = Math.abs (oposedX-newX); + double height = Math.abs (oposedY-newY); + selectedZone.setBounds (cx - width/2, cy - height/2, width, height); + return; + } + Rectangle2D.Double rectangle = selectedZone.rectangle; + double rate = rectangle.width/rectangle.height; + if (index%2 == 0) { + double height = Math.max (minSide, index == 0 ? oposedY-newY : newY-oposedY); + double width = Math.max (minSide, Math.min (rate*height, Math.min (x[0], realSize.width - x[0])*2)); + height = width/rate; + selectedZone.setBounds (x[0]-width/2, index == 0 ? y[2]-height : y[0], width, height); + } else { + double width = Math.max (minSide, index == 3 ? oposedX-newX : newX-oposedX); + double height = Math.max (minSide, Math.min (width/rate, Math.min (y[1], realSize.height - y[1])*2)); + width = rate*height; + selectedZone.setBounds (index == 3 ? x[1]-width : x[3], y[1]-height/2, width, height); + } + } + }; + handler.addMouseListener (mouseAdapter); + handler.addMouseMotionListener (mouseAdapter); + JZones.this.add (handler); + JZones.this.setLayer (handler, 10+i); + handler.setVisible (false); + } + } + public void updateRectangle (Rectangle2D.Double rectangle) { + if (cornerSelection) { + x[0] = x[3] = rectangle.x; + y[0] = y[1] = rectangle.y; + x[1] = x[2] = rectangle.x+rectangle.width; + y[2] = y[3] = rectangle.y+rectangle.height; + } else { + x[3] = rectangle.x; + x[0] = x[2] = rectangle.x+rectangle.width/2; + x[1] = rectangle.x+rectangle.width; + y[0] = rectangle.y; + y[1] = y[3] = rectangle.y+rectangle.height/2; + y[2] = rectangle.y+rectangle.height; + } + for (int i = 0; i < 4; i++) + handlers[i].setLocation ((int) (x[i]*scale-4), (int) (y[i]*scale-4)); + } + public void setVisible (boolean visible) { + for (int i = 0; i < 4; i++) + handlers[i].setVisible (visible); + } + }; + + public class SizeSlider extends JSlider implements ChangeListener { + public SizeSlider () { + super (0, 200, 100); + setMajorTickSpacing (50); + setMinorTickSpacing (10); + setPaintTicks (true); + setSnapToTicks (true); + addChangeListener (this); + stateNotifier.addUpdateObserver (this, JZones.BroadcastChangeScale); + } + public void stateChanged (ChangeEvent e) { + setCenterScale (Math.pow (10, getValue ()/100.-1)*initScale); + } + public void updateChangeScale () { + removeChangeListener (this); + setValue ((int) (100*(Math.log10 (scale/initScale)+1))); + addChangeListener (this); + } + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/PrintWorkspace.java b/src/java/adecWatt/view/PrintWorkspace.java new file mode 100644 index 0000000..9a560aa --- /dev/null +++ b/src/java/adecWatt/view/PrintWorkspace.java @@ -0,0 +1,150 @@ +package adecWatt.view; + +//import java.awt.RenderingHints; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Graphics2D; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Shape; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.awt.print.PageFormat; +import java.awt.print.Printable; +import java.awt.print.PrinterJob; +import java.util.ArrayList; +import javax.swing.JFrame; +import javax.swing.JOptionPane; +import javax.swing.JPanel; + +import misc.DimensionDouble; +import misc.Log; +import misc.OwnFrame; + +import adecWatt.model.Prop; +import adecWatt.model.unit.Workspace; + +public class PrintWorkspace implements Printable { + + static public final int formatScale = 20; + static public final int labelSpace = 4; + + // ======================================== + static public void print (OwnFrame controller, PrinterJob printer, Workspace workspace) { + ArrayList jPreviewImpPtr = new ArrayList (); + try { + PrintWorkspace printWorkspace = new PrintWorkspace (workspace); + printWorkspace.resetPrint (controller, jPreviewImpPtr); + printer.setPrintable (printWorkspace); + printer.print (); + if (printWorkspace.canceled) { + printer.cancel (); + return; + } + return; + } catch (Throwable t) { + Log.keepLastException ("Printworkspace::print", t); + } + } + + // ======================================== + private Workspace workspace; + private Image printPage; + private BufferedImage workspaceImage, workspaceImageNoCircuit, posterImage, patchImage; + private JPanel patchJPanel; + private OwnFrame controller; + ArrayList jPreviewImpPtr; + boolean canceled; + + public PrintWorkspace (Workspace workspace) { + this.workspace = workspace; + workspaceImage = getIcon (workspace, 800, true); + workspaceImageNoCircuit = getIcon (workspace, 800, false); + try { + posterImage = workspace.getIconImage (Prop.PropPoster).reference; + } catch (Exception e) { + } + try { + patchJPanel = new JPatch (workspace.getPatch ()); + JFrame jFrame = new JFrame (); + jFrame.setVisible (false); + jFrame.getContentPane ().add (patchJPanel, BorderLayout.CENTER); + jFrame.pack (); + patchImage = new BufferedImage (patchJPanel.getWidth (), patchJPanel.getHeight (), BufferedImage.TYPE_INT_ARGB); + patchJPanel.paint (patchImage.getGraphics ()); + } catch (Exception e) { + } + } + public void resetPrint (OwnFrame controller, ArrayList jPreviewImpPtr) { + this.controller = controller; + this.jPreviewImpPtr = jPreviewImpPtr; + } + public synchronized int print (Graphics g1, PageFormat pf, int pageIndex) { + if (pageIndex > 0) + return NO_SUCH_PAGE; + if (jPreviewImpPtr.size () < 1) { + JPreviewImp jPreviewImp = new JPreviewImp (workspace.getRealSize (), + new DimensionDouble (pf.getImageableWidth (), pf.getImageableHeight ()), + workspaceImage, workspaceImageNoCircuit, posterImage, patchImage, 400); + jPreviewImpPtr.add (jPreviewImp); + if (JOptionPane.showConfirmDialog (controller.getJFrame (), jPreviewImp, misc.Bundle.getTitle ("Layout"), JOptionPane.YES_NO_OPTION) + != JOptionPane.YES_OPTION) { + canceled = true; + return NO_SUCH_PAGE; + } + } + Graphics2D printGraphics = (Graphics2D) g1; + printGraphics.translate ((int) pf.getImageableX ()+1, (int) pf.getImageableY ()); + print (printGraphics, 1, jPreviewImpPtr.get (0)); + return PAGE_EXISTS; + } + + // ======================================== + public void print (Graphics2D printGraphics, double lineWidth, JPreviewImp jPreviewImp) { + if (jPreviewImp.preview.zones.size () < 1) { + DimensionDouble printSize = jPreviewImp.preview.getRealSize (); + DimensionDouble realSize = jPreviewImp.workspace.getRealSize (); + double scale = Math.min (printSize.width/realSize.width, printSize.height/realSize.height); + printGraphics.scale (scale, scale); + workspace.print (printGraphics, lineWidth*scale, null, true); + return; + } + AffineTransform iat = printGraphics.getTransform (); + Shape clip = printGraphics.getClip (); + for (JZones.Zone zone : jPreviewImp.preview.zones) { + printGraphics.setTransform (iat); + printGraphics.setClip (clip); + zone.projection (printGraphics); + if (zone.hasPair ()) { + workspace.print (printGraphics, lineWidth*zone.getScale (), null, !jPreviewImp.noPrintCircuit.contains (zone)); + continue; + } + if (zone.getImage () == patchImage) { + patchJPanel.paint (printGraphics); + continue; + } + zone.drawImage (printGraphics); + } + } + + static public BufferedImage getIcon (Workspace workspace, int maxSide, boolean printCircuit) { + DimensionDouble realSize = workspace.getRealSize (); + double rate = realSize.width/realSize.height; + int width = maxSide, height = maxSide; + if (rate > 1) + height = (int) (width/rate); + else + width = (int) (rate*height); + BufferedImage result = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB); + Graphics2D printGraphics = (Graphics2D) result.getGraphics (); + //printGraphics.setRenderingHint (RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); + printGraphics.setColor (Color.WHITE); + printGraphics.fillRect (0, 0, width, height); + double printScale = Math.min (width/realSize.width, height/realSize.height); + printGraphics.scale (printScale, printScale); + workspace.print (printGraphics, printScale, null, printCircuit); + return result; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/SpringUtilities.java b/src/java/adecWatt/view/SpringUtilities.java new file mode 100644 index 0000000..77f2ed7 --- /dev/null +++ b/src/java/adecWatt/view/SpringUtilities.java @@ -0,0 +1,225 @@ +/* + * Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * - Neither the name of Oracle or the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package adecWatt.view; + +import javax.swing.*; +import javax.swing.SpringLayout; +import java.awt.*; + +/** + * A 1.4 file that provides utility methods for + * creating form- or grid-style layouts with SpringLayout. + * These utilities are used by several programs, such as + * SpringBox and SpringCompactGrid. + */ +public class SpringUtilities { + /** + * A debugging utility that prints to stdout the component's + * minimum, preferred, and maximum sizes. + */ + static public void printSizes(Component c) { + System.out.println("minimumSize = " + c.getMinimumSize()); + System.out.println("preferredSize = " + c.getPreferredSize()); + System.out.println("maximumSize = " + c.getMaximumSize()); + } + + /** + * Aligns the first rows * cols + * components of parent in + * a grid. Each component is as big as the maximum + * preferred width and height of the components. + * The parent is made just big enough to fit them all. + * + * @param rows number of rows + * @param cols number of columns + * @param initialX x location to start the grid at + * @param initialY y location to start the grid at + * @param xPad x padding between cells + * @param yPad y padding between cells + */ + static public void makeGrid(Container parent, + int rows, int cols, + int initialX, int initialY, + int xPad, int yPad) { + SpringLayout layout; + try { + layout = (SpringLayout)parent.getLayout(); + } catch (ClassCastException exc) { + System.err.println("The first argument to makeGrid must use SpringLayout."); + return; + } + + Spring xPadSpring = Spring.constant(xPad); + Spring yPadSpring = Spring.constant(yPad); + Spring initialXSpring = Spring.constant(initialX); + Spring initialYSpring = Spring.constant(initialY); + int max = rows * cols; + + //Calculate Springs that are the max of the width/height so that all + //cells have the same size. + Spring maxWidthSpring = layout.getConstraints(parent.getComponent(0)). + getWidth(); + Spring maxHeightSpring = layout.getConstraints(parent.getComponent(0)). + getHeight(); + for (int i = 1; i < max; i++) { + SpringLayout.Constraints cons = layout.getConstraints( + parent.getComponent(i)); + + maxWidthSpring = Spring.max(maxWidthSpring, cons.getWidth()); + maxHeightSpring = Spring.max(maxHeightSpring, cons.getHeight()); + } + + //Apply the new width/height Spring. This forces all the + //components to have the same size. + for (int i = 0; i < max; i++) { + SpringLayout.Constraints cons = layout.getConstraints( + parent.getComponent(i)); + + cons.setWidth(maxWidthSpring); + cons.setHeight(maxHeightSpring); + } + + //Then adjust the x/y constraints of all the cells so that they + //are aligned in a grid. + SpringLayout.Constraints lastCons = null; + SpringLayout.Constraints lastRowCons = null; + for (int i = 0; i < max; i++) { + SpringLayout.Constraints cons = layout.getConstraints( + parent.getComponent(i)); + if (i % cols == 0) { //start of new row + lastRowCons = lastCons; + cons.setX(initialXSpring); + } else { //x position depends on previous component + cons.setX(Spring.sum(lastCons.getConstraint(SpringLayout.EAST), + xPadSpring)); + } + + if (i / cols == 0) { //first row + cons.setY(initialYSpring); + } else { //y position depends on previous row + cons.setY(Spring.sum(lastRowCons.getConstraint(SpringLayout.SOUTH), + yPadSpring)); + } + lastCons = cons; + } + + //Set the parent's size. + SpringLayout.Constraints pCons = layout.getConstraints(parent); + pCons.setConstraint(SpringLayout.SOUTH, + Spring.sum( + Spring.constant(yPad), + lastCons.getConstraint(SpringLayout.SOUTH))); + pCons.setConstraint(SpringLayout.EAST, + Spring.sum( + Spring.constant(xPad), + lastCons.getConstraint(SpringLayout.EAST))); + } + + /* Used by makeCompactGrid. */ + private static SpringLayout.Constraints getConstraintsForCell( + int row, int col, + Container parent, + int cols) { + SpringLayout layout = (SpringLayout) parent.getLayout(); + Component c = parent.getComponent(row * cols + col); + return layout.getConstraints(c); + } + + /** + * Aligns the first rows * cols + * components of parent in + * a grid. Each component in a column is as wide as the maximum + * preferred width of the components in that column; + * height is similarly determined for each row. + * The parent is made just big enough to fit them all. + * + * @param rows number of rows + * @param cols number of columns + * @param initialX x location to start the grid at + * @param initialY y location to start the grid at + * @param xPad x padding between cells + * @param yPad y padding between cells + */ + static public void makeCompactGrid(Container parent, + int rows, int cols, + int initialX, int initialY, + int xPad, int yPad) { + SpringLayout layout; + try { + layout = (SpringLayout)parent.getLayout(); + } catch (ClassCastException exc) { + System.err.println("The first argument to makeCompactGrid must use SpringLayout."); + return; + } + + //Align all cells in each column and make them the same width. + Spring x = Spring.constant(initialX); + for (int c = 0; c < cols; c++) { + Spring width = Spring.constant(0); + for (int r = 0; r < rows; r++) { + width = Spring.max(width, + getConstraintsForCell(r, c, parent, cols). + getWidth()); + } + for (int r = 0; r < rows; r++) { + SpringLayout.Constraints constraints = + getConstraintsForCell(r, c, parent, cols); + constraints.setX(x); + constraints.setWidth(width); + } + x = Spring.sum(x, Spring.sum(width, Spring.constant(xPad))); + } + + //Align all cells in each row and make them the same height. + Spring y = Spring.constant(initialY); + for (int r = 0; r < rows; r++) { + Spring height = Spring.constant(0); + for (int c = 0; c < cols; c++) { + height = Spring.max(height, + getConstraintsForCell(r, c, parent, cols). + getHeight()); + } + for (int c = 0; c < cols; c++) { + SpringLayout.Constraints constraints = + getConstraintsForCell(r, c, parent, cols); + constraints.setY(y); + constraints.setHeight(height); + } + y = Spring.sum(y, Spring.sum(height, Spring.constant(yPad))); + } + + //Set the parent's size. + SpringLayout.Constraints pCons = layout.getConstraints(parent); + pCons.setConstraint(SpringLayout.SOUTH, y); + pCons.setConstraint(SpringLayout.EAST, x); + } +} diff --git a/src/java/adecWatt/view/jProp/JAutoComboBox.java b/src/java/adecWatt/view/jProp/JAutoComboBox.java new file mode 100644 index 0000000..fb86d5c --- /dev/null +++ b/src/java/adecWatt/view/jProp/JAutoComboBox.java @@ -0,0 +1,72 @@ +package adecWatt.view.jProp; + +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.util.Vector; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JComboBox; +import javax.swing.text.JTextComponent; + +@SuppressWarnings ("serial") +public class JAutoComboBox extends JComboBox { + + static public interface Filter { + public Vector match (String value); + } + + private JTextComponent editor; + private final Filter filter; + + public JTextComponent getEditorComponent () { return editor; } + + public JAutoComboBox (Filter filter) { + this.filter = filter; + setEditable (true); + editor = (JTextComponent) (getEditor ().getEditorComponent ()); + updateFilter (); + editor.setFocusable (true); + editor.addKeyListener (new KeyAdapter() { + public void keyReleased (KeyEvent key) { + switch (key.getKeyCode ()) { + case KeyEvent.VK_ENTER: + hidePopup (); + return; + } + if (key.getKeyChar () == KeyEvent.CHAR_UNDEFINED) + return; + updateFilter (); + } + }); + } + + private boolean needUpdate (Vector founds) { + int nbItems = getItemCount (); + if (founds == null) + return nbItems != 0; + if (nbItems != founds.size ()) + return true; + int i = 0; + for (String val : founds) + if (!val.equals (getItemAt (i))) + return true; + return false; + } + public void updateFilter () { + String text = editor.getText (); + Vector founds = filter.match (text); + if (needUpdate (founds)) + if (founds == null) + removeAllItems (); + else + setModel (new DefaultComboBoxModel (founds)); + setSelectedIndex (-1); + editor.setText (text); + try { + if (founds != null && founds.size () > 0) + showPopup (); + else + hidePopup (); + } catch (Exception e) { + } + } +} diff --git a/src/java/adecWatt/view/jProp/JFilePreview.java b/src/java/adecWatt/view/jProp/JFilePreview.java new file mode 100644 index 0000000..be7c6ce --- /dev/null +++ b/src/java/adecWatt/view/jProp/JFilePreview.java @@ -0,0 +1,70 @@ +package adecWatt.view.jProp; + +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferedImage; +import java.io.File; +import javax.swing.ImageIcon; +import javax.swing.JComponent; + +@SuppressWarnings("serial") +public class JFilePreview extends JComponent { + + static public int maxInSide = 100; + static public int border = 5; + static public int maxOutSide = maxInSide+2*border; + static public Dimension previewDim = new Dimension (maxOutSide, maxOutSide); + + protected ImageIcon thumbnail = null; + protected long maxSize; + + public JFilePreview (long maxSize) { + this.maxSize = maxSize; + setPreferredSize (previewDim); + } + + public void setFile (File file, boolean horizontalSpin) { + thumbnail = getIcon (file, maxInSide, maxSize); + if (thumbnail != null && horizontalSpin) { + int width = thumbnail.getIconWidth (); + int height = thumbnail.getIconHeight (); + AffineTransform at = AffineTransform.getScaleInstance (horizontalSpin ? -1 : 1, 1); + at.translate (horizontalSpin ? -width : 0, 0); + BufferedImage image = new BufferedImage (width, height, BufferedImage.TYPE_INT_ARGB); + image.createGraphics ().drawImage (thumbnail.getImage (), at, null); + thumbnail = new ImageIcon (image); + } + repaint (); + } + + static public ImageIcon getIcon (File file, int thumbSide, long maxSize) { + if (file == null || (maxSize > 0 && file.length () > maxSize)) + return null; + ImageIcon tmpIcon = new ImageIcon (file.getPath ()); + if (tmpIcon == null) + return null; + if (tmpIcon.getIconWidth () > tmpIcon.getIconHeight ()) { + if (tmpIcon.getIconWidth () > thumbSide) + tmpIcon = new ImageIcon (tmpIcon.getImage ().getScaledInstance (thumbSide, -1, Image.SCALE_DEFAULT)); + } else { + if (tmpIcon.getIconHeight () > thumbSide) + tmpIcon = new ImageIcon (tmpIcon.getImage ().getScaledInstance (-1, thumbSide, Image.SCALE_DEFAULT)); + } + return tmpIcon; + } + + protected void paintComponent (Graphics g) { + if (thumbnail == null) + return; + int x = getWidth ()/2 - thumbnail.getIconWidth ()/2; + int y = getHeight ()/2 - thumbnail.getIconHeight ()/2; + // if (y < border) + // y = border; + // if (x < border) + // x = border; + + thumbnail.paintIcon (this, g, x, y); + } +} diff --git a/src/java/adecWatt/view/jProp/JImagePopup.java b/src/java/adecWatt/view/jProp/JImagePopup.java new file mode 100644 index 0000000..678b812 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JImagePopup.java @@ -0,0 +1,655 @@ +package adecWatt.view.jProp; + +import javax.swing.JProgressBar; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.GridLayout; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.File; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.Collection; +import java.util.Hashtable; +import java.util.List; +import java.util.TreeSet; +import java.util.Vector; +import javax.swing.BorderFactory; +import javax.swing.JCheckBox; +import javax.swing.JFileChooser; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTextField; +import javax.swing.JViewport; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.Border; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.filechooser.FileNameExtensionFilter; + +import misc.Bundle; +import misc.Config; +import misc.ImagePreview; +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCNL; + +import adecWatt.control.AdecWattManager; +import adecWatt.model.PreviewCache; +import adecWatt.model.ImageDB; +import adecWatt.view.JProp; +import adecWatt.view.JStringSet; + +@SuppressWarnings ("serial") public class JImagePopup extends JPopupMenu implements ActionListener { + + // ======================================== + static public final String + actionTag = "Tag", + actionAdd = "Add", + actionUpdate = "Update", + actionRemove = "Remove", + actionValidate = "Validate", + actionHorizontalSpin = "HorizontalSpin", + actionFilter = "Filter", + actionNoFilter = "NoFilter"; + static public final Vector emptyTag = new Vector (); + + // ======================================== + static public final List + popupActionsNames = Arrays.asList (AdecWattManager.actionRemoveImage, + AdecWattManager.actionChangeImage, + AdecWattManager.actionUnchange), + iconActionsNames = Arrays.asList (actionTag, actionAdd, actionUpdate, actionRemove, actionValidate); + @SuppressWarnings ("unchecked") + static public final Hashtable actionsMethod = + Util.collectMethod (JImagePopup.class, + popupActionsNames, iconActionsNames); + + public void actionPerformed (ActionEvent e) { + Util.actionPerformed (actionsMethod, e, this); + } + + // ======================================== + static public int thumbSide = 40; + static public Dimension thumbDim = new Dimension (thumbSide, thumbSide); + static public final int MAX_FILE_PREVIEW = 1024*1024; + static public final int MAX_COL = 10; + static public final int MAX_VISIBLE_LINE = 5; + static public final int horizontalThickness = 2, verticalThickness = 4, selectedThickness = 1; + static public Color selectionForeground = new Color (0x63, 0x82, 0xbf); + static public Color selectionBackground = new Color (0xb8, 0xcf, 0xe5); + static public Color standardBackground = new Color (0xee, 0xee, 0xee); + static public final Border emptyBorder = BorderFactory.createEmptyBorder (horizontalThickness, verticalThickness, + horizontalThickness, verticalThickness); + static public final Border selectedBorder = + BorderFactory.createCompoundBorder (BorderFactory.createLineBorder (selectionForeground, selectedThickness), + BorderFactory.createEmptyBorder (horizontalThickness-selectedThickness, verticalThickness-selectedThickness, + horizontalThickness-selectedThickness, verticalThickness-selectedThickness)); + static public final Dimension DIM_AREA = new Dimension (10+horizontalThickness+MAX_COL*(thumbSide+horizontalThickness), + 10+verticalThickness+MAX_VISIBLE_LINE*(thumbSide+verticalThickness)); + + // ======================================== + ImageDB imageDB; + boolean horizontalSpin; + + int nbImages; + Vector nameList; + + JFilePreview preview = new JFilePreview (MAX_FILE_PREVIEW); + JLabel previewId = new JLabel (" ", SwingConstants.CENTER); + JList previewTags = new JList (emptyTag); + JPanel selectionPanel; + JViewport filesViewPort; + JPanel filesPanel; + JProp jProp; + JLabel refLabel; + JTextField filterTF = new JTextField ("", 16); + JTextField noFilterTF = new JTextField ("", 16); + Vector namesLocals; + Font localFont, normalFont; + JProgressBar progressBar; + + public JImagePopup (JLabel jLabel, Point pos, final JProp jProp, ImageDB imageDB) { + this.imageDB = imageDB; + this.jProp = jProp; + refLabel = jLabel; + Util.addMenuItem (popupActionsNames, this, this); + show (jLabel, pos.x, pos.y); + DocumentListener documentListener = new DocumentListener () { + public void changedUpdate (DocumentEvent e) { + doFilter (); + } + public void insertUpdate (DocumentEvent e) { changedUpdate (e); } + public void removeUpdate (DocumentEvent e) { changedUpdate (e); } + }; + filterTF.getDocument ().addDocumentListener (documentListener); + noFilterTF.getDocument ().addDocumentListener (documentListener); + (new Thread () { + public void run () { + updateNamesLocals (); + doFilter (); + if (nbSelection > 0) + return; + try { + setSelection (jProp.getLastValue ()); + } catch (Exception e) { + } + updatePreview (); + } + }).start (); + previewTags.setForeground (Color.GRAY); + previewTags.setBackground (getBackground ()); + previewId.setForeground (Color.GRAY); + + normalFont = getFont (); + localFont = normalFont.deriveFont (Font.ITALIC, normalFont.getSize ()); + selectionPanel = Util.getGridBagPanel (); + horizontalSpin = jProp.getHorizontalSpin (); + progressBar = new JProgressBar (0, 100); + progressBar.setValue (0); + + JPanel cmdLine = new JPanel (); + Util.addIconButton (iconActionsNames, this, cmdLine); + cmdLine.add (Util.newCheckIcon (actionHorizontalSpin, new ActionListener () { + public void actionPerformed (ActionEvent e) { + horizontalSpin = ((JCheckBox)e.getSource ()).isSelected (); + updatePreview (); + } + }, horizontalSpin)); + Util.addIconButton (actionFilter, null, cmdLine); + cmdLine.add (filterTF); + Util.addIconButton (actionNoFilter, null, cmdLine); + cmdLine.add (noFilterTF); + Util.unBoxButton (cmdLine); + filesPanel = new JPanel (null); + JPanel filesPanel2 = new JPanel (); + filesPanel2.add (filesPanel); + JScrollPane filesScrollPane = Util.getJScrollPane (filesPanel2); + filesPanel2.addMouseListener (new MouseAdapter () { + public void mousePressed (MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton (e)) + return; + selectionPanel.requestFocusInWindow (); + clearSelection (); + updatePreview (); + } + }); + filesScrollPane.setPreferredSize (DIM_AREA); + filesViewPort = filesScrollPane.getViewport (); + JScrollPane tagsScrollPane = Util.getJScrollPane (previewTags); + tagsScrollPane.setPreferredSize (JFilePreview.previewDim); + JPanel side = new JPanel (new BorderLayout ()); + side.add (previewId, BorderLayout.NORTH); + side.add (preview, BorderLayout.CENTER); + side.add (tagsScrollPane, BorderLayout.SOUTH); + Util.addComponent (filesScrollPane, selectionPanel, GBC); + Util.addComponent (side, selectionPanel, GBCNL); + Util.addComponent (progressBar, selectionPanel, GBCNL); + Util.addComponent (cmdLine, selectionPanel, GBCNL); + + selectionPanel.addKeyListener (new KeyAdapter () { + public void keyPressed (KeyEvent e) { + switch (e.getKeyCode ()) { + case KeyEvent.VK_A: + if (e.isControlDown ()) { + selectRange (0, nbImages-1); + setCursorIndex (lastSelection); + } + return; + case KeyEvent.VK_HOME: + setCursorIndex (0); + return; + case KeyEvent.VK_END: + setCursorIndex (nbImages-1); + return; + } + if (cursorIndex < 0 || cursorIndex > nbImages-1) + return; + int nextCursorIndex = cursorIndex; + switch (e.getKeyCode ()) { + case KeyEvent.VK_SPACE: + if (e.isControlDown ()) + nameList.get (cursorIndex).toggleSelection (); + else + setSelection (cursorIndex, true); + return; + case KeyEvent.VK_UP: + case KeyEvent.VK_KP_UP: + nextCursorIndex -= MAX_COL; + break; + case KeyEvent.VK_DOWN: + case KeyEvent.VK_KP_DOWN: + nextCursorIndex += MAX_COL; + break; + case KeyEvent.VK_LEFT: + case KeyEvent.VK_KP_LEFT: + nextCursorIndex--; + break; + case KeyEvent.VK_RIGHT: + case KeyEvent.VK_KP_RIGHT: + nextCursorIndex++; + break; + default: + return; + } + if (nextCursorIndex == cursorIndex || + nextCursorIndex < 0 || + nextCursorIndex > nbImages-1) + return; + setCursorIndex (nextCursorIndex); + if (e.isShiftDown ()) + selectRange (beginSelection, nextCursorIndex); + else + beginSelection = lastSelection = nextCursorIndex; + } + }); + } + + public void chooseIconImage (JLabel attach) { + updatePreview (); + if (JOptionPane.showConfirmDialog (attach, selectionPanel, + Bundle.getTitle ("SelectImage"), + JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION || nbSelection < 1) + return; + jProp.setSpin (horizontalSpin); + jProp.setVal (Util.getBase (nameList.get (minSelection).nameLocal.fileName)); + } + + private String splitFilter (String pattern, TreeSet set) { + String part = null; + for (String word : pattern.toLowerCase ().split ("\\s")) { + if (part != null) { + set.add (part); + part = null; + } + if (!word.isEmpty ()) { + part = word; + } + } + return part; + } + + public synchronized void doFilter () { + TreeSet setToKeep = new TreeSet (); + String partToKeep = splitFilter (filterTF.getText (), setToKeep); + boolean noTag = filterTF.getText ().length () > 0 && partToKeep == null && setToKeep.size () < 1; + TreeSet setToForget = new TreeSet (); + String partToForget = splitFilter (noFilterTF.getText (), setToForget); + Vector result = new Vector (namesLocals.size ()); + for (ImageDB.NameLocal namesLocal : namesLocals) { + Collection tags = imageDB.getTags (namesLocal.fileName); + if (noTag && tags != null) + continue; + if (partToKeep != null && !Util.containsPart (partToKeep, tags)) + continue; + if (setToKeep.size () > 0 && !Util.containsOne (setToKeep, tags)) + continue; + if (partToForget != null && Util.containsPart (partToForget, tags)) + continue; + if (setToForget.size () > 0 && Util.containsOne (setToForget, tags)) + continue; + result.add (namesLocal); + } + setFilesPanel (result); + } + + public void setFilesPanel (Vector namesLocals) { + filesViewPort.invalidate (); + nbSelection = 0; + beginSelection = lastSelection = 0; + cursorIndex = -1; + nbImages = namesLocals.size (); + nameList = new Vector (nbImages); + for (ImageDB.NameLocal nameLocal: namesLocals) + nameList.add (new HighlightFile (nameLocal)); + filesPanel.removeAll (); + GridLayout gridLayout = new GridLayout (0, MAX_COL); + filesPanel.setLayout (gridLayout); + for (int i = 0 ; i < nbImages; i++) { + HighlightFile highlightFile = nameList.get (i); + highlightFile.index = i; + filesPanel.add (highlightFile); + } + selectionPanel.setFocusable (true); + filesViewPort.setViewPosition (new Point (0, 0)); + filesViewPort.repaint (); + filesViewPort.validate (); + } + + int cursorIndex = -1, minSelection, maxSelection, nbSelection; + int beginSelection, lastSelection; + public void clearSelection () { + setCursorIndex (-1); + if (nbSelection > 0) + for (int i = minSelection; i <= maxSelection; i++) + nameList.get (i).setSelection (false); + nbSelection = minSelection = maxSelection = beginSelection = lastSelection = 0; + } + + public void setCursorIndex (int newVal) { + if (cursorIndex == newVal) + return; + if (cursorIndex >= 0) + nameList.get (cursorIndex).borderSelection (false); + cursorIndex = newVal; + if (cursorIndex < 0) + return; + HighlightFile hf = nameList.get (cursorIndex); + hf.borderSelection (true); + hf.checkVisible (); + } + + public synchronized void setSelection (String name) { + if (name == null || name.isEmpty ()) + return; + name = Util.getBase (name); + for (int i = 0; i < nbImages; i++) + if (name.equals (Util.getBase (nameList.get (i).nameLocal.fileName))) { + setSelection (i, true); + return; + } + } + public void setSelection (int index, boolean clearSelection) { + if (clearSelection) + clearSelection (); + setCursorIndex (index); + if (index < 0 || index >= nbImages) + return; + addSelection (index); + beginSelection = lastSelection = index; + } + public void selectRange (int start, int stop) { + int minRange = Integer.min (start, stop); + int maxRange = Integer.max (start, stop); + int minOldRange = Integer.min (beginSelection, lastSelection); + int maxOldRange = Integer.max (beginSelection, lastSelection); + beginSelection = start; + lastSelection = stop; + if (nbSelection > 0) + for (int i = minOldRange; i <= maxOldRange; i++) { + HighlightFile name = nameList.get (i); + if (name == null || !name.isSelected) + continue; + name.setSelection (false); + nbSelection--; + } + for (int i = minRange; i <= maxRange; i++) { + HighlightFile name = nameList.get (i); + if (name == null || name.isSelected) + continue; + nameList.get (i).setSelection (true); + nbSelection++; + } + if (nbSelection > 0) { + minSelection = Math.min (minSelection, minRange); + maxSelection = Math.max (maxSelection, maxRange); + } + updateMinMax (); + updatePreview (); + } + public void addSelection (int index) { + HighlightFile name = nameList.get (index); + if (name == null) + return; + name.setSelection (true); + name.checkVisible (); + if (nbSelection > 0) { + minSelection = Math.min (minSelection, index); + maxSelection = Math.max (maxSelection, index); + } else + minSelection = maxSelection = index; + nbSelection++; + updatePreview (); + } + public void removeSelection (int index) { + HighlightFile name = nameList.get (index); + if (name == null) + return; + name.setSelection (false); + nbSelection--; + updateMinMax (); + updatePreview (); + } + public void updateMinMax () { + if (nbSelection < 1) + return; + for (int i = minSelection; i <= maxSelection; i++) + if (nameList.get (i).isSelected) { + minSelection = i; + break; + } + for (int i = maxSelection; i >= minSelection; i--) + if (nameList.get (i).isSelected) { + maxSelection = i; + break; + } + if (cursorIndex < minSelection) + nameList.get (minSelection).checkVisible (); + if (cursorIndex > maxSelection) + nameList.get (maxSelection).checkVisible (); + } + public void updatePreview () { + if (nbSelection < 1) { + preview.setFile (null, false); + previewId.setText (""); + previewTags.setListData (emptyTag); + Util.packWindow (previewTags); + return; + } + nameList.get (minSelection).preview (); + } + public void updateNamesLocals () { + namesLocals = imageDB.listImage (); + progressBar.setStringPainted (true); + progressBar.setMaximum (namesLocals.size ()); + progressBar.setValue (0); + int done = 0; + PreviewCache previewCache = imageDB.previewCache; + previewCache.prepareClean (); + for (ImageDB.NameLocal nameLocal: namesLocals) { + nameLocal.icon = previewCache.getIcon (imageDB.getFile (nameLocal.fileName, nameLocal.isLocal)); + done++; + progressBar.setValue (done); + } + previewCache.clean (); + progressBar.setValue (0); + progressBar.setStringPainted (false); + } + + // ======================================== + class HighlightFile extends JLabel { + public int index; + public ImageDB.NameLocal nameLocal; + public boolean isSelected; + + public HighlightFile (ImageDB.NameLocal nameLocal) { + super (nameLocal.icon, SwingConstants.CENTER); + setMinimumSize (thumbDim); + setPreferredSize (thumbDim); + setSize (thumbDim); + this.nameLocal = nameLocal; + setFont (nameLocal.isLocal ? localFont : normalFont); + setBorder (emptyBorder); + setOpaque (true); + setBackground (standardBackground); + addMouseListener (new MouseAdapter () { + public void mousePressed (MouseEvent e) { + if (!SwingUtilities.isLeftMouseButton (e)) + return; + selectionPanel.requestFocusInWindow (); + setCursorIndex (index); + if (e.isControlDown ()) { + beginSelection = index; + lastSelection = index; + toggleSelection (); + return; + } + if (e.isShiftDown ()) { + selectRange (beginSelection, index); + return; + } + JImagePopup.this.setSelection (index, true); + } + }); + } + + public void toggleSelection () { + if (isSelected) + removeSelection (index); + else + addSelection (index); + } + public void borderSelection (boolean isSelected) { + setBorder (isSelected ? selectedBorder : emptyBorder); + } + + public void setSelection (boolean isSelected) { + setBackground (isSelected ? selectionBackground : standardBackground); + this.isSelected = isSelected; + } + public void preview () { + preview.setFile (imageDB.getFile (nameLocal.fileName, nameLocal.isLocal), horizontalSpin); + previewId.setText (Util.getBase (nameLocal.fileName)); + previewTags.setListData (emptyTag); + Collection tags = imageDB.getTags (nameLocal.fileName); + if (tags == null) { + Util.packWindow (previewTags); + return; + } + previewTags.setListData (new Vector (tags)); + Util.packWindow (previewTags); + } + + public void checkVisible () { + Rectangle nameBounds = getBounds (); + Rectangle viewBounds = filesViewPort.getViewRect (); + if (!viewBounds.contains (nameBounds)) + filesViewPort.setViewPosition (new Point (0, nameBounds.y)); + } + } + + // ======================================== + public void actionRemoveImage () { + jProp.removeVal (); + }; + public void actionChangeImage () { + chooseIconImage (refLabel); + } + public void actionUnchange () { + jProp.unchangeVal (); + } + + // ======================================== + public void actionTag () { + try { + if (nbSelection < 1) + return; + String imageName = Util.getBase (nameList.get (minSelection).nameLocal.fileName); + JStringSet jStringSet = new JStringSet (imageDB.getTags (imageName)); + jStringSet.init (); + if (JOptionPane.showConfirmDialog (refLabel, + jStringSet, + null, JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) + return; + jStringSet.confirm (); + imageDB.putTags (imageName, jStringSet.getSet ()); + doFilter (); + setSelection (imageName); + } finally { + selectionPanel.requestFocusInWindow (); + } + } + + static public JFileChooser jFileChooser = new JFileChooser (Config.getString ("ImageDirName", "")); + public boolean chooseFile () { + jFileChooser.setFileFilter (new FileNameExtensionFilter (Bundle.getLabel ("ImageFilter"), PreviewCache.imageExtentions)); + jFileChooser.setAccessory (new ImagePreview (jFileChooser, MAX_FILE_PREVIEW)); + jFileChooser.setFileSelectionMode (JFileChooser.FILES_ONLY); + if (jFileChooser.showOpenDialog (selectionPanel) != JFileChooser.APPROVE_OPTION) + return false; + Config.setFile ("ImageDirName", jFileChooser.getSelectedFile ().getParentFile ()); + return true; + } + + public void actionAdd () { + jFileChooser.setMultiSelectionEnabled (true); + if (!chooseFile ()) + return; + String last = null; + for (File file : jFileChooser.getSelectedFiles ()) + last = imageDB.addImage (file); + updateNamesLocals (); + doFilter (); + // XXX sélection multiple + setSelection (last); + } + public void actionUpdate () { + if (nbSelection != 1) + return; + jFileChooser.setMultiSelectionEnabled (false); + if (!chooseFile ()) + return; + String newImageName = imageDB.updateImage (nameList.get (minSelection).nameLocal, jFileChooser.getSelectedFile ()); + updateNamesLocals (); + doFilter (); + setSelection (newImageName); + } + public void actionRemove () { + if (nbSelection < 1) + return; + boolean removed = false; + TreeSet selectedNames = new TreeSet (); + for (int i = minSelection; i <= maxSelection; i++) { + HighlightFile name = nameList.get (i); + if (!name.isSelected || !name.nameLocal.isLocal) + continue; + imageDB.removeImage (name.nameLocal.fileName); + removed = true; + selectedNames.add (name.nameLocal.fileName); + } + if (!removed) + return; + updateNamesLocals (); + doFilter (); + for (String name : selectedNames) + setSelection (name); + } + public void actionValidate () { + if (nbSelection < 1) + return; + TreeSet imageNames = new TreeSet (); + TreeSet imageTagNames = new TreeSet (); + for (int i = minSelection; i <= maxSelection; i++) { + HighlightFile name = nameList.get (i); + if (!name.isSelected) + continue; + imageTagNames.add (name.nameLocal.fileName); + if (!name.nameLocal.isLocal) + continue; + imageNames.add (name.nameLocal.fileName); + } + imageDB.promoteTag (imageTagNames); // XXX a changé de nom + if (imageNames.size () == 0) + return; + System.err.println ("coucou actionValidate:"+imageNames); + imageDB.renameVisitor (imageNames); + imageDB.promote (imageNames); // XXX a changé de nom + updateNamesLocals (); + doFilter (); + } + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPImage.java b/src/java/adecWatt/view/jProp/JPImage.java new file mode 100644 index 0000000..8352fb4 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPImage.java @@ -0,0 +1,65 @@ +package adecWatt.view.jProp; + +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; + +import misc.ScaledImage; +import misc.Util; + +import adecWatt.model.ImageDB; +import adecWatt.view.JEditable; +import adecWatt.view.JProp; +import static adecWatt.model.Prop.PropMix; + +public abstract class JPImage extends JProp { + // ======================================== + protected JLabel jImage = new JLabel (); + protected ScaledImage scaledImage; + protected ImageDB rightDB; + + public JPImage (String propName, JEditable jEditable) { + super (propName, jEditable); + jImage.setHorizontalAlignment (SwingConstants.CENTER); + } + + protected void updateView () { + setImage (); + Util.packWindow (jImage); + } + + protected abstract ImageIcon getFitImage (); + protected void setImage () { + scaledImage = null; + if (lastValue == null) { + jImage.setIcon (Util.loadActionIcon ("EmptyIcon")); + return; + } + if (lastValue == PropMix) { + jImage.setIcon (Util.loadActionIcon ("MixIcon")); + return; + } + scaledImage = rightDB.getImage (lastValue, horizontalSpin); + if (scaledImage == null) { + jImage.setIcon (Util.loadActionIcon ("BreakIcon")); + return; + } + jImage.setIcon (getFitImage ()); + } + + protected void setPopup () { + jImage.addMouseListener (new MouseAdapter () { + public void mousePressed (MouseEvent e) { + System.err.flush (); + if (!SwingUtilities.isRightMouseButton (e)) + return; + new JImagePopup (jImage, e.getPoint (), JPImage.this, rightDB); + } + }); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPLabel.java b/src/java/adecWatt/view/jProp/JPLabel.java new file mode 100644 index 0000000..cab11b9 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPLabel.java @@ -0,0 +1,69 @@ +package adecWatt.view.jProp; + +import java.util.HashSet; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.text.JTextComponent; + +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCLNL; + +import adecWatt.view.JEditable; +import adecWatt.view.JProp; +import static adecWatt.model.Prop.PropMix; + +public abstract class JPLabel extends JProp { + + // ======================================== + protected JTextComponent[] editors; + protected HashSet unchanged = new HashSet (); + + protected boolean verify (JTextComponent editor) { + return true; + } + + public void setUnchange (JTextComponent editor, boolean unchange) { + super.setUnchange (editor, unchange); + if (unchange) + unchanged.add (editor); + else + unchanged.remove (editor); + verify (editor); + } + + // ======================================== + public JPLabel (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + protected abstract JComponent getEditor (); + protected JComponent getValue () { + if (lastValue == null) + return null; + if (lastValue == PropMix) + return getUnknownLabel (); + return new JLabel (lastValue); + } + + protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + JComponent jValue = edit ? getEditor () : getValue (); + if (jValue == null) + return; + Util.addComponent (localizedUserLabel.getJLabel (), jPropList, GBC); + Util.addComponent (new JLabel (" : "), jPropList, GBC); + Util.addComponent (jValue, jPropList, GBCLNL); + } + + // ======================================== + public String getLastValue () { + String val = editors[0].getText (); + if (unchanged.size () > 0) + val = PropMix; + return val; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPMultiValues.java b/src/java/adecWatt/view/jProp/JPMultiValues.java new file mode 100644 index 0000000..7e39393 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPMultiValues.java @@ -0,0 +1,116 @@ +package adecWatt.view.jProp; + +import java.text.NumberFormat; +import javax.swing.InputVerifier; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.text.JTextComponent; + +import adecWatt.view.JEditable; +import static adecWatt.model.Prop.DoubleMix; +import static adecWatt.model.Prop.PropMix; +import static adecWatt.model.Prop.numberFormat; + +public abstract class JPMultiValues extends JPLabel { + + // ======================================== + protected NumberFormat getNumberFormat () { return numberFormat; } + + // ======================================== + public JPMultiValues (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + protected boolean verify (JTextComponent editor) { + editor.setBorder (defaultBorder); + String txt = editor.getText (); + if (txt.isEmpty ()) + return true; + try { + Float.parseFloat (txt.replace (",", ".")); + return true; + } catch (NumberFormatException nfe) { + } + editor.setBorder (badValueBorder); + return false; + } + + protected JComponent getEditor () { + JPanel jPanel = new JPanel (); + editors = new JTextField [nbVal]; + for (int i = 0; i < nbVal; i++) { + if (localizedUserMultiLabels != null && localizedUserMultiLabels.length > i) + jPanel.add (localizedUserMultiLabels[i].getJLabel ()); + final JTextField editor = new JTextField (lastValues == null || lastValues[i] == null ? "" : + getNumberFormat ().format (lastValues [i]), 6); + editors [i] = editor; + defaultBorder = editor.getBorder (); + boolean unchange = lastValues != null && lastValues[i] != null && lastValues[i] == DoubleMix; + setUnchange (editor, unchange); + setChangeListener (editor); + editors [i].setInputVerifier (new InputVerifier () { + @Override + public boolean verify (JComponent input) { + return JPMultiValues.this.verify (editor); + } + }); + jPanel.add (editors[i]); + } + return jPanel; + } + + protected JComponent getValue () { + if (lastValues == null) + return null; + JPanel jPanel = new JPanel (); + boolean noVal = true; + for (int i = 0; i < lastValues.length; i++) { + if (localizedUserMultiLabels != null && localizedUserMultiLabels.length > i) + jPanel.add (localizedUserMultiLabels[i].getJLabel ()); + if (lastValues[i] == null) { + jPanel.add (getEmptyLabel ()); + continue; + } + noVal = false; + jPanel.add ((lastValues[i] == DoubleMix) ? getUnknownLabel () : + new JLabel (getNumberFormat ().format (lastValues[i]))); + } + return noVal ? null : jPanel; + } + + public String getLastValue () { + if (unchanged.size () >= nbVal) + return PropMix; + String newVal = ""; + String sep = ""; + boolean noVal = true; + for (int i = 0; i < nbVal; i++) { + newVal += sep; + sep = "|"; + if (unchanged.contains (editors [i])) { + newVal += "?"; + noVal = false; + continue; + } + String val = editors [i].getText ().replace (",", "."); + if (val.isEmpty ()) + continue; + try { + double dVal = Double.parseDouble (val); + if (parentValues != null && parentValues[i] != null && parentValues[i] == dVal) + continue; + newVal += getNumberFormat ().format (dVal).replace (",", "."); + noVal = false; + } catch (Exception e) { + e.printStackTrace (); + } + } + if (noVal) + newVal = ""; + return newVal; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropArticle.java b/src/java/adecWatt/view/jProp/JPropArticle.java new file mode 100644 index 0000000..62f5424 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropArticle.java @@ -0,0 +1,58 @@ +package adecWatt.view.jProp; + +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.JTextArea; +import javax.swing.text.JTextComponent; + +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCNL; + +import adecWatt.view.JEditable; +import adecWatt.view.JProp; +import static adecWatt.model.Prop.PropMix; + +public class JPropArticle extends JProp { + + static public final int minRow = 5; + + protected JTextArea editor; + private boolean unchange; + + // ======================================== + public JPropArticle (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + if (!edit && lastValue == null) + return; + Util.addComponent (localizedUserLabel.getJLabel (), jPropList, GBC); + Util.addComponent (new JLabel (" : "), jPropList, GBCNL); + editor = new JTextArea (lastValue); + Util.addComponent (Util.getJScrollPane (editor), jPropList, GBCNL); + editor.setEditable (edit); + setUnchange (editor, lastValue == PropMix); + if (edit) { + if (editor.getLineCount () < minRow) + editor.setRows (minRow); + setChangeListener (editor); + } + } + + public void setUnchange (JTextComponent jTextComponent, boolean unchange) { + super.setUnchange (jTextComponent, unchange); + this.unchange = unchange; + } + + public String getLastValue () { + String val = editor.getText (); + if (unchange) + val = PropMix; + return val; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropBuilding.java b/src/java/adecWatt/view/jProp/JPropBuilding.java new file mode 100644 index 0000000..bc25b79 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropBuilding.java @@ -0,0 +1,96 @@ +package adecWatt.view.jProp; + +import java.util.ArrayList; +import java.util.Vector; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.text.JTextComponent; + +import adecWatt.model.unit.Building; +import adecWatt.view.JEditable; +import static adecWatt.model.Prop.PropMix; + +public class JPropBuilding extends JPLabel implements JAutoComboBox.Filter { + + // ======================================== + protected ArrayList allBuidings; + protected ArrayList allBuidingsName; + protected Vector matchBuidings; + + protected JAutoComboBox choice; + + public JPropBuilding (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + @Override + public Vector match (String value) { + value = value.toLowerCase (); + Vector founds = new Vector (); + matchBuidings.clear (); + if (allBuidings != null) { + for (Building building : allBuidings) { + if (building.parentMatch (value)) { + founds.add (building.getLocalName ()); + matchBuidings.add (building); + } + } + } + return founds; + } + + protected boolean verify (JTextComponent editor) { + if (editor == null || allBuidingsName == null) + return false; + boolean result = allBuidingsName.contains (editor.getText ()); + editor.setBorder (result ? defaultBorder : badValueBorder); + return result; + } + + protected JComponent getValue () { + if (lastValue == null) + return null; + if (lastValue == PropMix) + return getUnknownLabel (); + try { + return new JLabel (permanentDB.getUnitById (lastValue).getName ()); + } catch (Exception e) { + return getMsgLabel (lastValue); + } + } + + protected JComponent getEditor () { + allBuidings = permanentDB.getAllBuildings (); + int index = -1; + if (allBuidings != null) { + allBuidingsName = new ArrayList (allBuidings.size ()); + for (Building building : allBuidings) { + if (lastValue != null && building.getId ().equals (lastValue)) + index = allBuidingsName.size (); + allBuidingsName.add (building.getLocalName ()); + } + } else + allBuidingsName = new ArrayList (0); + matchBuidings = new Vector (allBuidingsName.size ()); + choice = new JAutoComboBox (this); + JTextComponent editor = choice.getEditorComponent (); + defaultBorder = editor.getBorder (); + editors = new JTextComponent [] {editor}; + setChangeListener (editor); + if (index >= 0) + choice.setSelectedIndex (index); + return choice; + } + + public String getLastValue () { + String val = ""; + int index = choice.getSelectedIndex (); + if (index >= 0) + val = matchBuidings.get (index).getId (); + if (unchanged.size () > 0) + val = PropMix; + return val; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropCity.java b/src/java/adecWatt/view/jProp/JPropCity.java new file mode 100644 index 0000000..f9451e3 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropCity.java @@ -0,0 +1,79 @@ +package adecWatt.view.jProp; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.ArrayList; +import java.util.Vector; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.text.JTextComponent; + +import misc.Util; + +import adecWatt.model.InseeDB; +import adecWatt.view.JEditable; + +public class JPropCity extends JPLabel implements JAutoComboBox.Filter { + static public final int maxPropal = 500; + + protected JComponent[] jComponents = new JComponent[2]; + protected JAutoComboBox jCity; + + protected ArrayList filteredCity; + + // ======================================== + protected void plotCity () { + if (filteredCity == null) + return; + int nbInsee = filteredCity.size (); + int idx = jCity.getSelectedIndex (); + if (nbInsee == 1) + idx = 0; + if (idx < 0) + return; + InseeDB.Insee insee = filteredCity.get (idx); + jEditable.plotCity (insee.latitude, insee.longitude); + } + + public Vector match (String value) { + try { + filteredCity = adecWatt.getInseeDB ().getCities (value); + } catch (Exception e) { + filteredCity = null; + } + if (filteredCity == null) + return null; + if (filteredCity.size () > maxPropal) { + filteredCity = null; + return null; + } + Vector filteredCityName = new Vector (filteredCity.size ()); + for (InseeDB.Insee insee : filteredCity) + filteredCityName.add (insee.name); + return filteredCityName; + } + + public JPropCity (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + protected JComponent getEditor () { + jCity = new JAutoComboBox (this); + JTextComponent editor = jCity.getEditorComponent (); + editors = new JTextComponent [] {editor}; + setChangeListener (editor); + editor.setText (lastValue); + jCity.updateFilter (); + JPanel jPanel = new JPanel (); + jPanel.add (jCity); + jPanel.add (Util.newIconButton ("PlotCity", new ActionListener () { + public void actionPerformed (ActionEvent e) { + plotCity (); + } + })); + Util.unBoxButton (jPanel); + return jPanel; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropCube.java b/src/java/adecWatt/view/jProp/JPropCube.java new file mode 100644 index 0000000..9d5138d --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropCube.java @@ -0,0 +1,12 @@ +package adecWatt.view.jProp; + +import adecWatt.view.JEditable; + +public class JPropCube extends JPMultiValues { + // ======================================== + public JPropCube (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropEnum.java b/src/java/adecWatt/view/jProp/JPropEnum.java new file mode 100644 index 0000000..eff6a65 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropEnum.java @@ -0,0 +1,57 @@ +package adecWatt.view.jProp; + +import java.util.Vector; +import javax.swing.JComponent; +import javax.swing.text.JTextComponent; + +import adecWatt.view.JEditable; +import static adecWatt.model.Prop.PropMix; + +public class JPropEnum extends JPLabel implements JAutoComboBox.Filter { + + // ======================================== + protected JAutoComboBox choice; + + public JPropEnum (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + @Override + public Vector match (String value) { + value = value.toLowerCase (); + Vector founds = new Vector (); + if (enumChoice != null) + for (String item : enumChoice) + if (item.toLowerCase ().indexOf (value) >= 0) + founds.add (item); + return founds; + } + + protected boolean verify (JTextComponent editor) { + if (editor == null || enumChoice == null) + return false; + boolean result = enumChoice.contains (editor.getText ()); + editor.setBorder (result ? defaultBorder : badValueBorder); + return result; + } + + // ======================================== + protected JComponent getEditor () { + choice = new JAutoComboBox (this); + JTextComponent editor = choice.getEditorComponent (); + defaultBorder = editor.getBorder (); + editors = new JTextComponent [] {editor}; + setChangeListener (editor); + choice.setSelectedItem (lastValue); + return choice; + } + + public String getLastValue () { + String val = (String) choice.getSelectedItem (); + if (unchanged.size () > 0) + val = PropMix; + return val; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropGeo.java b/src/java/adecWatt/view/jProp/JPropGeo.java new file mode 100644 index 0000000..9135fe8 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropGeo.java @@ -0,0 +1,120 @@ +package adecWatt.view.jProp; + +import java.awt.BorderLayout; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.MouseEvent; +import java.text.NumberFormat; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.JTextField; +import javax.swing.SwingConstants; + +import org.openstreetmap.gui.jmapviewer.DefaultMapController; +import org.openstreetmap.gui.jmapviewer.JMapViewer; +import org.openstreetmap.gui.jmapviewer.MapMarkerDot; +import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate; +import org.openstreetmap.gui.jmapviewer.interfaces.TileSource; +import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource; +import org.openstreetmap.gui.jmapviewer.tilesources.MapQuestOsmTileSource; +import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource; + +import misc.Util; + +import adecWatt.model.Prop; +import adecWatt.view.JEditable; +import adecWatt.view.JProp; + +public class JPropGeo extends JPMultiValues { + + // ======================================== + protected JMapViewer treeMap = new JMapViewer (); + protected MapMarkerDot here; + + protected NumberFormat getNumberFormat () { return Prop.geoFormat; } + + protected boolean verify (JTextField editor) { + boolean result = super.verify (editor); + if (!result) + return false; + updateGeo (); + return true; + } + protected void updateGeo () { + try { + here.setLat (Float.parseFloat (editors [0].getText ().replace (",", "."))); + here.setLon (Float.parseFloat (editors [1].getText ().replace (",", "."))); + treeMap.setDisplayToFitMapMarkers (); + treeMap.setZoom (16); + } catch (Exception e) { + } + } + public void setGeo (double latitude, double longitude) { + if (!editors[0].getText ().isEmpty () && !editors[1].getText ().isEmpty ()) + return; + forceGeo (latitude, longitude); + updateGeo (); + jEditable.toFront (map); + } + protected void forceGeo (double latitude, double longitude) { + editors[0].setText (Prop.geoFormat.format (latitude)); + editors[1].setText (Prop.geoFormat.format (longitude)); + here.setLat (latitude); + here.setLon (longitude); + treeMap.repaint (); + } + protected void setGeo () { + try { + here.setLat (lastValues[0]); + here.setLon (lastValues[1]); + treeMap.setDisplayToFitMapMarkers (); + treeMap.setZoom (16); + } catch (Exception e) { + } + } + public JPropGeo (String propName, JEditable jEditable) { + super (propName, jEditable); + jEditable.setFirstGeo (this); + treeMap.setScrollWrapEnabled (true); + here = new MapMarkerDot (47.95707, -2.56396); + treeMap.addMapMarker (here); + } + + JPanel map; + protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + if (!edit && (hidden || lastValue == null)) + return; + super.displayByType (edit, jPropList, jTabbedPane); + setGeo (); + JComboBox tileSourceSelector = new JComboBox<> (new TileSource[] { + new OsmTileSource.Mapnik (), + new OsmTileSource.CycleMap (), + new BingAerialTileSource (), + new MapQuestOsmTileSource () + //new MapQuestOpenAerialTileSource () + }); + tileSourceSelector.addItemListener (new ItemListener () { + public void itemStateChanged (ItemEvent e) { + treeMap.setTileSource ((TileSource) e.getItem ()); + } + }); + map = new JPanel (new BorderLayout ()); + map.add (Util.newLabel ("HelpOSM", SwingConstants.CENTER), BorderLayout.PAGE_START); + map.add (treeMap, BorderLayout.CENTER); + map.add (tileSourceSelector, BorderLayout.PAGE_END); + jTabbedPane.add (localizedUserLabel.getCurrentLabel (), map); + jEditable.addLocalizedUserLabel (localizedUserLabel); + if (edit) + treeMap.addMouseListener (new DefaultMapController (treeMap) { + @Override + public void mouseClicked (MouseEvent e) { + ICoordinate pos = map.getPosition (e.getPoint()); + forceGeo (pos.getLat (), pos.getLon ()); + } + }); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropIcon.java b/src/java/adecWatt/view/jProp/JPropIcon.java new file mode 100644 index 0000000..ac71e54 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropIcon.java @@ -0,0 +1,50 @@ +package adecWatt.view.jProp; + +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; + +import misc.Util; +import static misc.Util.GBC; +import static misc.Util.GBCLNL; + +import adecWatt.view.JEditable; + +public class JPropIcon extends JPImage { + // ======================================== + protected int iconSize = 32; + + public JPropIcon (String propName, JEditable jEditable) { + super (propName, jEditable); + rightDB = iconDB; + } + + public JLabel getMainIcon (boolean edit) { + if (!edit && lastValue == null) + return jImage; + iconSize = 64; + setImage (); + if (edit) + setPopup (); + return jImage; + } + + protected ImageIcon getFitImage () { + return scaledImage.getSide (iconSize); + } + + protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + if (!edit && (hidden || lastValue == null)) + return; + setImage (); + Util.addComponent (localizedUserLabel.getJLabel (), jPropList, GBC); + Util.addComponent (new JLabel (" : "), jPropList, GBC); + Util.addComponent (jImage, jPropList, GBCLNL); + if (!edit) + return; + setPopup (); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropImage.java b/src/java/adecWatt/view/jProp/JPropImage.java new file mode 100644 index 0000000..210108a --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropImage.java @@ -0,0 +1,47 @@ +package adecWatt.view.jProp; + +import java.awt.Rectangle; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; + +import misc.ScaledImage; + +import adecWatt.view.JEditable; + +public class JPropImage extends JPImage { + // ======================================== + + public JPropImage (String propName, JEditable jEditable) { + super (propName, jEditable); + rightDB = imageDB; + jImage.addComponentListener (new ComponentAdapter () { + public void componentResized (ComponentEvent e) { + if (scaledImage == null) + return; + Rectangle bounds = jImage.getBounds (); + jImage.setIcon (scaledImage.getInsideFit (bounds.width, bounds.height, ScaledImage.defaultAdjust)); + } + }); + } + + protected ImageIcon getFitImage () { + // XXX sauf si déjà "componentResized" + return scaledImage.getInsideFit (defaultImageWidth, defaultImageHeight, ScaledImage.defaultAdjust); + } + + protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + if (!edit && (hidden || lastValue == null)) + return; + setImage (); + jTabbedPane.add (localizedUserLabel.getCurrentLabel (), jImage); + jEditable.addLocalizedUserLabel (localizedUserLabel); + if (!edit) + return; + setPopup (); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropNumber.java b/src/java/adecWatt/view/jProp/JPropNumber.java new file mode 100644 index 0000000..9702d32 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropNumber.java @@ -0,0 +1,12 @@ +package adecWatt.view.jProp; + +import adecWatt.view.JEditable; + +public class JPropNumber extends JPMultiValues { + // ======================================== + public JPropNumber (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropPreview.java b/src/java/adecWatt/view/jProp/JPropPreview.java new file mode 100644 index 0000000..2697f0f --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropPreview.java @@ -0,0 +1,62 @@ +package adecWatt.view.jProp; + +import java.awt.Rectangle; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTabbedPane; +import javax.swing.SwingConstants; +import misc.ScaledImage; +import misc.Util; + +import adecWatt.view.JEditable; +import adecWatt.view.JProp; + +public class JPropPreview extends JProp { + // ======================================== + protected JLabel jImage = new JLabel (); + protected ScaledImage scaledImage; + + public JPropPreview (String propName, JEditable jEditable) { + super (propName, jEditable); + jImage.setHorizontalAlignment (SwingConstants.CENTER); + jImage.addComponentListener (new ComponentAdapter () { + public void componentResized (ComponentEvent e) { + if (scaledImage == null) + return; + Rectangle bounds = jImage.getBounds (); + jImage.setIcon (scaledImage.getInsideFit (bounds.width, bounds.height, ScaledImage.defaultAdjust)); + } + }); + } + + protected void updateView () { + setImage (); + Util.packWindow (jImage); + } + + protected void setImage () { + scaledImage = jEditable.getPreview (); + if (scaledImage == null) { + jImage.setIcon (Util.loadActionIcon ("BreakIcon")); + return; + } + jImage.setIcon (scaledImage.getInsideFit (defaultImageWidth, defaultImageHeight, ScaledImage.defaultAdjust)); + + // try { + // javax.imageio.ImageIO.write (scaledImage.original, "png", new java.io.File ("/tmp/toto.png")); + // } catch (Exception e) { + // } + } + + protected void displayByType (boolean edit, JPanel jPropList, JTabbedPane jTabbedPane) { + setImage (); + if (scaledImage == null) + return; + jTabbedPane.add (localizedUserLabel.getCurrentLabel (), jImage); + jEditable.addLocalizedUserLabel (localizedUserLabel); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropSquare.java b/src/java/adecWatt/view/jProp/JPropSquare.java new file mode 100644 index 0000000..df7bba1 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropSquare.java @@ -0,0 +1,12 @@ +package adecWatt.view.jProp; + +import adecWatt.view.JEditable; + +public class JPropSquare extends JPMultiValues { + // ======================================== + public JPropSquare (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/JPropText.java b/src/java/adecWatt/view/jProp/JPropText.java new file mode 100644 index 0000000..8411eb0 --- /dev/null +++ b/src/java/adecWatt/view/jProp/JPropText.java @@ -0,0 +1,25 @@ +package adecWatt.view.jProp; + +import javax.swing.JComponent; +import javax.swing.JTextField; + +import adecWatt.view.JEditable; +import static adecWatt.model.Prop.PropMix; + +public class JPropText extends JPLabel { + + // ======================================== + public JPropText (String propName, JEditable jEditable) { + super (propName, jEditable); + } + + protected JComponent getEditor () { + JTextField editor = new JTextField (lastValue, 12); + editors = new JTextField [] {editor}; + setUnchange (editor, lastValue == PropMix); + setChangeListener (editor); + return editor; + } + + // ======================================== +} diff --git a/src/java/adecWatt/view/jProp/package-info.java b/src/java/adecWatt/view/jProp/package-info.java new file mode 100644 index 0000000..af7000d --- /dev/null +++ b/src/java/adecWatt/view/jProp/package-info.java @@ -0,0 +1,24 @@ +/** + * Architecture des classes + * + * JFilePreview + * JImagePopup + * (JProp) + * JPLabel + * JPropText + * JPropCity + * JPropEnum + * JPropBuilding + * JPMultiValues + * JPropNumber + * JPropSquare + * JPropCube + * JPImage + * JPropIcon + * JPropImage + * JPropPreview + * JPropGeo + * JPropArticle + * + */ +package adecWatt.view.jProp; diff --git a/src/java/adecWatt/view/package-info.java b/src/java/adecWatt/view/package-info.java new file mode 100644 index 0000000..b8a982f --- /dev/null +++ b/src/java/adecWatt/view/package-info.java @@ -0,0 +1,29 @@ +/** + * Architecture des classes + * + * JLocalizedUserLabel + * + * JAdecWatt + * JAdecWattMenuBar + * JAdecWattToolBar + * JAdecWattDialog + * + * JUnitPopup + * JDragUnit + * JItemPopup + * + * JWorkspaceView + * JBuildingView + * JLightplotView + * JComp + * + * JTransform : editable + * JDefProp + * JDefChoice + * + * JEditable + * JProp + * jProp... + * + */ +package adecWatt.view; diff --git a/src/java/misc/Config.java b/src/java/misc/Config.java new file mode 100644 index 0000000..9b263d8 --- /dev/null +++ b/src/java/misc/Config.java @@ -0,0 +1,523 @@ +package misc; + +import java.awt.Component; +import java.awt.Point; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import java.text.DecimalFormat; +import java.text.MessageFormat; +import java.util.Date; +import java.util.Locale; +import java.util.Properties; +import java.util.Vector; +import javax.swing.JComboBox; +import javax.swing.JList; +import javax.swing.JOptionPane; +import javax.swing.ListModel; + +/** + Managed the persistance key/value strings association. + This class could be used to managed all constants values in a application. + The values commme from a bundle jar (mix of class and data) or a dedicated directeory. +*/ +public class Config { + + static public final String FS = System.getProperty ("file.separator"); + + static public final String + dataDirname = "data", + configDirname = "config", + textsDirname = "texts", + logDirname = "log", + imagesDirname = "images", + iconsDirname = "images", + buttonDirname = "button", + flagsDirname = "flags"; + + /** Path to configuration files in files system. */ + static public final String + configSystemDir = dataDirname+FS+configDirname+FS, + logSystemDir = dataDirname+FS+logDirname+FS, + buttonSystemDir = dataDirname+FS+imagesDirname+FS+buttonDirname+FS; + + /** Path to configuration files in jar. */ + static public final String + configJarDir = dataDirname+"/"+configDirname+"/", + imagesJarDir = dataDirname+"/"+imagesDirname+"/", + textsJarDir = dataDirname+"/"+textsDirname+"/"; + + /** Configuration file extension. */ + static public final String + configExt = ".xml", + iconsExt = ".png", + imagesExt = ".png", + htmlExt = ".html", + logExt = ".log"; + + + /** Enconding charset for saving configuration. */ + static public final String configEncoding = "UTF8"; + + /** Comment used as header configuration file. */ + static public final String configHeaderFile = + "This file is automaticaly generated by {0} application at {1,time,short} on {1,date}."; + + /** Somme postfix for constants name in configuration file. */ + static public final String + checkedPostfix = "Checked", + undockedPostfix = "Undocked", + locationPostfix = "Location"; + + /** Message shows when trying to get string with a null key. */ + static private final String configNullKeyException = "No configuration associates with null key."; + + /** Message shows when trying to use configuration before load it. */ + static private final String configUseException = "No configuration loaded."; + + /** Message shows when load exception appears. */ + static private final String configLoadException = "Configuration {0} can''t be load (corrupted file ?)."; + + /** Message shows when save exception appears. */ + static private final String configSaveException = "Configuration {0} can''t be save."; + + /** Liste of constants (key/value strings association). */ + //static private Properties configuration; + static public Properties configuration; + + /** True if configuration need to be saved. */ + static private boolean configurationModified = false; + + // ======================================== + static private File PWD; + static private String[] dataPath; + static { + setPWD (Util.class); + setDataPath (".:.."); + } + + static public File getJarFileOrClassDir (Class applicationClass) { + try { + return new File (applicationClass.getProtectionDomain ().getCodeSource ().getLocation ().toURI ()); + } catch (Exception e) { + // dosn't work for applet + return null; + } + } + static public File getPWD () { return PWD; } + // XXX static public String getPWD () { return PWD.getAbsolutePath (); } + static public void setPWD (Class applicationClass) { + try { + PWD = getJarFileOrClassDir (applicationClass).getParentFile (); + } catch (Exception e) { + } + } + static public void setDataPath (String path) { + dataPath = path.split (":"); + } + static public File findDataDir () { + return findDataDir (false); + } + static public File findDataDir (boolean writable) { + String name = dataDirname; + try { + // search from excecution dir + File file = (new File (name)); + if (file.exists () && file.isDirectory () && (!writable || file.canWrite ())) + return file; + } catch (Exception e) { + } + for (String path : dataPath) { + try { + // search in relative path from jar + File file = (new File (PWD, path+FS+name)); + if (file.exists () && file.isDirectory () && (!writable || file.canWrite ())) + return file; + } catch (Exception e) { + } + } + return null; + } + + static public URL getDataUrl (String... names) { + if (names.length < 1) + return null; + String name = names[names.length - 1]; + String jarPath = "", systemPath = ""; + for (int i = 0; i < names.length - 1; i++) { + jarPath += names[i]+"/"; + systemPath += names[i]+FS; + } + try { + // search from excecution dir + File file = new File (systemPath+name); + if (file.exists ()) + return file.toURI ().toURL (); + } catch (Exception e) { + } + for (String path : dataPath) { + try { + // search in relative path from jar + File file = new File (PWD, path+FS+systemPath+name); + if (file.exists ()) + return file.getCanonicalFile ().toURI ().toURL (); + } catch (Exception e) { + } + } + try { + // search in jar + URL result = ClassLoader.getSystemResource (jarPath+name); + return result; + } catch (Exception e) { + } + return null; + } + + // ======================================== + /** + Load XML configuration file contains constants (key/value strings association). + @param applicationName the application name use to find file. + */ + static public final void load (String applicationName) { + configuration = new Properties (); + try { + File configDir = new File (findDataDir (), configDirname); + File configFile = new File (configDir, applicationName+configExt); + FileInputStream fileInputStream = new FileInputStream (configFile); + configuration.loadFromXML (fileInputStream); + fileInputStream.close (); + configurationModified = false; + } catch (Exception e) { + try { + configuration.loadFromXML (ClassLoader.getSystemResourceAsStream + (configJarDir+applicationName+configExt)); + configurationModified = false; + } catch (Exception e2) { + try { + configuration.loadFromXML (ClassLoader.getSystemResourceAsStream + (configJarDir+applicationName+configExt)); + configurationModified = false; + } catch (Exception e3) { + if (JOptionPane.YES_OPTION != JOptionPane.showConfirmDialog + (null, "Would you like to continue?", + " Can't load Configuration ", JOptionPane.YES_NO_OPTION)) + throw new IllegalArgumentException (MessageFormat.format (configLoadException, applicationName)); + } + } + } + } + + // ======================================== + /** + Return the loading state of the configuration. + @return true if the configuration is loaded. + */ + static public boolean isLoaded () { + return configuration != null; + } + + // ======================================== + /** + Save XML configuration file contains key/value strings association. + The file is not writing if no modification occure. + @param applicationName the application name use to save file. + */ + static public final void save (String applicationName) { + File configDir = new File (findDataDir (true), configDirname); + File configFile = new File (configDir, applicationName+configExt); + try { + save (applicationName, configFile); + } catch (IOException e) { + try { + e.printStackTrace (); + configDir.mkdirs (); + save (applicationName,configFile); + } catch (IOException e2) { + System.err.println (MessageFormat.format (configSaveException, applicationName)); + } + } catch (NullPointerException e) { + throw new IllegalArgumentException (configUseException); + } + } + + static public final void save (String applicationName, File file) + throws IOException { + if (!configurationModified && file.exists ()) + return; + if (!file.exists ()) + file.createNewFile (); + FileOutputStream fileOutputStream = new FileOutputStream (file); + configuration.storeToXML (fileOutputStream, + (new MessageFormat (configHeaderFile, Locale.US)).format (new Object[] {applicationName, new Date ()}, + new StringBuffer(), null).toString (), + configEncoding); + fileOutputStream.close (); + configurationModified = false; + } + + // ======================================== + + // XXX defaultValue peut être placé systématiquement (voir à null) + /** + Searches for the value with the specified key in this configuration list. + @param key the name of the configuration parameter. + @return the configuration value associated with the key or null if not found. + */ + static public final String getString (String key) { + if (key == null) + throw new IllegalArgumentException (configNullKeyException); + try { + return configuration.getProperty (key); + } catch (NullPointerException e) { + throw new IllegalArgumentException (configUseException); + } + } + + /** + Searches for the value with the specified key in this configuration list. + @param key the name of the configuration parameter. + @param defaultValue the defaultValue in case the key is not found. + @return the configuration value associated with the key or defaultValue if not found. + */ + static public final String getString (String key, String defaultValue) { + String value = configuration.getProperty (key); + if (value != null) + return value; + configuration.setProperty (key, defaultValue); + return defaultValue; + } + + /** + Change the value with the specified key in this configuration list. + @param key the name of the configuration parameter. + @param value the new configuration value associated with the key. + */ + static public final void setString (String key, String value) { + try { + configuration.setProperty (key, value); + configurationModified = true; + } catch (NullPointerException e) { + throw new IllegalArgumentException (configUseException); + } + } + + // ======================================== + static public final File getFile (String key) { + String fileName = getString (key); + if (fileName == null) + return null; + return new File (fileName); + } + + static public final void setFile (String key, File file) { + setString (key, file.getPath ()); + } + + // ======================================== + static public final boolean getBoolean (String key) { + return Boolean.parseBoolean (getString (key)); + } + + static public final boolean getBoolean (String key, boolean defaultValue) { + return Boolean.parseBoolean (getString (key, ""+defaultValue)); + } + + static public final void setBoolean (String key, boolean value) { + setString (key, ""+value); + } + + // ======================================== + static public final int getInt (String key) { + return Integer.parseInt (getString (key)); + } + + static public final int getInt (String key, int defaultValue) { + try { + return Integer.parseInt (getString (key, ""+defaultValue)); + } catch (Exception e) { + return defaultValue; + } + } + + static public final void setInt (String key, int value) { + setString (key, ""+value); + } + + // ======================================== + static public final float getFloat (String key) { + return Float.parseFloat (getString (key)); + } + + static public final float getFloat (String key, float defaultValue) { + try { + return Float.parseFloat (getString (key, ""+defaultValue)); + } catch (Exception e) { + return defaultValue; + } + } + + static public final void setFloat (String key, float value) { + setString (key, ""+value); + } + + // ======================================== + static public final double getDouble (String key) { + return Double.parseDouble (getString (key)); + } + + static public final double getDouble (String key, double defaultValue) { + try { + return Double.parseDouble (getString (key, ""+defaultValue)); + } catch (Exception e) { + return defaultValue; + } + } + + static public final void setDouble (String key, double value) { + setString (key, ""+value); + } + + // ======================================== + static public final T getEnum (String key, T defaultValue) { + return Util.toEnum (getString (key, ""+defaultValue), defaultValue); + } + + // ======================================== + static public final DecimalFormat indexFormat = new DecimalFormat ("-0000"); + + static public final Vector getList (String key, String defaultValue) { + Vector result = new Vector (); + int size = Integer.parseInt (getString (key+"-size", "1")); + result.add (getString (key, defaultValue)); + for (int i = 1; i < size; i++) + result.add (getString (key+indexFormat.format (i))); + return result; + } + + static public final void setList (String key, Vector value) { + // XXX suppression des anciennes valeurs + int size = value.size (); + int max = Integer.parseInt (getString (key+"-max", "10")); + setString (key+"-max", ""+max); + setString (key+"-size", ""+size); + setString (key, value.elementAt (0)); + size = Math.min (size, max); + for (int i = 1; i < size; i++) + setString (key+indexFormat.format (i), value.elementAt (i)); + } + + // ======================================== + // XXX faire un defaultValue en vector + static public final void loadJList (String key, JList jList, String defaultValue) { + Vector list = getList (key, defaultValue); + jList.setListData (list); + jList.setSelectedIndex (0); + } + + static public final void saveJList (String key, JList jList) { + Vector result = new Vector (); + ListModel model = jList.getModel (); + int size = model.getSize (); + for (int i = 0; i < size; i++) + result.add (model.getElementAt (i)); + int index = jList.getSelectedIndex (); + if (index >= 0) { + result.insertElementAt (result.remove (index), 0); + jList.setListData (result); + jList.setSelectedIndex (0); + } + setList (key, result); + } + + // ======================================== + // XXX faire un defaultValue en vector + static public final void loadJComboBox (String key, JComboBox jComboBox, String defaultValue) { + Vector list = getList (key, defaultValue); + jComboBox.removeAllItems (); + for (int i = 0; i < list.size (); i++) + jComboBox.addItem (list.elementAt (i)); + jComboBox.setSelectedIndex (0); + } + + static public final void loadJComboBoxInteger (String key, JComboBox jComboBox, String defaultValue) { + Vector list = getList (key, defaultValue); + jComboBox.removeAllItems (); + for (int i = 0; i < list.size (); i++) { + try { + jComboBox.addItem (Integer.parseInt (list.elementAt (i))); + } catch (Exception e) { + } + } + jComboBox.setSelectedIndex (0); + } + + static public final void saveJComboBox (String key, JComboBox jComboBox) { + // XX peut être ajouter la valeur éditer dans la liste + Vector result = new Vector (); + int size = jComboBox.getItemCount (); + for (int i = 0; i < size; i++) + result.add (jComboBox.getItemAt (i)); + int index = jComboBox.getSelectedIndex (); + if (index < 0) + result.insertElementAt ((String) jComboBox.getSelectedItem (), 0); + else + result.insertElementAt (result.remove (index), 0); + if (index != 0) { + jComboBox.removeAllItems (); + for (int i = 0; i < result.size (); i++) + jComboBox.addItem (result.elementAt (i)); + jComboBox.setSelectedIndex (0); + } + setList (key, result); + } + + static public final void saveJComboBoxInteger (String key, JComboBox jComboBox) { + // XX peut être ajouter la valeur éditer dans la liste + Vector result = new Vector (); + int size = jComboBox.getItemCount (); + for (int i = 0; i < size; i++) + result.add (""+jComboBox.getItemAt (i)); + int index = jComboBox.getSelectedIndex (); + if (index < 0) + result.insertElementAt ((String) jComboBox.getSelectedItem (), 0); + else + result.insertElementAt (result.remove (index), 0); + setList (key, result); + } + + // ======================================== + /** Text format used to represent coordonates (i.e. [x=123,y=456] ). */ + static public final MessageFormat coordonateFormat = new MessageFormat ("[x={0,number,integer},y={1,number,integer}]"); + + /** + Set component location from a constant coordonates in configuration. + @param key the name used to denoted the contant. + @param component modified by the coordonates retreived in configuration. + @param defaultLocation default coordonates used if non key present. + */ + static public final void loadLocation (String key, Component component, Point defaultLocation) { + try { + Object [] location = coordonateFormat.parse (getString (key+locationPostfix), + new java.text.ParsePosition (0)); + component.setLocation (((Number) location [0]).intValue (), ((Number) location [1]).intValue ()); + } catch (Exception e) { + component.setLocation (defaultLocation); + } + } + + /** + Save constant coordonates to configuration form a component location. + @param key the name used to denoted the contant. + @param component used to set the contant coordonates value. + */ + static public final void saveLocation (String key, Component component) { + Point location = component.getLocation (); + setString (key+locationPostfix, + coordonateFormat.format (new Object [] {location.x, location.y}, + new StringBuffer(), null).toString ()); + } + + // ======================================== +} diff --git a/src/java/misc/RemoteUpdate.java b/src/java/misc/RemoteUpdate.java new file mode 100644 index 0000000..744abd2 --- /dev/null +++ b/src/java/misc/RemoteUpdate.java @@ -0,0 +1,736 @@ +package misc; + +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileFilter; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.net.CookieHandler; +import java.net.CookieManager; +import java.net.CookiePolicy; +import java.net.URL; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.text.MessageFormat; +import java.text.NumberFormat; +import java.text.ParsePosition; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Random; +import java.util.TimeZone; +import java.util.TreeMap; +import java.util.TreeSet; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +import misc.Config; +import misc.ProgressState; +import misc.Util; + +public class RemoteUpdate { + + // ======================================== + static long delay = 2000; + static CookieManager cookieManager = new CookieManager(); + static { + try { + ((CookieManager) CookieHandler.getDefault ()).setCookiePolicy (CookiePolicy.ACCEPT_ALL); + } catch (Exception e) { + cookieManager.setCookiePolicy (CookiePolicy.ACCEPT_ALL); + CookieHandler.setDefault (cookieManager); + } + } + + // ======================================== + static public final String backExtention = "back"; + static public final int bufSize = 1024*1024; + static public final SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyyMMdd"); + static public final SimpleDateFormat timeFormat = new SimpleDateFormat ("yyyyMMddHHmmss"); + static public final SimpleDateFormat displayFormat = new SimpleDateFormat ("dd/MM/yyyy HH:mm:ss"); + static public final NumberFormat numberFormat = NumberFormat.getInstance (); + + static public enum CheckPeriod { NoCheck, Day, Week, Month, Year; }; + static public final List excludeFileName = Arrays.asList ("timestamp"); + + static public enum TodoFile {LocalRemove, Download, NoChange, Upload, RemoteRemove}; + static public class FileInfo { + long date, size; + public FileInfo (long date, long size) { this.date = date; this.size = size; } + public String toString () { return "{"+displayFormat.format (new Date (date))+" "+size+"}"; } + static public String getDate (FileInfo fileInfo) { return fileInfo == null ? "" : displayFormat.format (fileInfo.date); } + static public String getSize (FileInfo fileInfo) { return fileInfo == null ? "" : ""+fileInfo.size; } + }; + + static public FilenameFilter mirrorFilter = new FilenameFilter () { + public boolean accept (File dir, String name) { + return ! (excludeFileName.contains (name) || name.endsWith ("."+backExtention) || name.endsWith (".new")); + } + }; + + // ======================================== + static public class FileDescriptor { + // ---------------------------------------- + public TodoFile todo = TodoFile.NoChange; + public FileInfo local, remote; + public String toString () { return ""+todo+" "+local+" "+remote; } + // ---------------------------------------- + public void updateTodo (TodoFile action) { + todo = TodoFile.NoChange; + if (remote == null) { + switch (action) { + case LocalRemove: + case Upload: + todo = action; + } + return; + } + if (local == null) { + switch (action) { + case RemoteRemove: + case Download: + todo = action; + } + return; + } + if (local.size != remote.size) { + switch (action) { + case LocalRemove: + todo = TodoFile.Download; + break; + case RemoteRemove: + todo = TodoFile.Upload; + break; + default: + todo = action; + } + return; + } + if (local.date+delay < remote.date) { + if (action == TodoFile.Download || action == TodoFile.LocalRemove) + todo = TodoFile.Download; + return; + } + if (local.date > remote.date+delay) { + if (action == TodoFile.Upload || action == TodoFile.RemoteRemove) + todo = TodoFile.Upload; + //System.err.print (" "+local.date+" "+remote.date+" "+action); + return; + } + } + // ---------------------------------------- + }; + + // ======================================== + public class Mirror { + String token; + File localRepository; + FilenameFilter mirrorFilter = RemoteUpdate.mirrorFilter; + TreeSet excludeFiles; + TreeMap localFiles, remoteFiles; + TreeMap allFiles; + + // ---------------------------------------- + public Mirror (File root, String... params) { + token = params[0]; + if (params.length > 1) { + localRepository = root; + for (int i = 1; i < params.length; i++) + localRepository = new File (localRepository, params[i]); + } else + localRepository = new File (root, token); + } + public String toString () { return token+": "+localFiles+" "+remoteFiles; } + public synchronized void update () { + updateRemoteFiles (); + updateLocalFiles (); + if (remoteFiles == null) + return; + TreeSet allFilesName = new TreeSet (); + allFilesName.addAll (localFiles.keySet ()); + allFilesName.addAll (remoteFiles.keySet ()); + allFiles = new TreeMap (); + for (String fileName : allFilesName) + allFiles.put (fileName, new FileDescriptor ()); + for (String fileName : localFiles.keySet ()) + allFiles.get (fileName).local = localFiles.get (fileName); + for (String fileName : remoteFiles.keySet ()) + allFiles.get (fileName).remote = remoteFiles.get (fileName); + } + public void updateTodo (TodoFile action) { + if (allFiles == null) + return; + for (String fileName : allFiles.keySet ()) { + //System.err.print ("coucou : "+fileName+" "); + allFiles.get (fileName).updateTodo (action); + //System.err.println (); + } + } + public long getSize (TreeSet filesName, TodoFile action) { + long result = 0; + if (allFiles == null || action == TodoFile.NoChange) + return result; + boolean remote = false; + switch (action) { + case LocalRemove: + case Download: + remote = true; + } + for (String fileName : filesName) { + FileDescriptor file = allFiles.get (fileName); + if (file == null) + continue; + try { + if (file.todo == action) + result += remote ? file.remote.size : file.local.size; + } catch (Exception e) { + } + } + return result; + } + public TreeSet getFileAction (TodoFile action) { + TreeSet result = new TreeSet (); + if (allFiles == null) + return result; + for (String fileName : allFiles.keySet ()) + if (allFiles.get (fileName).todo == action) + result.add (fileName); + return result; + } + public synchronized boolean hasNewVersion () { + update (); + return check (TodoFile.Download).size () > 0; + } + public synchronized TreeSet check (TodoFile action) { + updateTodo (action); + return getFileAction (action); + } + public TreeSet performe (TodoFile action, ProgressState progressState) { + try { + TreeSet files = check (action); + if (progressState != null) + progressState.init (Bundle.getMessage (""+action), (int) getSize (files, action)); + switch (action) { + case LocalRemove: + return localRemove (this, files, progressState); + case RemoteRemove: + return remoteRemove (this, files, progressState); + case Download: + return getRemoteFiles (this, files, progressState); + case Upload: + return putRemoteFiles (this, files, progressState); + } + } finally { + if (progressState != null) + progressState.end (); + } + return new TreeSet (); + } + public String getInfo (TreeSet files, TodoFile action) { + return MessageFormat.format (Bundle.getMessage ("DownloadInfo"), + Bundle.getLabel (Util.toCapital (token)), + allFiles == null ? 0 : 1, files.size (), Util.toNumIn2Units (getSize (files, action))); + } + public FileDescriptor getInfo (String fileName) { + return allFiles.get (fileName); + } + + // ---------------------------------------- + private void updateLocalFiles () { + excludeFiles = new TreeSet (); + localFiles = new TreeMap (); + updateLocalFiles (localRepository, token); + } + private void updateLocalFiles (File localRepository, String name) { + if (localRepository.isFile ()) { + if (excludeFileName.contains (name) || name.endsWith ("."+backExtention)) { + excludeFiles.add (name); + return; + } + localFiles.put (name, new FileInfo (localRepository.lastModified (), localRepository.length ())); + return; + } + if (!localRepository.isDirectory ()) + return; + for (String child : localRepository.list ()) { + updateLocalFiles (new File (localRepository, child), name+"/"+child); + } + } + private void getExcludeFiles (File localRepository, String name) { + if (localRepository.isFile ()) { + localFiles.put (name, new FileInfo (localRepository.lastModified (), localRepository.length ())); + return; + } + if (!localRepository.isDirectory ()) + return; + for (String child : localRepository.list (mirrorFilter)) { + if (excludeFileName.contains (child)) + continue; + updateLocalFiles (new File (localRepository, child), name+"/"+child); + } + } + // ---------------------------------------- + private void updateRemoteFiles () { + try { + allFiles = null; + remoteFiles = null; + URLConnection urlConnection = getUrlConnection ("zipList", token); + urlConnection.connect (); + remoteFiles = new TreeMap (); + receiveZip (urlConnection, new ZipLineReader () { + public void readLine (String line) { + ParsePosition pos = new ParsePosition (0); + try { + long date = timeFormat.parse (line, pos).getTime (); + pos.setIndex (pos.getIndex ()+1); + long size = numberFormat.parse (line, pos).longValue (); + String fileName = line.substring (pos.getIndex ()+1); + remoteFiles.put (fileName, new FileInfo (date, size)); + } catch (Exception e) { + } + }}, token); + } catch (Exception e) { + System.err.println (e); + //e.printStackTrace (); + } + } + // ---------------------------------------- + }; + + // ======================================== + public String protocol; + public String serverName; + public String versionName; + public String requestModel; + public Mirror[] mirrors; + public RemoteUpdate (String protocol, String serverName, String versionName, String requestModel, String []... mirrorsParams) { + this.protocol = protocol; + this.serverName = serverName; + this.versionName = versionName; + this.requestModel = requestModel; + File root = Config.getPWD ().getParentFile (); + this.mirrors = new Mirror[mirrorsParams.length]; + int idx = 0; + for (String [] params : mirrorsParams) + mirrors[idx++] = new Mirror (root, params); + } + public CheckPeriod currentPeriod () { + return CheckPeriod.valueOf (CheckPeriod.class, Config.getString ("CheckPeriod", ""+CheckPeriod.Month)); + } + public boolean hasNewVersion () { + CheckPeriod period = currentPeriod (); + Date lastCheck = new Date (); + try { + lastCheck = dateFormat.parse (Config.getString ("LastCheck", "20150401")); + } catch (Exception e) { + } + Date today = new Date (); + long age = (today.getTime ()-lastCheck.getTime ())/(24*60*60*1000); + switch (period) { + case NoCheck: + return false; + case Day: + if (age < 1) + return false; + break; + case Week: + if (age < 7) + return false; + break; + case Month: + if (age < 31) + return false; + break; + case Year: + if (age < 366) + return false; + break; + } + Config.setString ("LastCheck", dateFormat.format (today)); + for (Mirror mirror : mirrors) + if (mirror.hasNewVersion ()) + return true; + return false; + } + + // ======================================== + private URLConnection getUrlConnection (String cmd, String arg) + throws IOException { + return getUrlConnection (MessageFormat.format (requestModel, versionName, cmd, arg)); + } + private URLConnection getUrlConnection (String uri) + throws IOException { + URL url = new URL (protocol+"://"+serverName+uri); + URLConnection urlConnection = url.openConnection (); + urlConnection.setRequestProperty ("User-Agent", "Adecwatt Agent"); + urlConnection.setUseCaches (true); + return urlConnection; + } + + static private Random random = new Random (); + static private final String charset = "UTF-8"; + static private final String LINE_FEED = "\r\n"; + static public String getBoundary () { + // XXX we must check not apears in message :-( + return "=-="+Long.toString (random.nextLong (), 36).toUpperCase ()+"=-="; + } + + // ======================================== + public abstract class ZipBuilder { + public abstract void writeEntry (String token, ZipOutputStream zipOut) throws IOException; + }; + public class TextZipBuilder extends ZipBuilder { + private TreeSet filesName; + public TextZipBuilder (TreeSet filesName) { this.filesName = filesName; } + public void writeEntry (String token, ZipOutputStream zipOut) throws IOException { + ZipEntry zipOutEntry = new ZipEntry (token); + zipOut.putNextEntry (zipOutEntry); + PrintWriter entryWriter = new PrintWriter (new OutputStreamWriter (zipOut)); + for (String fileName : filesName) + entryWriter.print (fileName+"\n"); + entryWriter.flush (); + zipOut.closeEntry (); + } + }; + public abstract class ZipFileReader { + public abstract boolean readEntry (ZipInputStream zipIn, String entryName, String token) throws IOException; + }; + public abstract class ZipLineReader extends ZipFileReader { + public boolean readEntry (ZipInputStream zipIn, String entryName, String token) throws IOException { + if (! entryName.equals (token)) + return true; + BufferedReader in = new BufferedReader (new InputStreamReader (zipIn)); + for (;;) { + String line = in.readLine (); + if (line == null) + break; + if ("".equals (line)) + continue; + readLine (line); + } + return false; + } + + public abstract void readLine (String line); + }; + + // ======================================== + public void receiveZip (URLConnection urlConnection, ZipFileReader zipFileReader, String token) { + try { + String contentType = urlConnection.getContentType (); + if (contentType == null || !contentType.startsWith ("application/zip")) + return; + ZipInputStream zipIn = new ZipInputStream (urlConnection.getInputStream ()); + for (;;) { + ZipEntry zipInEntry = zipIn.getNextEntry (); + if (zipInEntry == null) + break; + String entryName = zipInEntry.getName (); + if (!entryName.startsWith (token)) + continue; + if (!zipFileReader.readEntry (zipIn, entryName, token)) + break; + } + } catch (Exception e) { + e.printStackTrace (); + } + } + + // ======================================== + public URLConnection sendZip (String cmd, String token, ZipBuilder zipBuilder) { + try { + URLConnection urlConnection = getUrlConnection (cmd, token); + String boundary = getBoundary (); + urlConnection.setRequestProperty ("Content-Type", "multipart/form-data; boundary="+boundary); + urlConnection.setDoOutput (true); + urlConnection.setDoInput (true); + OutputStream httpStream = urlConnection.getOutputStream (); + PrintWriter httpWriter = new PrintWriter (new OutputStreamWriter (httpStream, charset), true); + httpWriter.append ("--"+boundary).append (LINE_FEED); + httpWriter.append ("Content-Disposition: form-data; name=\""+cmd+"\"; filename=\""+cmd+"\"").append (LINE_FEED); + httpWriter.append ("Content-Type: application/zip").append (LINE_FEED); + httpWriter.append ("Content-Transfer-Encoding: binary").append (LINE_FEED); + httpWriter.append (LINE_FEED).flush (); + ByteArrayOutputStream memStream = new ByteArrayOutputStream (); + ZipOutputStream zipOut = new ZipOutputStream (memStream); + + zipBuilder.writeEntry (token, zipOut); + + zipOut.flush (); + zipOut.close (); + httpWriter.flush (); + httpStream.write (memStream.toByteArray ()); + httpWriter.append (LINE_FEED).flush (); + httpWriter.append ("--"+boundary+"--").append(LINE_FEED); + httpWriter.close (); + + urlConnection.connect (); + return urlConnection; + } catch (Exception e) { + e.printStackTrace (); + } + return null; + } + + // ======================================== + public TreeSet localRemove (Mirror mirror, TreeSet filesName, ProgressState progressState) { + if (filesName == null) + filesName = new TreeSet (); + if (mirror.excludeFiles != null) + filesName.addAll (mirror.excludeFiles); + TreeSet removed = new TreeSet (); + for (String fileName : filesName) { + if (! fileName.startsWith (mirror.token)) + continue; + fileName = fileName.substring (mirror.token.length ()); + File oldFile = new File (mirror.localRepository.getAbsolutePath ()+fileName); + if (!oldFile.delete ()) + System.err.println ("coucou pb delete: "+oldFile); + removed.add (fileName); + } + return removed; + } + + // ======================================== + public TreeSet remoteRemove (Mirror mirror, TreeSet filesName, ProgressState progressState) { + if (filesName == null) + filesName = new TreeSet (); + if (mirror.excludeFiles != null) + filesName.addAll (mirror.excludeFiles); + TreeSet removed = new TreeSet (); + if (filesName.size () < 1) + return removed; + URLConnection urlConnection = sendZip ("zipRemove", mirror.token, new TextZipBuilder (filesName)); + receiveZip (urlConnection, new ZipLineReader () { + public void readLine (String line) { + removed.add (line); + }}, mirror.token); + return removed; + } + + // ======================================== + public TreeSet getRemoteFiles (Mirror mirror, TreeSet filesName, ProgressState progressState) { + TreeSet downloaded = new TreeSet (); + try { + if (filesName.size () < 1) + return downloaded; + URLConnection urlConnection = sendZip ("zipGets", mirror.token, new TextZipBuilder (filesName)); + byte[] tmp = new byte[bufSize]; + receiveZip (urlConnection, new ZipFileReader () { + public boolean readEntry (ZipInputStream zipIn, String entryName, String token) throws IOException { + File newFile = mirror.localRepository; + for (String item : entryName.substring (mirror.token.length ()).split ("/")) { + if (item == null || item.isEmpty ()) + continue; + newFile = new File (newFile, item); + } + File dirFile = newFile.getParentFile (); + dirFile.mkdirs (); + File tmpFile = File.createTempFile ("download", "tmp", dirFile); + tmpFile.deleteOnExit (); + Util.copy (zipIn, new FileOutputStream (tmpFile), tmp, progressState, false, true); + // XXX tmpFile.setLastModified (zipInEntry.getLastModifiedTime ().toMillis ()); + tmpFile.setLastModified (mirror.allFiles.get (entryName).remote.date); + if (progressState != null && progressState.isInterrupted ()) + return false; + Util.backup (newFile, Util.getExtention (newFile), backExtention); + try { + Files.move (tmpFile.toPath (), newFile.toPath (), StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + } + if (tmpFile.exists ()) { + System.err.println ("can't change open file!"); + tmpFile.renameTo (new File (""+newFile+".new")); + } + downloaded.add (entryName); + return true; + }}, mirror.token); + } catch (Exception e) { + e.printStackTrace (); + } + return downloaded; + } + + // ======================================== + public static boolean newFileExists (File file) { + if (file.isFile () && file.exists () && "new".equals (Util.getExtention (file))) + return true; + if (!file.isDirectory ()) + return false; + for (File subFile : file.listFiles (new FileFilter () { + public boolean accept (File file2) { + return file2.isDirectory () || (file2.isFile () && "new".equals (Util.getExtention (file2))); + } + })) + if (newFileExists (subFile)) + return true; + return false; + } + public static void renameNewFile (File file) { + if (file.isFile () && file.exists () && "new".equals (Util.getExtention (file))) { + try { + File newFile = new File (file.getParentFile (), Util.getBase (file)); + Files.move (file.toPath (), newFile.toPath (), StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + } + } + if (!file.isDirectory ()) + return; + for (File subFile : file.listFiles (new FileFilter () { + public boolean accept (File file2) { + return file2.isDirectory () || (file2.isFile () && "new".equals (Util.getExtention (file2))); + } + })) + renameNewFile (subFile); + } + + // ======================================== + public static void launch (File jarFile) { + try { + Runtime.getRuntime ().exec ("java -jar "+jarFile.getName (), null, jarFile.getParentFile ()); + System.exit (0); + } catch (Exception e) { + e.printStackTrace (); + } + } + + // ======================================== + public TreeSet putRemoteFiles (Mirror mirror, TreeSet filesName, ProgressState progressState) { + TreeSet uploaded = new TreeSet (); + if (filesName == null || filesName.size () < 1) + return uploaded; + try { + byte[] tmp = new byte[bufSize]; + TimeZone timeZone = TimeZone.getDefault (); + URLConnection urlConnection = sendZip ("zipPuts", mirror.token, new ZipBuilder () { + public void writeEntry (String token, ZipOutputStream zipOut) throws IOException { + for (String fileName : filesName) { + if (! fileName.startsWith (token)) + continue; + ZipEntry zipOutEntry = new ZipEntry (fileName); + File file = new File (mirror.localRepository, fileName.substring (token.length ())); + long dateMs = file.lastModified (); + dateMs -= timeZone.getOffset (dateMs); + zipOutEntry.setTime (dateMs); + zipOut.putNextEntry (zipOutEntry); + PrintWriter entryWriter = new PrintWriter (new OutputStreamWriter (zipOut)); + Util.copy (new FileInputStream (file), zipOut, tmp, progressState, true, false); + entryWriter.flush (); + zipOut.closeEntry (); + } + }}); + receiveZip (urlConnection, new ZipLineReader () { + public void readLine (String line) { + uploaded.add (line); + }}, mirror.token); + } catch (Exception e) { + e.printStackTrace (); + } + return uploaded; + } + + // ======================================== + public String getRoles (String login) { + try { + URLConnection urlConnection = getUrlConnection ("getRoles", login); + urlConnection.connect (); + BufferedReader br = new BufferedReader (new InputStreamReader (urlConnection.getInputStream ())); + String roles = br.readLine (); + for (;;) { + String line = br.readLine (); + if (line == null) + break; + } + if (roles.indexOf ("|") < 0) + return null; + return roles; + } catch (Exception e) { + return null; + } + } + public void logoutDokuwiki () { + try { + URLConnection urlConnection = getUrlConnection ("?do=logout"); + urlConnection.connect (); + forceOpenConnection (urlConnection); + } catch (Exception e) { + } + } + public void loginDokuwiki (String login, String password) { + try { + // page de connexion + URLConnection urlConnection = getUrlConnection ("?do=login"); + urlConnection.connect (); + String sectok = null; + BufferedReader br = new BufferedReader (new InputStreamReader (urlConnection.getInputStream ())); + for (;;) { + String line = br.readLine (); + if (line == null) + break; + if (line.indexOf ("name=\"sectok\"") < 0) + continue; + Pattern p = Pattern.compile (".*<([^<]*name=\"sectok\"[^>]*)>.*"); + Matcher m = p.matcher (line); + if (!m.matches ()) + break; + line = m.group (1); + p = Pattern.compile (".*value=\"([^\"]*)\".*"); + m = p.matcher (line); + if (!m.matches ()) + break; + sectok = m.group (1); + break; + } + if (sectok == null) + return; + // envoie de mot de passe + urlConnection = getUrlConnection ("?do=login"); + urlConnection.setDoOutput (true); + urlConnection.setDoInput (true); + urlConnection.setRequestProperty ("Content-Type", "application/x-www-form-urlencoded"); + String post = + "sectok="+sectok+"&"+ + "id=debut&"+ + "do=login&"+ + "u="+URLEncoder.encode (login, charset)+"&"+ + "p="+URLEncoder.encode (password, charset); + urlConnection.setRequestProperty ("Content-Length", ""+post.getBytes ().length); + OutputStream httpStream = urlConnection.getOutputStream (); + PrintWriter httpWriter = new PrintWriter (new OutputStreamWriter (httpStream, charset), true); + httpWriter.append (post).append (LINE_FEED).flush (); + urlConnection.connect (); + forceOpenConnection (urlConnection); + } catch (Exception e) { + e.printStackTrace (); + } + } + + // ======================================== + static public void forceOpenConnection (URLConnection urlConnection) { + try { + BufferedReader br = new BufferedReader (new InputStreamReader (urlConnection.getInputStream ())); + for (;;) { + String line = br.readLine (); + if (line == null) + break; + } + } catch (Exception e) { + } + } + + // ======================================== +} diff --git a/src/java/misc/Util.java b/src/java/misc/Util.java new file mode 100644 index 0000000..f4e8848 --- /dev/null +++ b/src/java/misc/Util.java @@ -0,0 +1,927 @@ +// ================================================================================ +// François MERCIOL 2012 +// Name : Util.java +// Language : Java +// Author : François Merciol +// CopyLeft : Cecil B +// Creation : 2012 +// Version : 0.1 (xx/xx/xx) +// ================================================================================ +package misc; + +import java.applet.Applet; +import java.applet.AudioClip; +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Image; +import java.awt.Insets; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.InputEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Method; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.text.Normalizer; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; +import javax.swing.AbstractButton; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.DefaultCellEditor; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JComboBox; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.JScrollPane; +import javax.swing.JSlider; +import javax.swing.JSplitPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.border.Border; +import javax.swing.plaf.basic.BasicButtonUI; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumn; + +import static misc.Config.FS; + +public class Util implements SwingConstants { + + // ======================================== + // Change Plugins.version too ! + static public final Long version = 20171101L; + + static public final int bufSize = 1024*1024; + static public final String NL = System.getProperty ("line.separator"); + static public final String ON = "On"; + static public final String OFF = "Off"; + + static public BasicButtonUI buttonNoUI = new BasicButtonUI (); + static public Border buttonNoBorder = BorderFactory.createEmptyBorder (2, 2, 2, 2); + + // ======================================== + static public final String toNumIn2Units (long bytes) { + if (bytes == 0) + return "0 "; + int u = 0; + for (; bytes > 1024*1024; bytes >>= 10) + u++; + + if (bytes < 1024) + return String.format ("%d %c", bytes, " kMGTPEZY".charAt (u)).replace (" ", ""); + u++; + return String.format ("%.1f %c", bytes/1024f, " kMGTPEZY".charAt (u)).replace (",0 ", " ").replace (" ", ""); + } + static public final String toNumIn10Units (long bytes) { + if (bytes == 0) + return "0 "; + int u = 0; + for (; bytes > 1000*1000; bytes >>= 10) + u++; + + if (bytes < 1000) + return String.format ("%d %c", bytes, " kMGTPEZY".charAt (u)).replace (" ", ""); + u++; + return String.format ("%.1f %c", bytes/1000f, " kMGTPEZY".charAt (u)).replace (",0 ", " ").replace (" ", ""); + } + @SuppressWarnings ({"unchecked", "rawtypes"}) + static public final T toEnum (String value, T defaultValue) { + try { + return (T) Enum.valueOf ((Class)defaultValue.getClass (), value); + } catch (Exception e) { + } + return defaultValue; + } + + // ======================================== + static public final String toColumn (String [] lines, int nbColumn) { + int size = lines.length; + if (size < 1) + return ""; + if (size < 2) + return lines [0]+"\n"; + String result = ""; + int nbLignes = size/nbColumn; + int nbLongColumn = size % nbColumn; + for (int i = 0, k = 0; k < size; i++) { + int idx = i; + String sep = ""; + for (int j = 0; j < nbColumn && k < size; j++, k++) { + result += sep + lines [idx]; + sep = "\t"; + idx += nbLignes; + if (j < nbLongColumn) + idx++; + } + result += "\n"; + } + return result; + } + + // ======================================== + static public final String[] set2string (Set set) { + String [] result = new String [set.size ()]; + int idx = 0; + for (String key : set) + result [idx++] = key; + return result; + } + + // ====================================================================== + static public JScrollPane getJScrollPane (Component view) { + return getJScrollPane (view, true, true); + } + static public JScrollPane getJScrollPane (Component view, boolean vNeed, boolean hNeed) { + return new JScrollPane (view, + vNeed ? JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED : JScrollPane.VERTICAL_SCROLLBAR_NEVER, + hNeed ? JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED : JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); + } + + // ======================================== + static public JSplitPane getJSplitPane (int newOrientation, Component newLeftComponent, Component newRightComponent) { + JSplitPane result = new JSplitPane (newOrientation, newLeftComponent, newRightComponent); + result.setResizeWeight (0); + result.setOneTouchExpandable (true); + result.setContinuousLayout (true); + return result; + } + + // ======================================== + static public final void setEnabled (Component component, boolean enabled) { + component.setEnabled (enabled); + try { + for (Component component2 : ((Container) component).getComponents ()) + setEnabled (component2, enabled); + } catch (Exception e) { + } + } + + // ======================================== + static public final GridBagConstraints + GBC, GBCNL, GBCLNL, GBCBNL; + static { + GBC = new GridBagConstraints (); + GBC.insets = new Insets (1, 2, 1, 2); + GBC.weightx = GBC.weighty = 1.; + GBC.fill = GridBagConstraints.HORIZONTAL; + + GBCLNL = (GridBagConstraints) GBC.clone (); + GBCLNL.anchor = GridBagConstraints.WEST; + GBCLNL.fill = GridBagConstraints.NONE; + GBCLNL.gridwidth = GridBagConstraints.REMAINDER; + + GBCNL = (GridBagConstraints) GBC.clone (); + GBCNL.gridwidth = GridBagConstraints.REMAINDER; + + + GBCBNL = (GridBagConstraints) GBCNL.clone (); + GBCBNL.fill = GridBagConstraints.BOTH; + } + static public JPanel getGridBagPanel () { + return new JPanel (new GridBagLayout ()); + } + static public void addLabelFields (Container container, String label, Component... components) { + addLabel (label, RIGHT, container, GBC); + for (int i = 0; i < components.length; i++) + addComponent (components[i], container, i == components.length -1 ? GBCNL : GBC); + } + + // ======================================== + static public AbstractButton activeButton (AbstractButton button, String action, ActionListener actionListener) { + button.setActionCommand (action); + Bundle.addLocalizedActioner (button); + button.setToolTipText (Bundle.getAction (action)); + Bundle.addLocalizedToolTip (button); + if (actionListener != null) + button.addActionListener (actionListener); + return button; + } + + // ======================================== + static public final JCheckBox newCheckIcon (String action, ActionListener actionListener) { + JCheckBox button = new JCheckBox (loadActionIcon (action+OFF)); + button.setSelectedIcon (loadActionIcon (action+ON)); + activeButton (button, action, actionListener); + return button; + } + static public final JCheckBox newCheckIcon (String action, ActionListener actionListener, boolean defaultValue) { + JCheckBox button = newCheckIcon (action, actionListener); + button.setSelected (defaultValue); + return button; + } + static public final JCheckBox addCheckIcon (String action, ActionListener actionListener, Container container) { + JCheckBox button = newCheckIcon (action, actionListener); + container.add (button); + return button; + } + static public final JCheckBox addCheckIcon (String action, ActionListener actionListener, boolean defaultValue, Container container) { + JCheckBox button = newCheckIcon (action, actionListener); + container.add (button); + button.setSelected (defaultValue); + return button; + } + static public final void addCheckIcon (List actions, ActionListener actionListener, Container container) { + for (String action : actions) + addCheckIcon (action, actionListener, container); + } + static public final JCheckBox addCheckIcon (String action, ActionListener actionListener, boolean defaultValue, + Container container, GridBagConstraints constraint) { + JCheckBox button = newCheckIcon (action, actionListener, defaultValue); + addComponent (button, container, constraint); + return button; + } + + static public void setCheckIconTableCellEditorRenderer (String action, TableColumn tableColumn) { + tableColumn.setCellRenderer (new CheckIconTableCellEditorRenderer (action)); + tableColumn.setCellEditor (new DefaultCellEditor (newCheckIcon (action, null))); + } + + static public class CheckIconTableCellEditorRenderer implements TableCellRenderer { + JCheckBox jCheckBox; + public CheckIconTableCellEditorRenderer (String action) { + jCheckBox = Util.newCheckIcon (action, null); + } + public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + jCheckBox.setBackground (isSelected ? table.getSelectionBackground () : table.getBackground ()); + jCheckBox.setForeground (isSelected ? table.getSelectionForeground () : table.getForeground ()); + if (value instanceof Boolean) + jCheckBox.setSelected (((Boolean) value).booleanValue ()); + return jCheckBox; + } + } + + // ======================================== + static public final JCheckBox newCheckButton (String action, ActionListener actionListener) { + JCheckBox button = new JCheckBox (Bundle.getAction (action), loadActionIcon (action+OFF)); + button.setSelectedIcon (loadActionIcon (action+ON)); + activeButton (button, action, actionListener); + return button; + } + static public final JCheckBox addCheckButton (String action, ActionListener actionListener, Container container) { + JCheckBox button = newCheckButton (action, actionListener); + container.add (button); + return button; + } + static public final void addCheckButton (List actions, ActionListener actionListener, Container container) { + for (String action : actions) + addCheckButton (action, actionListener, container); + } + static public final JCheckBox addCheckButton (String action, ActionListener actionListener, + Container container, GridBagConstraints constraint) { + JCheckBox button = newCheckButton (action, actionListener); + addComponent (button, container, constraint); + return button; + } + // ======================================== + static public final JCheckBox newCheckButtonConfig (String action, ActionListener actionListener, boolean defaultValue) { + boolean startValue = Config.getBoolean (action+Config.checkedPostfix, defaultValue); + JCheckBox button = newCheckButton (action, actionListener); + button.setSelected (startValue); + return button; + } + + static public final JCheckBox addCheckButtonConfig (String action, ActionListener actionListener, boolean defaultValue, + Container container) { + JCheckBox button = newCheckButtonConfig (action, actionListener, defaultValue); + container.add (button); + return button; + } + + static public final JCheckBox addCheckButtonConfig (String action, ActionListener actionListener, boolean defaultValue, + Container container, GridBagConstraints constraint) { + JCheckBox button = newCheckButtonConfig (action, actionListener, defaultValue); + // XXX le test suivant a été supprimer, il faut vérifier que cela tourne toujours + //if (container != null) + addComponent (button, container, constraint); + return button; + } + + // ======================================== + static public final JRadioButton newRadioButton (String action, ActionListener actionListener, ButtonGroup group, String selected) { + JRadioButton button = new JRadioButton (Bundle.getAction (action), loadActionIcon (action+OFF), + action.equals (selected)); + button.setSelectedIcon(loadActionIcon (action+ON)); + activeButton (button, action, actionListener); + group.add (button); + return button; + } + + static public final void addRadioButton (List actions, ActionListener actionListener, ButtonGroup group, String selected, + Container container) { + for (String action : actions) { + JRadioButton button = newRadioButton (action, actionListener, group, selected); + container.add (button); + } + } + + static public final JRadioButton addRadioButton (String action, ActionListener actionListener, ButtonGroup group, String selected, + Container container, GridBagConstraints constraint) { + JRadioButton button = newRadioButton (action, actionListener, group, selected); + addComponent (button, container, constraint); + return button; + } + + // ======================================== + static public final JButton newButton (String action, ActionListener actionListener) { + JButton button = new JButton (Bundle.getAction (action), loadActionIcon (action)); + activeButton (button, action, actionListener); + return button; + } + static public final void newButton (List actions, ActionListener actionListener) { + for (String action : actions) + newButton (action, actionListener); + } + + static public final JButton addButton (String action, ActionListener actionListener, Container container) { + JButton button = newButton (action, actionListener); + container.add (button); + return button; + } + static public final void addButton (List actions, ActionListener actionListener, Container container) { + for (String action : actions) + addButton (action, actionListener, container); + } + static public final JButton addButton (String action, ActionListener actionListener, Container container, GridBagConstraints constraint) { + JButton button = newButton (action, actionListener); + addComponent (button, container, constraint); + return button; + } + + // ======================================== + static public final JButton newIconButton (String action, ActionListener actionListener) { + JButton button = new JButton (loadActionIcon (action)); + button.setAlignmentX (Component.CENTER_ALIGNMENT); + activeButton (button, action, actionListener); + return button; + } + static public final void newIconButton (List actions, ActionListener actionListener) { + for (String action : actions) + newIconButton (action, actionListener); + } + + static public final JButton addIconButton (String action, ActionListener actionListener, Container container) { + JButton button = newIconButton (action, actionListener); + container.add (button); + return button; + } + static public final void addIconButton (List actions, ActionListener actionListener, Container container) { + for (String action : actions) + addIconButton (action, actionListener, container); + } + static public final JButton addIconButton (String action, ActionListener actionListener, Container container, GridBagConstraints constraint) { + JButton button = new JButton (loadActionIcon (action)); + activeButton (button, action, actionListener); + addComponent (button, container, constraint); + return button; + } + + static public final void unBoxButton (Container container) { + for (AbstractButton button : collectButtons (null, container).values ()) + unBoxButton (button); + } + static public final void unBoxButton (AbstractButton button) { + button.setUI (buttonNoUI); + button.setBorder (buttonNoBorder); + } + + // ======================================== + static public final void addMenuItem (String action, ActionListener actionListener, Container container) { + JMenuItem item = new JMenuItem (Bundle.getAction (action), loadActionIcon (action)); + activeButton (item, action, actionListener); + container.add (item); + } + static public final void addMenuItem (List actions, ActionListener actionListener, Container container) { + for (String action : actions) + addMenuItem (action, actionListener, container); + } + + + // ======================================== + static public Hashtable> allCheckBox = new Hashtable> (); + static public void updateCheckBox (String action, boolean value) { + ArrayList buttons = allCheckBox.get (action); + if (buttons == null) + return; + Config.setBoolean (action+Config.checkedPostfix, value); + for (AbstractButton button : buttons) + if (button.isSelected () != value) + button.setSelected (value); + } + + static public final void addCheckMenuItem (List actions, ActionListener actionListener, Container container) { + for (String action : actions) + addCheckMenuItem (action, actionListener, container); + } + static public final JCheckBoxMenuItem addCheckMenuItem (String action, ActionListener actionListener, Container container) { + return addCheckMenuItem (action, actionListener, Config.getBoolean (action+Config.checkedPostfix, false), container); + } + static public final JCheckBoxMenuItem addCheckMenuItem (String action, ActionListener actionListener, + boolean defaultValue, Container container) { + boolean startValue = Config.getBoolean (action+Config.checkedPostfix, defaultValue); + JCheckBoxMenuItem item = new JCheckBoxMenuItem (Bundle.getAction (action), loadActionIcon (action+OFF), startValue); + item.setSelectedIcon (loadActionIcon (action+ON)); + activeButton (item, action, actionListener); + container.add (item); + ArrayList checkList = allCheckBox.get (action); + if (checkList == null) + allCheckBox.put (action, checkList = new ArrayList ()); + checkList.add (item); + return item; + } + + // ======================================== + static public final JMenu addJMenu (JMenuBar jMenuBar, String menuId) { + JMenu menu = new JMenu (Bundle.getTitle (menuId)); + menu.setActionCommand (menuId); + Bundle.addLocalizedMenu (menu); + jMenuBar.add (menu); + return menu; + } + + // ======================================== + static public void addComponent (Component component, Container container, GridBagConstraints constraint) { + GridBagLayout gridbag = (GridBagLayout) container.getLayout (); + gridbag.setConstraints (component, constraint); + container.add (component); + } + + // ======================================== + static public final Dimension space = new Dimension (10, 10); + static public void addTextFieldSlider (JTextField textField, JLabel label, JSlider slider, Container container, GridBagConstraints constraint) { + JPanel panel = getGridBagPanel (); + addComponent (textField, panel, GBC); + addComponent (label, panel, GBC); + addComponent (slider, panel, GBCBNL); + addComponent (panel, container, constraint); + } + + // ======================================== + static public JLabel newLabel (String messageId, int position) { + JLabel jLabel = new JLabel (Bundle.getLabel (messageId), position); + Bundle.addLocalizedLabel (jLabel, messageId); + return jLabel; + } + + // ======================================== + static public JLabel addLabel (String messageId, int position, Container container) { + JLabel jLabel = newLabel (messageId, position); + container.add (jLabel); + return jLabel; + } + + // ======================================== + static public JLabel addLabel (String messageId, int position, Container container, GridBagConstraints constraint) { + JLabel jLabel = newLabel (messageId, position); + addComponent (jLabel, container, constraint); + return jLabel; + } + + // ======================================== + static public JComboBox newEnum (Class> enumClass, Enum defaultValue) { + JComboBox jComboBox = Bundle.getEnum (enumClass, defaultValue); + Bundle.addLocalizedEnum (jComboBox, enumClass); + return jComboBox; + } + + // ======================================== + static public JComboBox addEnum (Class> enumClass, Enum defaultValue, Container container) { + JComboBox jComboBox = newEnum (enumClass, defaultValue); + container.add (jComboBox); + return jComboBox; + } + + // ======================================== + static public JComboBox addEnum (Class> enumClass, Enum defaultValue, Container container, GridBagConstraints constraint) { + JComboBox jComboBox = newEnum (enumClass, defaultValue); + addComponent (jComboBox, container, constraint); + return jComboBox; + } + + // ======================================== + static public final void setColumnLabels (JTable jTable, String [] columnLabels) { + for (int i = 0; i < columnLabels.length; i++) + jTable.getColumnModel ().getColumn (i).setHeaderValue (Bundle.getLabel (columnLabels [i])); + try { + Container parent = jTable.getParent (); + parent.repaint (); + } catch (Exception e) { + } + } + + static public int viewToModel (JTable table, int vColIndex) { + if (vColIndex >= table.getColumnCount()) { + return -1; + } + return table.getColumnModel ().getColumn (vColIndex).getModelIndex (); + } + public int modelToView (JTable table, int mColIndex) { + for (int c = 0; c < table.getColumnCount (); c++) { + TableColumn col = table.getColumnModel ().getColumn (c); + if (col.getModelIndex () == mColIndex) { + return c; + } + } + return -1; + } + + // ======================================== + static public boolean packBug = false; + static public final void packWindow (final Component startComponent) { + if (packBug) + return; + SwingUtilities.invokeLater (new Runnable() { + public void run () { + for (Component component = startComponent; + component != null; + component = component.getParent ()) { + try { + ((Window) component).pack (); + return; + } catch (Exception e) { + } + } + } + }); + } + + // ======================================== + static public final JFrame newJFrame (String title, Component component, boolean exit) { + JFrame jFrame = new JFrame (title); + jFrame.addWindowListener (new WindowAdapter () { + public void windowClosing (WindowEvent e) { + if (exit) + System.exit (0); + jFrame.setVisible (false); + } + }); + jFrame.getContentPane ().add (component, BorderLayout.CENTER); + jFrame.pack (); + jFrame.setLocationRelativeTo (null); + jFrame.setVisible (true); + return jFrame; + } + + // ======================================== + static public ImageIcon loadActionIcon (String action) { + return loadImageIcon (Config.dataDirname, Config.iconsDirname, Config.buttonDirname, action+Config.iconsExt); + } + + // ======================================== + static public ImageIcon loadImageIcon (String... names) { + URL url = Config.getDataUrl (names); + return (url != null) ? new ImageIcon (url) : null; + } + + // ======================================== + static public Image loadImage (String... names) { + try { + return loadImageIcon (names).getImage (); + } catch (Exception e) { + return null; + } + } + + // ======================================== + static public final AudioClip loadAudio (String... names) { + URL url = Config.getDataUrl (names); + return (url != null) ? Applet.newAudioClip (url) : null; + } + + // ======================================== + @SuppressWarnings({"rawtypes", "unchecked"}) + static public final Hashtable collectMethod (Class javaClass, List... actions) { + Hashtable actionsMethod = new Hashtable (); + for (List arg : actions) + for (String action : arg) { + try { + actionsMethod.put (action, javaClass.getMethod ("action"+action)); + } catch (NoSuchMethodException e) { + try { + actionsMethod.put (action, javaClass.getMethod ("action"+action, new Class[] { boolean.class })); + } catch (NoSuchMethodException e1) { + Log.keepLastException ("Util::collectMethod can't find methode "+"action"+action, e1); + e.printStackTrace (); + } + } + } + return actionsMethod; + } + + // ======================================== + static public final Hashtable collectButtons (Hashtable buttons, JMenu jMenu) { + if (buttons == null) + buttons = new Hashtable (); + for (int i = 0; i < jMenu.getItemCount (); i++) { + try { + AbstractButton button = jMenu.getItem (i); + buttons.put (button.getActionCommand (), button); + } catch (Exception e) { + } + } + return buttons; + } + + static public class ActionControl { + String action; + int key; + boolean control; + public ActionControl (String action, int key) { + this (action, key, true); + } + public ActionControl (String action, int key, boolean control) { + this.action = action; + this.key = key; + this.control = control; + } + } + static public void setAccelerator (Hashtable buttons, ActionControl... actionsControl) { + for (ActionControl actionControl : actionsControl) + ((JMenuItem) buttons.get (actionControl.action)).setAccelerator (KeyStroke.getKeyStroke (actionControl.key, actionControl.control ? InputEvent.CTRL_DOWN_MASK : 0)); + } + + + // ======================================== + static public final Hashtable collectButtons (Hashtable buttons, Container container) { + if (buttons == null) + buttons = new Hashtable (); + for (Component component : container.getComponents ()) { + try { + AbstractButton button = (AbstractButton) component; + buttons.put (button.getActionCommand (), button); + } catch (Exception e) { + } + } + return buttons; + } + + // ======================================== + static public final void actionPerformed (final Hashtable actionsMethod, ActionEvent e, final Object object) { + String cmd = null; + try { + final Object source = e.getSource (); + if (source instanceof AbstractButton) + cmd = ((AbstractButton) source).getActionCommand (); + else if (source instanceof JComboBox) + cmd = ((JComboBox) source).getActionCommand (); + final String cmd2 = cmd; + if (cmd2 != null) + SwingUtilities.invokeLater (new Runnable() { + public void run () { + if (source instanceof JCheckBoxMenuItem) { + try { + boolean value = ((JCheckBoxMenuItem) source).isSelected (); + actionsMethod.get (cmd2).invoke (object, value); + updateCheckBox (cmd2, value); + return; + } catch (IllegalArgumentException e2) { + } catch (Exception e1) { + Log.keepLastException ("Util::actionPerformed (action "+cmd2+" on "+object+")", e1); + return; + } + } + try { + actionsMethod.get (cmd2).invoke (object); + } catch (Exception e1) { + Log.keepLastException ("Util::actionPerformed (action "+cmd2+" on "+object+")", e1); + } + } + }); + } catch (Exception e2) { + e2.printStackTrace (); + Log.keepLastException ("Util::actionPerformed (action "+cmd+" on "+object+")", e2); + } + } + + // ======================================== + @SuppressWarnings("unchecked") + static public List merge (List... args) { + List result = new ArrayList (); + for (List arg : args) + result.addAll (arg); + return result; + } + + // ======================================== + // static public File checkExt (File file, String ext) { + // try { + // String fileExt = file.getName (); + // fileExt = fileExt.substring (fileExt.lastIndexOf (".")).toLowerCase (); + // if (ext.toLowerCase ().equals (fileExt)) + // return file; + // } catch (Exception e) { + // } + // return new File (file.getParent (), file.getName ()+ext); + // } + + static public String getExtention (File file) { + return getExtention (file.getName ()); + } + static public String getExtention (String filename) { + try { + filename = filename.substring (filename.lastIndexOf (".")).toLowerCase (); + return filename.substring (1); + } catch (Exception e) { + return null; + } + } + + static public String getBase (File file) { + return getBase (file.getName ()); + } + static public String getBase (String filename) { + try { + return filename.substring (0, filename.lastIndexOf (".")); + } catch (Exception e) { + return filename; + } + } + + static public String changeExtention (String filename, String extention) { + try { + return filename.substring (0, filename.lastIndexOf ("."))+"."+extention; + } catch (Exception e) { + return filename+"."+extention; + } + } + + // ======================================== + static public void backup (File file, String extention, String backExtention) { + if (!file.exists ()) + return; + String newFileName = file.getName (); + if (newFileName.endsWith ("."+extention)) + newFileName = newFileName.substring (0, newFileName.length () - ("."+extention).length ()); + File backFile = new File (file.getParent (), newFileName+"."+backExtention); + backFile.delete (); + try { + Files.move (file.toPath (), backFile.toPath (), StandardCopyOption.REPLACE_EXISTING); + } catch (Exception e) { + } + } + + // ======================================== + static public void copy (InputStream src, OutputStream dst, byte[] tmp, ProgressState progressState) + throws IOException { + copy (src, dst, tmp, progressState, true, true); + } + static public void copy (InputStream src, OutputStream dst, byte[] tmp, ProgressState progressState, boolean srcClose, boolean dstClose) + throws IOException { + try { + if (tmp == null) + tmp = new byte[bufSize]; + for (;;) { + if (progressState != null && progressState.isInterrupted ()) + return; + int nbRead = src.read (tmp, 0, tmp.length); + if (nbRead < 0) + break; + dst.write (tmp, 0, nbRead); + if (progressState != null && !progressState.addValue (nbRead)) + return; + } + } finally { + dst.flush (); + try { + if (dstClose) + dst.close (); + if (srcClose) + src.close (); + } catch (Exception e) { + } + } + } + + // ======================================== + static public final String ctrlName (String s) { + return s.replaceAll ("[^0-9a-zA-Z_\\-.]", ""); + } + + // ======================================== + static public final String toCapital (final String s) { + return s.substring (0, 1).toUpperCase ()+s.substring (1).toLowerCase (); + } + + static public final boolean containsOne (Collection set1, Collection set2) { + try { + if (set1.size () > set2.size ()) { + Collection tmp = set1; + set1 = set2; + set2 = tmp; + } + for (T e : set1) + if (set2.contains (e)) + return true; + } catch (Exception e) { + } + return false; + } + + static public final boolean containsPart (String subString, Collection set) { + if (set == null) + return false; + for (String s : set) + if (s.indexOf (subString) >= 0) + return true; + return false; + } + + // ======================================== + @SuppressWarnings("rawtypes") + static public final String getClassName (final Class aClass) { + String[] path = aClass.getName ().split ("\\."); + return path [path.length-1]; + } + + // ======================================== + /** + retourne vrai si s1 existe et est égale à s2 + */ + static public boolean cmp (String s1, String s2) { + return (s1 == s2) || ((s1 != null) && (s1.equals (s2))); + } + + // ======================================== + static int max (int... values) { + int result = 0; + for (int val : values) + result = Math.max (result, val); + return result; + } + + // ======================================== + static public void sleep (int s) { + try { + Thread.sleep (s*1000); + } catch (InterruptedException e) { + } + } + + // ======================================== + static public void deciSleep (int s) { + try { + Thread.sleep (s*100); + } catch (InterruptedException e) { + } + } + + // ======================================== + static private String convertToHex (byte[] data) { + StringBuffer buf = new StringBuffer (); + for (int i = 0; i < data.length; i++) { + int halfbyte = (data[i] >>> 4) & 0x0F; + int two_halfs = 0; + do { + if ((0 <= halfbyte) && (halfbyte <= 9)) + buf.append ((char) ('0' + halfbyte)); + else + buf.append ((char) ('a' + (halfbyte - 10))); + halfbyte = data[i] & 0x0F; + } while (two_halfs++ < 1); + } + return buf.toString (); + } + + public static String removeAccent (String source) { + return Normalizer.normalize (source, Normalizer.Form.NFD).replaceAll ("[\u0300-\u036F]", ""); + } + + static public String sha1 (String text) + throws NoSuchAlgorithmException, UnsupportedEncodingException { + MessageDigest md; + md = MessageDigest.getInstance ("SHA-1"); + byte[] sha1hash = new byte[40]; + md.update (text.getBytes ("iso-8859-1"), 0, text.length ()); + sha1hash = md.digest (); + return convertToHex (sha1hash); + } + + // ======================================== +} diff --git a/ws/launch-adecWatt.sh b/ws/launch-adecWatt.sh new file mode 100755 index 0000000..91268dd --- /dev/null +++ b/ws/launch-adecWatt.sh @@ -0,0 +1,3 @@ +#!/bin/bash +cd `dirname "$0"` +java -jar soft/AdecWatt.jar

u_3}v;Z8m-j>iQ(;67cng-li}6c(>fn2WQsA3r?tFOsaHdK2-y59ovCK)P=Kn^ zlNg(b@h16!ID(5bicMUmIlRA8PPf~937-e`T`M9A(8Dw82wR)JwmGIBnO&*Z%cl^* zJ2NY(Gn-X&R#mqubW(#taaZVc7z`Y&A{`GkGJY+6ROqQ{na}fS`e~6F>P95%pHVjx zUJZu?&T_ZWoH11^XJ&rASgNWOw!2aEq0r00-TDKijn!=(j++p@o#v zf#okQLBsr|P}Tc$?Aw!pk+rsqJfnQzQHEtLJ5d#j1&T`rxI_e1(KNdIvdcC&qr6Hl zx#~&gC}r-$<;7=9?Z1HyOR-m-`1N5qNtMmq)rNlvP%uyJ?75rSF87rWlsy8{sm%>$ zWCWXXq|g=j^#J5dn_i-|t)V%!lq&w;M}*j&;%P z%i{x7j~ej^j?bC*lk^S0A7+_N2^?VLCeXJvG-Qm`an|4&!oa6uDe?!A?0+C9rifyL zi`e@RV-GUj=GGjLcyFZJTH>F#^i!uV)0cAlY@x=QQ`U>8U>r{H7i8t4cXO-NYYqz-=7gaK&jM1oGxFK>a{cyDLA=z6R+i{j3;bbNX z>k$iI<35~AWbsLIL}oFKK}7R6)%#d4-aMbFPyzqX1I=Z!WYf;vxK~8;5AJ!0;HCru zlBrjc)1eLTa`DFPm`)g!aqeVPc9yDzU3XC7cTU$ZSPT7-B7rW3hzLKyE*d&?>27`C zB$LDRjP@S}MFfLnbG}&X$+TRa7DA0Yf-Dyb-gMe$UJ9`xA{|VnNoKP(B&u59h{T|(f)js5x$du+%@M{Qo)dD43sbl&@1ylvQv?@Y zv>s}-*G{boPo`F(gbE_>p01gHUa9coO&K+4+uIYOr4!BD=Y;K7ad)tgLfGbmsnu)oNN5^FF zyIbg300w+~_@-yb8kqK5)(jEtLK_Emy8=3Ojxv8umI;!6$`cEx@u@`A8i&V(kZq)g zJ>v#EldwT?vBf^Ip`&AL6^4J>>Vx0*o2+tWg9Ke$7RfPb3%CGMUAJB>d3vhjrOEr} z1f8=jrOFoqO%JNRCxDfoc{GC?XW2W?lFOT|UR|*me{9TTMB1(UkygW}o>Szs8mf`O zV!Gt9B(BZ0OJLaK`->AidF|N_`T*%I^($k?%sY(n#OqH7YTBv^?#O??5VP@c*2)mz zLI69{ZH(Npt{E(n-Co25zay)~Cv9axxr~2S2 z4j80%j+LD$q<5~)y13lq)Kd-w6ptskiD#2NFLSw84ko$m{-iHtkPxyTh4`cw?b)9` z{a3Cl@ox|j_xJf%uFGaI$O3L4;MXgq)?^apaOCe-nQJ*0s)11A2<1hy$-;@mKXe=f zn-;n<;lJ24(irY3hNIAoO-?!_24xelKl$cy3?(5VzT<=OyG%J631>`ZGn)D*zJMc) zqUofhoG!(}HV}QD-i)i2T7IJef z{C%dg4HE-8yVriHw2?>MGA>|guiuhQFJy_58MxDc61+re{j-mc~mX7PStxuc3L8^@B(ne}23ZqHnQH9W!ry)eONo2&xYQ3Y@ z6|kP3Ao5^+szk_jXW~KnK%i;YIHac)jV-@HZnB0lIA_-zaH(%k?x=$q|4#i$CyLCr zgIHIzT$3<{5vz(YLz|Db%C}U|r{oKaBH@Y!6Q*^sZ!4#Owxb>Cm6e9i@FtcDk&QP| zq%AI#$lM9H&67MYbGZsX*6`BvB7mOLM=w6a*Q+Qj#djlJ_xI>ZK~4O4N18gG%J^2% ztG*CvzB($9CXh3mpV0_4W*VsdD=kFZ8oA0Zt;aEWt2&ACs?DsC8P6Q!=1}#X(va;V)qoBun>MQutmYkWC4)aS zfByU)iPXWEp^CZvK`Tz8un?fOgUi3#Ryuwv@5%azR`e=2bgUu+hvsY2{|>G`0;gQT zbtQUQE3|@aib1-8F-GQ9X9zC=LnqEh)paqGY563^m6=Fy%3PNjLsHfgE4v5{8VTXF z@sQ(K9X3qV!0I3_w`QWjNlgi&#U@v*Ga8|$!knteC|yEQ;2zPPm0#hxVsKWp%biPk zUdN)eZ3@R{(Qq5B?5oL2RHn-@d3Tw?hY@lH9MmAkd-^GhZ}L&_w-D}iS_aNV*j;qG z5|Wikt6LNP9RJ1<1U{n`{Z(>qz*#V_Rc;k8S znOqWODVcU_rZ5=G=3KqF?(@;O-uFa*Yde%`Hp?QMKjWrlqd4RiVUpRbnwAHEBu=0L z4=$6Y+fPo76Z=l3V8Dpd^;NtTs7?7W-641K*qqdqZdMZ95Pf>BgQ|cBRV68QqI==S z7D?QiE1Oc5d`jD9DAiO&sAo3)W;yp}ey*B`zUu9=I@^t^HP9Z=L=KUrxNwi0VXV8% z*yxe}#Lgtf1DoVUns)KQs=P>qDk;-nz1*?4l_`hGUXKOcRJJCHoHqKbk_)WxOA%$P zsEEr5epoks(*qL^k+(p)1S}LlQ##La5~QqM)bk#(UUO~UYpnMw+hl{}m9Zuna0QSz z|_z)53K0LX}xvPaiy)e+p37x$J*XQ|v%rl5U`!PDDh9Mdk5uVpZUBPM@jUCx1ye)l=B@e#dQ~1Hx@*Tb5NU8s zz!{*!UEMHltvQym7(6GPZg@eDUGu!&0ZqLm8M!P*3+Bn`HmFTbqScnZWDvCpVB<37 zCYR=2E{G>laS`;}9r&c9;^%-V{pWS}kli%^&aEOf-8L`@EElK zXga)Xg5O2bPJ}ULN~?%`^RWcDyy89eCirA7!L`ec)jEX$8rgSUqv|59{k838tdf)| zzj#)5%3Gl-(SM((<65Ba=?8lRr$c(I_kQz{oxuV#A&2kaVy@&(kuKE%sFqnqM9s6e z2%fqT@?&f%jcSoB*%{@Rtv=#6RxSP72bLz9mJ=hp>_6e$rUK_RNdYdV1&H<}e$F`2 z;BS|K@~E8MVFhhn#+do$F1b+0!s)lGAEQY+Znq#K zV|DIZG}TwCvxWeomws5)uISaciWp#0Rg3E%wP2gMoGFx{7GEsz-|8uH7X~4{x14|M z^Bou#+yNn;Rbv%=E8hoQsBWFTjn_{Id-~T}d|ArL90pDu9ZZ7g^}jwEuOXyD4E|gS z2i<;!>|6^Ek)+aNDm`W6Mv9T7i>2MZGAzgTnnN$!2B!LJh&yq+yS&bg{2yjayx!$> zR$n8LoJ#M#Ej4tz;#O5pm7!A>!1+Ns0$yocNW(=xNNe}pdBYJXEpNDo2dj=ZYu;=G zIi)$BEVHMsnsI@>@HWN!CzNk+2m{TxYDJ-vVq?y{htnIVSoylCsp1K8%3 z51P*Oq0M2zfDR@veEo#OU=d`oGbG}oChxU2(YZA@8F`5odRH@9HfWitsYIAslzQem zyF;6!LKX)@Ryb?8H+TCNtz~M~kZ^Nvx;1XA+BI{1IR!vx#C>bXdI^t?tISR+8}XgL zyI!Q#iNUW7qtjyIt)G$P_Z~VpbV=h$ZR{Os!4J&_TIAOI#IsnGOR~2U#t~x z!fjk=jnbrXjw54f&y=!8Y?IoV97B0kE8~bIHE_$tf-nivmgSQOqL<~EkxMLQ!l|?6 z>jdr?um=PGe03Zt80 z;hBkQ@ZxO~Y9B9@zYGVVR@rSxxQ5bN$$~x)%10LPt89kRCeYc+VgueFeTJoyse$$y%a8RaD>X31Ybz#aUO za(2RXX=$Z!V(i2iG;N)}=f&E^Ys?Mc2@Fpa6!h5yu%3@O{=mnU$PSmPV*G-bFs7%( zkCLe^m^BCpN0bte%d*aij?K#st-kn3I~m(bnQSeX)a7INlx3=$nw6XFl)An)Cky*og!c*pCBohdz!qy+Y{5gE&LYV-Ak3u?eG7_5p4JCy@B zM;WW5mI)?fWC`YS8O27@phYFV5QOJwaDp3)(5^Txmy0m4i)YU`es4uyT^4#gIEXgF z5>FQkv=oyPm5^N(QwWs^98g$iNBIWBy<6mEoh~taEa4(572ts9K`rI6EmE$+kFqd8 zvvTeP2*3vm#1s>>za;nuyWsQV5qY_g98%zSxTyQ${a`F$_5!m+f|=>v47Xj4U&%c& z|LgSj-+P*x|0G6(EJpf6-yo#B6YPimfoPOsVUcC}SgJ zt9!+|98VzkNFb?%HB8K4CFZj4Yz4@~>8^0?QXG^Q=Lz||u72bp-D%})!&C9aDORkY z70)OW(qbJRMB|*dtXV&lEd)G%7bSdgnJwmADp!tj37s4DmU$pS)~Y0#0RL9 zk$;m!xl$riAAv#na7<>b;eM}OkI|3*KEqMH6-V3T2*@fChjswIIuI$wOC6&_<_X)P zL=<0N22-^x#c&i@PNY8-zCr9DAFj75xwICZ;~@&@faOck?<5204 zT~$`D(>k#FJ<1Ia8c(*=z(}LKSd5DRj(uia%GWVAp+P6m1D3HW9Qqd0j#6l8aAq7R zDM>!(I1}P^>ALFGtrN+jedJG_QP(Q71?oq0Kn&LVdEp@YBO1ts_4w?MfKe5Y0xQBONsD%zu(n z0g#uC_!!<}Bkhn|0) zQ)V?d@kL&*=HMGYL!9ymU<5Pdg^!CrI}lU)9m6~((alGNC-5XbwH#?VAE}2 z$&+))Ry>BMU~>}f_$x2k?*h$!)NT9N5?(xFCn~Y>rKHzt*+SRFW`mo+uy8}Jpm#a3 z3|l>njCZNKL42b<4?H6XE4+&i%Gi<*=2q+xHlXV3;?q!#P5X8Pcyr1kr5m6xxBB`w=?Wh zTCZ_E{U}td=Hj&-RAArEL>?ZY<`cSkI%_FDnN?>Z5u3Oag5TcG6DhZ(m{{`aHkg#h zB79||ncav*=GivmIah*{Sq5wpSEsQeewR0CDbLy=Sf?8;Z14^m{*-|iaiM+HT=+X{ zjKJ}d$@A6)%l{KnZ*tss#o{fZu@C7i$LP$?^d32}4fizQUPu8Oj~MQv zj%vP~yr5RhgLXQpx7 zBEns~70h8V5L%|+4V)bslF#sEp(Kbz7U#Zk1aVQv!+ShJslhypptM6GZW;V`8g(V5 zvUeDlT(oLm@;=9n!hLvlm9E5}cVaT{U9J$YN*5V#ijg(f{GEq9%*{EPkt1zJZa1Ei z@~1XF_3zFYrWDskh$UwJArF~JUv7X`f($xL@c-SY>#N|6-2BXPeX8>yXsdH>YieG*aRJ;6m)p#3=%{6ed zb)1)~4KsGuwo|}@u5Q6)RHMb@e@h_Cv}zPPyG^XXE=-l}V!5bBEdssSlSVF!qT4$+ zi9Tgyh(ycff#*7998^}ivp;V|v5Q=R3*mOWS^(NCf%unocX@CfvBp>IS<)mC_#Gu^ zRkeEeDxk0eVopLCCj&#GqOrSlW8IvL&o_2!VNSil8rPUKCkPEVhG0|AC00-XZkYy~ z=kZk1bG7{u=vwU8Y;@6To7XfpEv(O$TXPn4B9aB+nvCi^ZLKR`LXlog4U6l*nb4L3 zkG(6dyOky;J5K`rUh7Cb#+c`IDItN!UJeJ0 zpdSC;jcFvfIn)^s$$T@Y)=K4@!OrV?D;}K3NoVSkhZZ2xw)hObPeGDh!S8fM{eZ$Vg6byfYpmt^H|!_ETIWb*$IhQK1J2@K=c-$ii$K16qdgi6`g%v+)) zr@9u$sm*1Q@yv@2jWMp!JsBNm{XSuUs&yrI#I8C{%y_d>@_j>QT@w~tmkD>Pp7xq| zOViw)czUScwT;0u`w?VqCgV|0huw#hp;?IVy=%4N`;PGey2xVd_1r=8En!XKr>|@k zIsmCp5lOCB*5`s_U(zfJ9qTy8PCH@p&KqISmRUO#m5P?bp^o!ev~T`xp&y-^)}cVg?v6OKUWGeFt$JCTF_{Eq1Ed{CD*oA~@R zl*j7EXn{*q%=NlW?U29IqBYlml^q``tOkyXT|`ei$cgEH4q)$F$BEGz#>Z?hb!VW* zZ)1I1P0K$BAbg<4s5%U=2l55JLM4vK9KpsK0tQcvw~GA%{ko#!6f;b~?iOE;z&%@; zJf@3SkLTx}FJs>4zO%ZTMZtV4$?oZEWIWo|(ub76F8+V$J+w2uQjP#3CwNcv0plR< zRY?W3%}+x3!PXs~7-i%gSb~D)?&Ugx+7 zsQuyan01N+co>2oJxw^)HMprH-;#XnxTOPh0K1$j2e831S*~9uh^b{%M;|0O*A0%x z6sEL;Bu0$dC^=0Yymc!*nRU1ujvW*jWKJr4+~o8|!ler;xO6%r==g*6sp(a){W7&x zL@NQnmT<`^dlktr|EO?gD59Uy8QC9qa@9(WE*|+YDWCLe0)a@o(f6i{eApS-j7cfZ#pyPj;Al1~dMG~+;Di!?s!}JP2>X=elTRQ&ZxYbOX z%21QN$-9VLu7JiP1iDi$Y|Nwlh+H@w*3l9}RPuOVL|b^4HRR9b0cRSNb>lq42=u4&elL~WAQ#h2Nq@UEoOF48w+gQ2Vwx!21dOK0i>z>s zuu#<%Jpz}Q2YE(y=ntizrL;&xQKVaTLTUVWXo+#L+*e?bWkt);^v_+Plwgl-KKJiZQ!tu#0DYRb5n(F@Pn)YBeZb&M2mSv`u z0;6W?G(qBchD@tG-wZ&co*-R(Ll|F!AoqgQq&Y-hL3#)vLD5Bm3r;deNz(+I+`TGj&GvCzS5OB!at zC89uV(y=>)M%xi{6r3^InGa$_44QUU0%F}gl2T)Yj#8((2-Z9cA&d@}XYrNmXITD;KsAc6pH&e*ABrDbr+Lt7n8jflf)3q zGz;vSnQnRO<505~Bc*p#;fvgta1fPp36-)8yHbXs0+oibfd31=4|AMt6{fc{k1nTNSxK0JfU|m45mB(~ zm7GasS_iMI-F;O}jK3&n0QAxrhsJg{Jg-eLG)pllwbfxWIwaMFY4@e3ok(_@vba{B z&K>LpsHz=&1?vh1MQR7B+vct+h9(NR>v_4bjtVkQC+{(Z)LofJTPEs{^0@fa?@Uyn z!CA8Z6d8R~IYVu@iL5e1wQQhgT}8^+t!~(fjQJ80ays&9S-$blL_-9Mxl?HrJYVDc znSc#xp&;weFgXm>22EO4b>;?i$2y6(S4{z#<%w&FaMrvwSq*f#{xmrp;AV>oZN66M zYqQ>Dt@4=pJ7j~%0k@SHTp`EUv2wQw9noCBGKk4KJC^Ox_A=~zHnyunz^4)JFw&} zHW#_0%JpL+O_XXnbi!)j@It?aR68HlgxR&(tar#+N=H;lia)oe;8U1v2w{ z3&&^Xw*1hd6kSe;cIOOL>U7nJTt?RK825JwKmhPp7;mXJxxLHrrNho6v$-wA-)!fhZ*(dTiY4 zUb|-3_fEk}e=O!FZ>mvlZL@G|gaEfBpF+?i`)M>{11~=Qz&;}T^fcnpj6nHYk(Ss=VDf2B~s4JSPwZcI{Lk3+s z+dRXDR_!Qx1Iy{m;-&VJt0}bh{jR^9Dl|g~d?J1aHIVEM4NXUT+TtGNFhC94_G?OW zfD#tEnm>0s>#m4DGYPwIQ_tG<;jqYFZ99y^S*s~`elTPJM>RP~%Jc5_KEwlC~EqbX?!(E4(UJ+}L_ds5-BFT~A|Nt$^u7 zCQP_~#ES6F%k;ZT7ja2;QwC`=+becXFNKnNxJ zdw6>oJQq5taCB;oGC|BU^}rtAEXz+=))LW7g<>K(pDlFb)CB*)ccq?uLKpSrnS*Fl zX=L*NB;omRDk$@X{r;>{{4gKO3gkuv`7B*ZR%(bx@aS_;YGxR131#H|DAF4P2IO2P zH`^RUsxq3}zdn?x^mxlXlMuLvDutobBU#L%{~j} z-|jy$E@uWME`t<*(k0|&^FHn+)i>_f83JOV_;a}YXTk9bQVG}I{!34nN9crx87C(5 z4YY0nEP8h{-E@1}g_PoLd_+JZ1uHE}r1JD!x%WJL+xALbKa8C4a@H|HQ`xP%4m|1v zsrGNMDSt)7p^}f);Z_7TqRBr3rOd;+9 zA{06@ykN{TbrlflXph~wSaCNT)Q#n|6)tTqN$i!>;g{^taXTnot8dy!vh9|T@$_)1 zwD#aPPy|j*-Z_V+OWCV<9|ZH}$l+Pk-<)G5b!2CkOY!1PoyEv|@@cx^WiwvHxx$p zug$72M9E zMY_(D^*XDfQX6|EbPc&`rfqh>Oi#%g)n&8=^f>}A2>}m)+>L-90`R``JP@2db&O@` z*!vrOH#hY-`{(xr(+W{r=O;1fM%qFr(}aK)^q1csO>PYp^P4chY|+ms9uZ zdtGecG5)-6CQKigv%E#Qn?LxKRVaJ4|5me0Jj#IOBx|}em-g=@4Z346+hluyLB(mNxRfo5EXV}GFK_wGUuRf z$<%uZ!X->NCDs^gHe$9Pz{Ybw#_ANUx3vY!nyrN|lT^q4oHEFZR_p7osH4AFvBR1>+7Y3V!%Re0 z5u{&+tJ$CpZMRb~Mce9MJvabk$Ln8 z@w3R6U*tj#?`NNiJpTG!#mv$-Mp6jUl2Qb=H!e$FO*k7qN(+fo_A|784rOYMSJ1?4 zD%AGorqKXai}wc4O0y!R# zDpquKf$I{18n*u=ECeSSHC!@HU`avZrx2<0wO5zM98)~i;~v1ey2qy(tMlIhWP)Z##Ik;mY>E7DH5^FplCO=Nl3tBAPB>}jNc(qUEM z+mBPoKAp93#8?BS;8uQ@w(rit+YJd~OGFDe61GyDxWl1S+$y`+34+DnZ`Fvu>c$cD zlCCVt`3_{dsaD8r(H6X%@LMJ>6~&EGv$wwFE_cns2P#MeCuE40E$@C`m7WQ3Ne;r6 ztgwWST1|ttMKs2yFf#hAcEq~3M!3Z&|Nh7?SKG*4X-#NUDlOdy$f?W>7A=YWs3o*i zo@T|5UK!TQ&r3nbW`zt}eaA+a%jL7gYWVctEVY|xgBK@{dW_}aL(3+SiM;1ZsDV0d zj|}+-dJygJGg-K)ucmbOK;eKQx?|T;23vlwlY3ptt_ilVue>=K@8$#pOQ5nj)`+oWZPYBf2os`%Pkv`X-{1=pr?4txl; zjGw=N_UQ>?7R<*;r?&k;8KN!xjw6?4fl zr+)ai)+5);eQ=`sWoOXzb{px1Wj^fa>L+lP)9nB2R{O#6@7e4u4DOMm5-R$D0Na|B zMd(!te?oThX-?D6$CQpECllRkjEa_R&*nX><4-3QHaaF|>SR4$4Na~Z2`{&<9~>&f zN(4eTO*DGxNQQ!POl%4e?;X)jCjw&aVaEt0213`=f0Yu$FGySWhBO|bzS|rIPkZmw zvxKz7Hv(Mw)^f1hPDBh{5TWZYON_=SRy*iw}cS{ z^ztYVAfWbhrqrpg(6nn~l^!$0TQ?A)6q-zxRePuQ8R)bf=2Qfb_u;l9NTs3M zZ1eU+`>6u|2S@IYyWD@!3}L3)PvwD0M-+QtKCG1ZV6?pD5H9Z~h7svOYn`D-(hOMQ zHsKcL;$42FEmCjT6dvKhLRQvT4-DH!Vg+pBa+={(k-AQ%ye{{8+?m=(ZCrRDc3QIw zB|B(4rwdj)7z5i48VXu-N($ncCCmUCTJTaMfmQ5IRWE%v@AXw1Ol(GsRm0A5T4xh? zJT3uHSRj_Uttpmus%s2elzv)xM2CqeJPoByRcPf)ASSO^CHW79%D@F4>gf&Xw&Jkx z40Hrbv(^YQ7_z8;3-09XJeBRf{{XJX5u(K~nt(_&Fx($~OFs~wZLP%onahKgM>!r| zRRN~_4d)RCkjmgMO5|FyBpCia>a+}1E{)o%!@Lw)r;1hKrd_;YG?}td5N08Fz~WNr zvQWdu5c5`59~f89NNz34dnPxWU`7azhY0zUHk5e{${tJEr8MnYS`mLxn-|7Y{A&h> zpbO)Ev18|i9etG$eg>Ith!NsyLWhQJB!$VEWMWoS+zy&I?r{q8ibYKb*ZYei1#Y6j zgIwyP`9wI0>|4l(bP%$0+{ux!1eW>%8j~AUvSXM?`H!GP*G#tJOz}}am`W8{7rTiT zsttE)a&Kh;T5rfz{bq_tC{_60|FTo?vU`n%l7QLive}v0*=y?A_iU(;e8S_E5))cN z_|PGt)}(m%77t}6xg2QI01ne8ur{6C4)5Hq?A#7IXz>43VAolGjE9bKaB6Xsz<*(@EFUdks7h6_m34?gNsVh;{qH>x*6N*t3iAQdJml(NV z>G?kf3;ty1TY(kcP8QtZ<x@G%vc|+IEsLO7+pDa4B1cq5$fc%FhTM;FRl?)i@uiGp$TYIYL|ss1 z*3`Ju2Vr(GB+3X0sd=*HAjd@|Xom|rsuuOxRCcFSiH;DkV))XpL38j1{9~)wlAP zAaR%6(KjB-5s$e#U)`ZbPU>t2Bhlb^1!(fbq}4!tl;z~8mW?R4KNGH9c_HytqhcoN zx7T7#m;Rgz(n@prqDgnPOhn|=Ych*9z?a?BY!L!Y)sQ?fR8le|9mSJb${}4g)Bz&g zfUVfmEJW}w1n%BUWL8r225=baT~jJ3r4oN_+Gt{0;RI9$jwEo&3)b;Xj$Wf%AQ;_Z z+I3B+lJ+J#7ow8 z0&V35%yL*b{P3EaFx!8W|E(F$@{N$G!mRCDuM#S+&ias6ewPdH#L^28FI936DQD%_ zo9g!UC9(ZYQc5Lp4%r#y?Q_b;u30O7uG!jP>$@<;v-Q$cxmg(3DyG3-=LP4AieWh* zpd&(=06Q(aY*LSasr$ATIFv5s{n6(e6|V)NmFhg8?{cJ%EnQp8!w{l&NbQWv56);qye_ zCB^t-4QIL^@M-HuBz$%83I57TO{Efoa`alGQm7{wtbPxH^KuP`>26pIr^W)}ODg1J zxDW2eV-S9^sb+ut%FLe3#Bk0`1_~(-=7Np7=w>uQwiR}t|3JR(-y(x<)yeIx%kBG| zZtI>lRe|?4Nqj{x)PS!%!fY~yABi)`Um%=a&dv`mpD3@T1T%|idXMb9?!SARRX_ax z(9GRz7Fe;(jpa#@)r^8==*@vm#l#jNvd%y1&p-RkzsAk~P?gPb){|&uIHajw$&zFG z9D82GfX!ck?_WTSU+`SSpz;|VJnYQVod^S)Cs9BbEM6px$06=tBtlw3n@v)*HocBh zg=A`iW|~xNW%!#~==_3(+rK0Q`e^Nca^E|Z5M7z&B${IKCzFhr34`lZ4P| zo|)czKfEjz->#Ai_-=>W_B9|?I4j@ui^%6F(|LWs;_hCJ=^#yvvO8x?tp4}jh}fKN z_BF^IPpw6zW-~fty1Qmgu*w5S$#S<3AFT5rnh(X|>S+V|)R~xktqUu5*TH2RWeE4P zEl2g&h{Td&MrxnH`zjG`auciqs9RO=)RO8q&Ec!VMkUjTmc(XRu|>vzhMCN?|_^ zDz$sjx*9B)L_%25i|EcP+sY%pj-P8pe$^IU3fTfIOa}}LIT^cyCkp5@2)A6IH0{yP7rDL1B)tdngynWX!=YBIc;*v=&S*X3-_gC5v>&m12Mj8%5O?N0b( zZxWUv6FdYu{nLefo43pG2h9g4D}Cm0K+Hma@gO~$=AkxvvrBwR%!_AS=J3Aq@K15; zGjpF|RC7@FQkmHRmvDcG2-r1sPvp34Al2HT()lQr6J5sG*kp=7i#;;5>l!+D-c5`2Hl1d<<2>&F}Td-#lQ=l|jqSOEES zKH>6v3i)psq=;X79wR;;jN^kb$^{rP#}r(F)W9`QW2gvYyUQvs*&jQn(E|pcJa30Y`@?#kccbsudnF*y&(28<2(u5{Jr1&TOc+& zGU`7_WJ>LY1JN)zEN1fwry)pj6bdmvndBphXlw?{I_rsJ$iV+e1N^UHYutZV|8v;t z|AkJhALT?Q67Yrm9P0JgL@eh2FWx}fEG(F1j)vnfNS)9mTZ}|Az6kA*8dHqJkqRkg z8OuOGfDw?w`+F~*ibuj}2@Cc(Y9%Hka17v45Y{yU4UdOJ;W$PTb9MR8u&KZLIw7nTv2CJ2BT73u+EW&aonMAbXFv|ME$2U^Z! zspgvLf^s6?+M5j>BQZ*YRwtVzFX^lDFC8D<62Q6=$S!A_RW#J5HlXp9mkp4SI_T2I z$j%{Gd$mqsFw^*W`I{7PN!|9BH59S+q2&3FXqPC}f(A5QIEix%QMi#A5RYfyAS>VE z(5HVDyC7<1(IV4E5IC+#mrquOZl=GwhHdgdgsl;N^_HP6-yCnHCwNa5X`n-;bE*^W z47RSPSC(zLYe3$92Cz1$AIT0F5IWH?P<@j~PdtWu#&^AK-zbzKsENRHpow0`lXTF5 zTvnqJjy5$UDEmGvCX~0W$O0Fw4MoM@y0R1P;nvo~?le7cl6%{_jEb+ptc+7ZI@CqV zKSXg#0MN{U!$Kfe)%K65e!%JX4oO5|gjfJbqcAe)1{dGn9Kfq(P$e2&S%4*KN!5_h z-j-7IZv*x!R}wEh-Fo4VxK7SSJy5M!j*CY>D{uGgBzi+~v$~kcaAd!M4rvw_juB$*ze-cO#4!s8`5UJ{UCQ`-rvC(KM zR3xZXS|iUfGHQoj-|y^CXr~K4kCAgQ|9Lop(yQhlU1~4Q+*cRIusMAwL#&JFXpT{< zN8b3~6(_6825!$)r8t!Fo~mSSVy614ZNj2$%`VUGBy2=19s&aKho9ka z-Bqt$eLS#_XFYlD^J#sLDFV0&hTN53UIc!V(xY`V6z^_Wa_-UE;Q{!wJaU;wI4|_y z6tQZ^JmHZ&7urp&2Z3>E)sjYM_xr;&wZPjD&Yz35^`X1egfoHEm5=oGY5PA3obwVc zi)7Jyx<`&fI<7{C*)h5!L9&(FbT8dsm!97048L>s)wT50jw;iT9GJ^EwhsTfaBOJT z8!f75+ysnwc`7D}{BT+M!+xB9p;6~NzcqdV{+yiZUZeQx41m3*AbJ~}A!V$U^WDSD z8o7X1BS;kuT76+sJl z-pupKi;>SpEDsPO#{ryt)~@b3njx@n6Q$*eH;%drjnjWKp$R5-#IZovTqL)0b8Dt^QDt5o zv@q;)mXKAfGM!hGV;v|14gFbZiY1=bRbG(Bo{K&ghHg>Q+Vc2elQZLHQD?M#CdH=l zvrdpjLycGuy0nXQGOytzSNGSk3?=e8lNe?xcruSnj1HXMjOyfHOuCuQ3z!tPp&WLL zaF(lZMt9QK(+O^1hmw+8$f+EP^})%|##3~9DW&wR%yG-j3)Zgj0!Pp z4`&^{0c--iBwZ|~YIS{q8|Z;FAFj-)UdmbU<6IFu3v$k{6m(@i>Q^?)O6{^*fqEWs zojJO=OsZo>CO1kp5L`k>(Wteq0T<6m1W-1SFBLj6P4WV9x?ZFeOYp5nE#!2vRTiq? zBTln;VQ2xM5_bf+Sx>wH*85UrTNt{#$@VEicI1T6@?ngzCs=AyM^L4~bVf51q(t*3 zw43qQQW9?mFjstam&-*@ERDM{bQ6Cq7`tF}?^aZnA!#hh9lY<#`rOJ4)c`2uTS1YR>r@$4m=QV=fnh}!Pw36r@ zHXXoRG8#&^^&je8`9MFXFA}{KkB1k`Bbx-i+ZH?Qa{ZhL;O6JG!H)Cp5jRw0sWO~g zYdD!)N=2RrMOZ0Cn}rePF{t7sE|{>`xXY}+wZ!|Gjoun!WC?HHk7pL1*fAc)E_S(N zM!`Fr&~s>Lehr~pEB|y=;=r5-3*=JXxxY~nj$*4@z)LK>LW`B3trB9<;n;+v^3N}| zj653&YbeH5p!yu!g1-ufW;V9Ujo8VE<7=OGwl@>O-7r4PO64a8;+%37pF_qBE>WZ< zS4bT}pgog0yHl0z=~y{zW-^_bITTkTQrL9fEGpPPKH72b{&IPc#Ny*F^aUui+)Ecb zH`^r)UhO-Hz3IpB|K_`lyh3=6774nE#2QtcRB6|1gi% zb7&<5eJSkfzHNM#%g+UgZHN}wcY(L2YCKV879x|IcbV&I{DkuH)wgFNHoOtat;fU_ zx&}TOEccWDJEf5IPL%{~hbYu;r#|!!wsP9(g=uQ0t?xW~1MG`6amUAC{ux^@{zJNCyO{bhl(yRr2 z;{kNPwh7w?PWAr5RC#n^f8YU-#QaFFl%avut=1j9n?#MdCasHL$ofyDz%N#|nDclZ z)P7r=ei;W@{{wFHHv*OLT6eL@@H;x``M0s-8Y!7Z)fC+f!C)$fE4)fFg_*j zSUBW#;b9&h2L_Lsx`*vPRHNP-l$hnL0aTEx>k>Z4?RJo19+c7|Dv*}!F0z{vn(pQ% zpKIQxPjtV;$)>CX7oahHjq)TeD0{&&R_iUUu1?Ky!)8Ub!ysIx*@b%-QsSkr3dp3G%#O%4KZt#>InW^&uCd0l`a5j;b_#Sa|fd&{FmmDHHL2V3j77`l#=d2 zPJ=0QF1iuMOfzZ(dmK??K~0&ZIK)AuKogIzZ9dJ-Qm3x1S79%hLMjL136`Vqd-Bu- zp79K5Ta7LPGt+T|iUcv>s5`i9;yL4hRPu8pszWkDZdxX6W7JU-wsmK?|6RJ-R_X(- zB_41?mRo5*U^L2kyj)Duh2Dh5IhAl;GE9~rzyWFY9j4?Z{5zv0ZW+qaT)?GH6`W>& z?B{6a2%}R#2*zT{<*8N*ZIDWY2XARSvv#m5P)24|B)QZ`8&3xT+*OmCTY}H2NXq`T zf`pBdXl*nhz1rO;8XX{^(imZaIu;tA8WHn z$Izz8vZTr&nmKKi861`t4ag&~G>VG=9E>FM;t5aRXG~9shJrNx)p==_l5;yN3}K!# zXG5J`=^T~IOhM*xRxhR~e17{6_Ic%=^U0_<-kj2#xCoPGTo44~OAz|#iD_bd6s8;o z*cjB4=B8N&t7hgtnvqgwij=49vLngmXZ+VVWWqA094D$6BdPqwgjX7jDVoZNkiOKsp2b7yf_?+1eND zbLb4d;f#q47MJ56JCeTh%bx6V$|ETnj1pLR&$ zLzVKQ!<4qiG0ELO^1E!)q3@OBZ3WG%(W4aTQ*A+)NvGj^LdD};gXc&e6z-|)Ips{; zDOo?1y9%MesWE)s3cQzwz$F6aW06pfYr5Psym2%;dMa;u)UrQ3V{K)Z$2i)pe ztU7ravidy&)>8eEc$r#s+~%%o7cF`&rL3D`xw*OM9ma4f^w3Og}i6p|w6v4?f!bwh6boFhk&Q(Vbj|`^m zbo?oL$ICEhUJBLFNtNKKnz+fV!KvD~sd~Y&%SS(9i&zVMH2EF6@`Y-EEe|HHIjoOT z#IOH`^=C%>X2$YnCi-Tk>}Fcv=%hRo=X{;b9(sshT-K|bFno&w?C|zJXAcPHQh&P- zu8zqqPyPcoU-Fh}Y}nCycdOUtKdo5cOlCN)^)<@QLQ+0S(gtg)Cp?3Vw@L9DQMEa#Tx+ ziIzpie4na;PNQftD{9C@cpE4Av@2)jsoh1uoC4i@6$Hp`6e8JyPlI_c^fQ@Pz)gW07d zEj!e@8dm8w_8c1W5bduNlgKfN^OZFRq**=}xeN|22}M#yYK_zk&9fuLfSWaPi}>JP zUSp}%8JviuV7G-AoPm+`hn)?Wo0WC)B5p$ex6<}?JGCeS#?f;;hMP^;ueA}kEDE4d zm%{SzI{EP^|F3eD+veqluT3GW9Izrwzj9G$1BmO!3#c-3WVH9o+TKf#N(?+-wCG3%eTHLU)6w zY)JZfzLH?vEz-WEbWqUFG$Sr9OKx!hl~T-lrLbkS-PiuX&Z4?>)J$klsq=2c&Ty=_ zBL}5q?%_7-zu6+8kd1ctbFm*4^}%Va;R$V>b<-PU#E0ZhW2K0pHxhm0Ldv~y))~{` z)Kxk9M8|uKdqM2Q-d`iaOwrT)Ie=9*@33or`Zzhv!(J&0ZO2?sOxbbEn<|L$2hX;w37s z_f-1uHD@@Tl7$<59J7)m?BQM+@%~d!)U3K4hyEtGQ`#})aL7;jJjE-k0@}x@P9Gmb z7>Afj4EfEJOqL1pdZFL1riO8xA(N5E>|WcKK_b2WmNk0urNY0#{?$(V=fnbMgRHs` zS51BRE{BA*h+T$6I`?d|rcG;XHisr{C1f9qZ8THHHs@|4K z%Tk!tly%(Q?#ajRNmqFszye*ag58s_{Q~>j3dipE`udO|NqXP2oycU?wdeB0q$tK; z$V=1~rK|e9mukf6nmD|GTMXaC{i_K^@GxtsdKE(D%V9*mxc%2}=|73&P54lb&L!qc zQd{yYv(G0a&IMsz+;kLSRr*gwthqJ9QLvH)J= zK1lIPL%80$)b%{C>m3Gd`SuGnA^BhVmfX1Hubr<8lH*H7a|od_bi3X=(AR%CoZ8^1 zU(Zj+JWU5bLLgpl1ST4d1`LEat&I=nk0j&pxExM47LUKN5H2NF^Qe*_Bq#)7%q~{4 z;Yb)gZnw$CNC~6}i9aWs%U1Jnlr$v@FsUYrVT>fqf>jHoA^~X5DxW&5SDFP8xOqGO z*&VKzBF8tlRVNi`SM_!&u0*fi=yi%J+Mxcb#}q9Gzsvc`L9J1(K%)VK>23T~N}(h4x!8wF21plbC$J#!@}HYi>7{9H zLfcZ)^c>xBR?o};j6j>UU@z=vZSh!^d;@hPuHT$EjL~ro9i)~nGhIbeOmt_5wjZhl z1lx)t-@{ZYV|z7V1?}fZm4Lm>iRBcNXruQak3d7aZ zQVQp9%c-S4q-snKK~zu-oCxOfii7C+UK_jESjQ*32uCLUJbT{G3I;#eG9PGKq0~*i zdhE#q;X#G>)OV3_a*cv%kR;J2bxH1=Jh7sGWtgcALT?H~B5#%u^GJPasRngFh>yEscxI6|jp^+Fw)6<60%n$xMqh@EC4!@h3 zAiQsnG!VALYoLrDwQX6PsmqWM``E=}aQ8h$W^5&-&>k(_FVW(zAdv*s=t7*Ptz1;q z_M}*!;!kO)a3O6iOf&?W@(LKy&EQWo%WVezZVLwY+M<$oS5T^#-su_a@z3$GRNi zWEw=_KaXySVR-RCvpyU&~u zx1mo0Gz$^S&*?wYThU0T0hB>7Cj?A>P|p}GQ}ee~=fWm?%#MEB;r{?{=gNh=xueML zvS?{*bLfr#Ow4Tzy-7Upm-@CSEB)ZE_ja4edht)KRA6kBhG?rmKW55p%tU_gyskj@ zpwP4Wmx<5jY@KGBSJ%Nv%9%)Edtv@`VztZD&9tb{5XVxR*8oRI>6J?pg$zgv(3p;& zJ@6z<_oCCMg*;jZ*JeL_k`twsBZqRNrRhLpHOeMXeN@A()OedyZ4qB+=*jv;l>!xE zCqUj|4T;4;?;K8*gAqd>Iovd%V)dg9He0GA(I8DMIac9B7*{7oLQE|=iV=!RelfIL zwJzcqZ5UcGT2{e4w--+};!jb#*=CD&ndmVXgCvzpS%ZQV>^d)l-K;-ybWMU}tLSEJ$mKX_mPagkS~nFH0m+mu zWLA7gY;#3%4|$gg=lrYQb3y;ZYx_U35#0a2n}CM(e|c>p-{|Yp_V?ugg8>LA+zJ~` z#o`gLR1W`-ZGg_gZWrZLJ{*pzqx9{y{rI1@0ivNswF=d66eEe8!o+uM^nYxF`zrBp zg<9%3>omHNcwvz%LOzx6*a#+b$WCYFYB3wl_S+k9W&Eb4Ln_o?o5+`9oV4z-uG>z= zQ#8z4BzZB>NvSb5WI|7fJ6X@~eM#KYQnU*ZKGy1G%eu#HA|07xm zN88T6xoy)i6$vfFf-*Y{9Wcu_uBFQCAW3dpu8N~(BLcOmD<|pBr7CgG1lUkkqp~D5 z3z;3uvsOUPBumZ$j%j4r%Z6du=QmRt7*thfWvVpUzhUd!LPaiSMxtpL%IW>gTCqyh z998DOgViClvB-DB@__<`QCY!Bj*}Gde`!(KhV+kM+x1>vP_T9eN1J&I6N9=4LvrRk zNbGTydQ4=kuqMj2Y`3Yyk=s5nst_B zDVSr8G~IumE#%XlRp+D^2g4Tl_YMAD$V66xVoiyPLvaU*08>M*a=JMaHlx=;x!SD;WWmAoVg0!+bf zHwHs(llONM<=i&?u~}s{0{PgY>z=&l6dLIpwFQU@t@~1XM^5Lq9~vhxm}7? z{gTxb{zbSnBUD~I4r4~nTza3p^EP^gi)mM^Y-HqcdWt3>8BGQ<^E6z(Qoo#3UPi!k z*p{R#6;=l*?b&EF-t!u#V8#e^AEe#KWOOxG=Ft88w>9GCKKUGk6!$T-{T6kA=2KeS zPVwG;YU#o4@>j|RVWT4bp`&MeHM$3XFrk8Z!?@}KYHJwIlstMMkjkNaz#D0 z!O0rCglo*MWYXxI(e&3E*)&kH%+Pg$vzFTw!R&ajz%~iJbN3Nd>N6Gdmxs$JPk9Uz z$~9t}?(=9wy2=m57?tcI==M6!G8k$OQ8i-NH-ajG#ZKD z*VSAw9D9fVj`9z*Sv;-N;H*_Fiu>E8QzUBA`~*8&gkn;-4KYhZhOCEn%V8vvz^vNN zJTYqWuGFNQ7pcv{8IBb0*@tpXA1$?c>6S($`YFjj$uU90VrPxIz`Qm5Ro52VaF?Kp znj=Q}3ZaG{@}8+?@IAQPBkN#hi5d(QsrRGh*k|^pfAmZX6Fk!O*+_GS7*71rJxSS_ zPDw={DZm?BgRdo+vf1ygIC8D$2AVEJ(^lY$?LQd#mfRq0quV$wX^)c;%t`qv zM8tTc7cVdrM)A$k5(G8`+3`T(v_TFQ4MKa^IAm;QUKU4f5)T9 zy@ZxL#)9d2MrzMt=Qui{gqMn@x?*dC!X1=L;V7RNNo^E+@~X6DGiHnmW%b`Jka5AV zv!(wI$@rv}xZr0}|0J7oA@^k7ri)kK+?%S_TR311D?Rs7RylFVy8;hqJr7IYj(_;F z6(7OzSGw!0>Csae#0M{n}}h)U+nnQ zojY?}$xIxh42~+E`sraDEWuukXY7mO7g3F>z3p`eEtL~YNQn)0jyGz(71QIMB2V9- z>q6`UycUA{X0svBIl)WiYA{vxttAY}A>kIGlW7jQ!_SWYv?=?U(5Z~}n{PXR`^Zbe z;Z@U%%kbM7u>UDioxBj#pOC(g?Mkn%$9|Z@`%aIKr4SXR?d&VqkFNQ1G90sA`c`Ci zc?*7rAC&JJ)B#Uye(rOhI?Vz=V(g6kAZJ$nt~$?2BDE)xp>0dPX}x-%3(=mv=WLUHdTsoYpijszzS8f6AL~wAChqnU0U2(Pi(RlK8h!@ z6%3!X7uFoeFl%;O0}q8)D&=7+nfH6$V2@zt7xN)c0H-Q^AB?6`s_j%+K$ ziEpsBv%#^W^=e35%kP!R{q|8CsK`II8`)uKU@WIUBt%nEJxMc)Eb4{4RENHoIn#mt%A ztAPJGrp4{nDi$HZb8Y3d_9Qz<8`K8wyE817XyMlhZV&C5;O)j7 z*Cjdu7K+m8S0L_h17)?GA=XANXR_g+sliVhnvgUWaw;ud2`k#Z#4!|tW{_sR1sMyS zDdP1KwOKCDupaSaRJg=iSYIu^KZWy3!`y3~5=uMK_g)Z{(ikC)INq5L4WQ)@;kJfu z%m8N{&?(w}D&r3FRKHDOZLoHa#!>L@)UJ+H(!%g=^k6TMAuCMfWj_x|lN2@0@_bbb zTA;5cK*IfiqDpzdBp9;}opMP^mGso7pb@4GvrjVwW~qV$!!D>8&RPSy)`Kga zWrr!_15)+HJnUH7C*&^>n;|Ou}*5wW%EKst0bw*ljOQeWvV&MrzjmAEYvv8ssDC)$!NO5 zwYrXbg^Gh8gWjn?2nGYN$^723sjvw)C$-nF~CF zd@j4GNts`Kf$ph>^^<1fvZkghSaj!#B2nC(Ug2?(BVri33%5NDyP6@??kb*cYhWIj}RlIB^Y5ufJO<(v>>+(owT*s;o zzsgL)H?hnZHzj;c{?{sEgI6GWi08354@WW}y^B17k4q}8jM>VQT1Fuxon57ZShC6) zF+DM)P2m8R>4r!Bx0!Bzy3r{IIrEjPxfTtbj;67ktG_sF*i_j_i~NhXjc%t%TSp1K zb1{Fbab?#?HrIa6cU%r$}U6Ip_(BJuCaYbo5}Hkr@> z8x-9v9j$ypa}`f0{6lt`>Isdh{LUgMfVl)Sp5GHgo zu1`g7>gL>cgtjiDFiJ%=g-EQ%aNk>t3)a&7myw|`$=)>OhfMF21e6~1T-YzM>lM7VTe{2L-7q# z{pi3a-y2M4a>=BfG=`+AsfY^01eYyhAPE1a<2?gCN5fS3GEZr}!#he-*ByVfc7QK4 z*Gi?CE!ny1MQkRgc}G_vhhaVXv}@@0{S2Y@eD|D(N{&vkOB=`3i|qoK`tpEsNyE4+ zblz1n+lZ!KQx2EXa;&6zdu`6{eH2f_*480VTWtt=!dF*yKupW=cf**5ZII2}Z;SFe%lk~4*HSZ5jGNKQCurQAA@SYR(Tz{1Rf;<{ zGfq-wtG36BA2)(>6+-+0DEKrWV}_^xq}Yq z;nkga=5mRHTdwRGF>DnML!ymSvA*bi0@!zTwbS)&zoUuyQn+{8l|g+2!_ZoAwxUr} zJk_;1_B)vvQ&M#JrUk1FiOcvgy~dT5MOv#6Ox0FH9iU7yBhR9?IFhqdwGq?9;sdrb-q+vQxY?vB0thRkI3%|od1d=G7cnM9ktL4TJ*{q}M z#_u2Qt=A2iz{#!1?sFjNh(pbgskJca(h%LlL<{*G3aX=(nksDe_4?J}k=qqm?`zek z-{H_Ja_4D{)6(I!nEX2J+^1b9x4h_vV4i@J)g)#2)kMlI#$*&rCjx=bhTe5rYMX(X z+}m067mFNkvdLkD&_KFl`9YDtLK4Y-QOLIK^OU2CoG(Fa;P8zzuhXyG*74tEv*~@x zA@7{nHfk$RMim@$VP~a2NB0K%G->l{Rp0R8M!KLvhXG=Wv!Hb=Qr~>WfS$V(w2nPC zgU`-?@pG6waacxhs%1bp{3MSpz1F3pGF55RSQd8rU+{N^6R!RS*w^x zJ`j~NjV5dd+BzDhJ$A1x3}Z0eC&wUCmIIURS8M3XpL>(GoBpO&qowuQC&dJ*ZZ7%u zSyzZ!alslMInVeG4@BtoHEACMtoS(aGGhZgopMS#y1rosH)g+C+Gg(Zw%RS-jh1O^ z-(yELJhkcjLUxR)Uql{n;1%l(VNiZRI^F^Koo+4kp6pjLgJK^V{itbtsPQ`*cH!%=zNB? z&-O8yJh=UY4=quJF`JIhH#ywEvumPrSnboLw^!(SaR8ya2iVKM=G0-vvKH2Jg>_$r zO_^CY8E6U4*(3h*Va$Gr{O4og=2-X-wK{wRtcyfB8Ll14rW8+`YrIq}R?wf10sQa{*&&4|?#smxo(;hd*#fxPM3JNTEcR zvR$c0kEo8jw`r;Eo#l7_BzaDwkIqW+zz!05U^BwzBzZtj@Te)#r_YwwpkCfXI;PlR ztLjK2+9ur|`7fgAQDNXwY5!3L^r*J~sAd#A_~A>GG1e%tQgSZX&67|$dq^2?m7)4< z8Tf3ye_e??N=Z`6zA{_0mvKI849VWd=P3XzeDMi<25|`zVO%YHb3V$D`MR#utB-Z@8fT#pZJ8Ju&vQ`uf3i z?cuG#@wqMisAGyTF4qQSKQjM)wW61@B>1Hf^bs$^`4VIEV^w#;z(0aTr8y4lxF&rD<7|9{ zOU>?&E^Cl%XKF9GTQBR8!NQCWwu7bAp zdF9Y(;f;XL1+a|iI42DuZ9k%UiKucH?wLuoK~JYg^F8;->pv!Rq^29MTDz9Co~x_! zEZoqWx+`v(@#2pT@%h>k6*aiN|G+4fLKl&jXJ{Il@a4E>UY!+%45$ zKgUSR8arrX$rmf}AkO~rR&wo+RSFYN~i3HVt!7ht(^foBCTDPR?9yKX0 z2or)7`84YnD&kDH^q9&qX#JfnHb}x0=f2Gy+ilA;ivr#6tsF$INK8y5xo-FKC!CLR zY(hk4TYV2BNZzWw6j5?3zD1V^s zvF?Jn6Rw&ESg##;O4IbJ3I&PI9`qdI#Qq+1BU5m-1|X+{J~V2PG}YT%mekPJe*_ddRTD*F1)JUh`e zM}ArJGKOYI;_49$2?p*?46@v#&O6U{ z7KH=O4do;1ghS9usm7?6nPOG)CSwrKEB`e;%(tWH=Ga9F(pEsgp0pnOnU_p%+ZT(6 zbJ1@GMxoNFlifnP+D%`>2Esp_q|q5J(7;@Wn1YT}!$mFK(!_#ZkB{Rc8yKQoQyNao+oP_F z$~2Cy)$zlM;>PQSwqk~Aj~xaNE?!xiy9DuH55<^i%3SKLsSYp#8ixaf#*xD=aHiA| zl_f(&qcej6%h}o8W?%>pKzPW5pADmU%;)gjy&iN&jp#`_rOAsME*B&^m&I0_v9(vt zFnKRl3_PpJoow5^nu4jN6jn2XL)s?xhUj;=tdiqgHnZawOr zSe22wU^`cYNd&S0zZFOvPY<1XS zcgOB^viGh!`#q<=s_)j@d#)yIRU%?UuM2OL z{+KCR60`x~vNF9QoD*eyNQJALm%i2;XPs+nr=~k1Cquu<)g)kd@h54EzO{!D+>B}H z5E7wBNX2ib;Vozue5kvL!qv|F%7|Y1PQ8d1rqv{Ev8RD)m6Pmy(ON^SEQ?Tvf0eCO zj0Vf(C^4e-yl~qwc$~x(&8NSwHzhTBg|H$%t{&^#&^eU|fZn7K)CEPT1oslVRrh9% zKVC@Amg``=AWZ#hcG)k}ur*Qre z683HE-%}^r$hd2R%!I2GVmqQ0uIO$gzS_S;A-4~P$Y}KfzmCe17pkqg*UN+bQY7o0 zK)a~S6GoT`q%jrr`mb|&o5M;zy z)5sP9{^wTT*^TKYZu{W~n5%QSfV5@VpuS^NZniC>-wU;q(nc9Lq#2T3CcOS%l<4!u zJXCRdaCuq@K<{e~za;FOf*HL`VXzTS`Jwehmzi=O^xpaCs`-ZExJlSQRv6v5x)tK{ z>w+NzH!pujQ#YrrE(!|R0;1PHAxjVcvd5IqRC5{Dt_djf!g&u?ZRuInYf2pjjzdxW zQc>j3!0Rd9T1US?pm)9d zAv(uEzER-HuByv zuK&3FqtWOs;yUu@VU*DppY&~g5wsm{h}8K@Y-b%pakI>kR({(Pi}3KDhmkHa|H=xA zYv~9iX>uUDU@iTCwI9QZ*_Exp@^bY?#$CnWOD0P4PE1d1L-mCPE&7_~F|+sfGSx)6 z2;?TCob$_*1KzmP=`?pg&#mH-_IMvUe`$bcJE_lP+e^Nx1AxLcy_-34m2!!+uar>8DD$GgoPL* z|M~NII{NT7XFuRfWdCJm{&~Q47>~Py?G0(L9}aKigR=wueb2hPRCjD5e>Mv89DGEw z{zvAiH#j8$%&ADDEBCf-oc^>w@b88t4*?$je>IH%XW~rzKNDx0|4|5of4df_N+}YL zKzm^e=u$qA2qKKaTl#+$!X_QFB!dR2DimVfsAn=5%%Qf)M9KbVQSlRx1QCvdNdbg+ zEg6ZE!9}d^s+|y(puoqf+xYWyI7l9k;peTNY z8V|ZT1YW1i-EP&9d7uV#Ykkbhg+YmN9*V_J=bsuix{(bT0voJa9i}{Kb5rgnsOg#C z#rx>8$(M2l9mIDT)xwpFk?GA0?YC-{>LXr2feb1aQ5`abg?#~@+!mdh97)XfUS!{u**^>2<;4Z8}Wvc4`~X2Wn!gHX}=+ ztEFCZs4M!`TakGans6LSIIM0In?}odk(eia&=?xxuSuC{>zk&hT0Iv$=(?^^1A+QD zMzpG^Fc+3TWg8*W59A!BEPyVu$ett`4T>iuwqoq%rHCnmRMro?0;1sp&1vkMj5i!eeYMp z$j+Dz-h?{8`Fu@PCcfvCyC0udC3 zyM*5Q_28=zzwJP07`-a}InEn;bwf^E%>Z)qYk8viqg90uRqn=G0@vrIX*7%s?WNkf zZ~p4=x9DS+gdx-TZJ!%HUHwv_JuNovX2h(F#f_Ed@`l3eTTmm|m#N*LNAvu!hmDYG zQ%YZnNf-FmwY6ow3=77gakZUzB562FP0Z9&T+=DtH!StnjxT-ujbiP1)g( z$J5s|F19A=+ngff+ZrFcn%ON)Y{m)eImt8&npDjWB@~xL?mpM0sQ)sk*f}iZZ7>nm z7T~n*t%=;}P0%K$cl7VyW%b@`_f=i7rU+nOTltY`cN*bDSf@fs_z!=6Lu-y^LZY4N zyHY)QSA{Ejr*^^a*OOU@y2!v?7XJ*>e95FN{xG>Kd#&Cdhj{m06~vdy8+hwcU6PfH zLUKI#d28lt8tq2Jb$V0H$(B>?AvRwb=s zi)M&TIFkrMQ(3TRMAyRyUC7+!m*u@*ZBw9d>EoWA$ha>!zg1(DR>c!KLS$2K$r~M{ zbqOb!+}mnq%dy&e)pmY=DR1m+P;%3SM|q(gECwm6rLrSJCT8@J+OhCI$ft-$!FFGh zF-ot*&d&|U@agNi3aLn{5+%p91!X%qWHD@a_m4N~5T}r~xD#G@nDu(W%1S&Rp}N^| zPasdbm_^p$7s9v8U=X-OxxW!2c9)KxCAP#)-X@h4!w93eC5kPID<{L~lE)c-lR&&N z%Li;o54F=<5|75v>5hEsu2<8HaaB_}Rm1i_h}YADUcP*#rnrSc7x~#zk_$sW^~X0d z1toxBlnMbnv!yU6&E;=#>JuX)xI4>uoynjgFMNg<|hX1!=(HEUhr z9E!=2Z9q+t(ww?7IBRp#yEi5qSt!V-Mc*Ha^ZkJS#8`IMLB>f{eO(=N7v~-ervAbC zY(b&mPgdrRT`8hZ{3DUSMl29ny+D6PwFwIVP~^6c9BtEafZG_Zcqs!8`U44LD;Z`@ z|K?+<;ZSZqv;8ffE_XxBqEMFJbytTt!Xe1%!K`G@Y(93#FR8PmDGEytBs?i^WXpmv&iwfLhcB%QY!(j8&CgnYz?^c_aM z$_6x(%7U#d3ULF{z%LOW{^qj#w!B8oYraW`za^Glmlng)RAk?ccuVx+ko=VLQwh$! zaz?8Iv$Z|{Lb0(m%Sb$Z+%{n=lHE+|3%Ut$52R)|_EF7q=JWr#YiWdL%d3|@IiUV)_1jF zW~)4Dsu(e;oBWiSJT^p{vG^v1yyS}Oy@!52BMBv7QT4j~$x7R@+Rc8`{*QKK_9h5O z+egQZFI~l`hbN?(Ab|BNJ`m@?vY$O|e`kFypU9?^_?w0F8~NC1hK;X3On*37)iqp< zh!g%=Aew559wx@+^_tVjN@+5j3jwJ(!%!*2Ol zCn+y;uZH}TI_8h&km-{sk8-%3Dx=YyCe89}QGiUfwG5Z+vZWjA7;?gGP}fRuHJsVz zFK3HYP1QDXau`q3b}EZZ3jqseTMp5Q!FS=5v)g_I%>i%kU?jwjz*nw!jTwXql5lxdK-AE zd*BeK@?bx>tGB07cv;}){Bkwt($S|emyNvxNwv3 zCmoVESRClQ16lFkopMfQt~ z2~bz8R?|55Oou`X>l=ddf>!Rtm)Iaqid5Z{&Twb7C{@NNy0=W0=uq2~Y(IftnpigS z@3exE+C1sNtk;Myd|FD?v=@*WfC&g zvQUwt#uzDi?)vY8$sL=fx0IBI#P>8YU^z>kM4>IseWXtF|zatn(Xqr>tC z*&rQD##=XW+E->NcLqfI1Ogvj7JwblTyFvlsRq%h=5(g_5pEaR$uw_cFan)#!%l7P z%j5wl-@5huwV`_Z;!SKpB<&IULhD~(MZTUUv&l!IkC?`0N$Gm#>!6KCM{geHWAKP& zF#oJ4hDn0YozzED8D(NdFp;)K6()U?uEm!D4YH-QbvGWvF?8B8X>^kpWF8%V=h`VP%FZv2^;^wEcU+I3FuQef<#1pSZ z_y7`$B{mPQ6r~G7?)#h|ce7aY)NeXXLJM4Nf0Ne;Ob^lYd#-u8^(C2ScVQXXa~#) zc6u&LCtmtBgl^mu925rsi*a6Hta+}LH2E8Q+&ZtmWyLBF*047-eYC*R8Z}f_J5fb| zP;ZYzUZp8v@ta0m*_5!tM5iX7SL5@yLVQaT^tP}HU5@bBJBf5!)kej3Y0am$&E@im zMQ9WRD=$wMFYWg2F&gHo?gg-wj1+F_t~VB^fZx@+O^YqaE-Z~9vO>w9XgSp@Oxk}* zwpvv$-JGxTdRU3ij_}I_&!z$U5)+o>m<3+dlGSZH#auCTr7Ii(i1uIklR4~w+ zV2PMKV*8EgsrZG>MqN@whpT^nt2#uMDxroOc<_xn=6jZx4TMcg8GcoBJg0sWF9&a%qN3UAps@ihf+tR$kdh%)``f6!!+VM66K9E0veXEC-u zuvFX*_I;%pMl_7rH54%Cz`c^_X6`aN7^msBN-EqqvNJ!f<1&&gdJcZ~-@m>ap!dxC zH+Da$U?~_QL)O2Fho^#hjTr3fn;6HZB`h})NH#fYVY92TA0>*gQ_(xvRA0O^kLY+n zqi(j`8)uHo7b^J-W3qmt(h`AQ=FQc;rE}|gVm$^hm-*Ay935kWKA!z3Uj?GiRm?ST z8+G-6sA3YS0PhtV~GZYC2X^#5*xHt9vzN=FYT&0=jEtS){!N z;EStrm}+cmIX6q{F{>NbCr#~4P0O;eyS^TI1kZZsQ=X3WbN8GYv~Zf!!diXL<@5TG zF?QCQg-}lluak<3irj!)Fn9$bzECF6somjCWQ-^1KARneqm?sNQKv`SFocDlp#9j^ zU#R6Jgr7SVI@cf+;!C>&El0x|b_-+*})k70ZJ%Wvas_ zB6da(F-g)1*-GC{eE9>N@(%NLW2Q6<6wA1+7uyIZ%`L>9wX;Vz`7ph@*so1}$MWl@ zReCK}oH>=N11;-p6a=e3;chLUKmf#*^q99h`qqpYOrn_i)apynaF_AVl||3U0xU|g zgN$T@O>dmvKfagl-)kv0VmH%tOGFi<1mK9yCH_plqBZ8FMDY~YbtLXbrsJlbcH&xn zsqn)podU&!Z1JR>?RCF7Dd%s>zr95$6G{1EBpavpP*o-paIuiL4}Q<58R<#rfZIZ{%hI|=x+&W|adK84e@`$h+&$sn+wd8jJ=vQD78uR&Qv&lg^EYzZYEmWX#;gRz0Hx; zm0VGN;jnOIzN3t0zU*KT$M?}Z&V#*WCI^=fY64&3m8(fDuIVkwXJy~QA#e#UC zP_&5Ji2>|AzPSCdhPDL(UawN~F^!Eedf&-aUIG;DgnD1Q4lCELD7?dM2Td^-pPv+9 zl59^YKNO`x#x8N^+8z*sq5;zOYF!XsWDb8qg*Zl$ou!NZL_AmHMI2H=PRdBj*)Xf5hUy{oUiefiC?v$&41MQ zW?MWTZcmKyS$^R!tj2{r!$5A_j3m?uj(U#}L6Y{X^hwy`GDUr}9ifjljF>kAH_j_x zjo#ZDYcc1r5YGg{Jz&dWyA&-5;@ihbbRKzZPeJE5_tE24bq(rlG7Jc0A)tN0Anr^! zYoj6);62O7diGhstKiE8_EVXRY@&D}$ujcq{9%Ug;0@`>qlu^WBjo_E;`yptV|{#(c% zyH;k@eba9Y;9e`!Of{1$wJkw^(9otRkum${+x+)>upK;7X1&27CUxFFJC{y#WR&Fe zZz!0we?#qGK=GeinV0ju7}jkF`L@zy&+5nmMVXj@lG2V>7XG9)%H-n2@-2DtT0Doi zj;%pVWZKIpJo|2hA4_EQ-FE&zgw83-X88N=8JZfeVSbMHLZ~zSE~{iuLlb(?;AASp zJYZ<7Z{+TsZ;cQooRa~CjL-?=ARK?CUPoK0W~7ZQ|2p!8zxO&dG-2<$@E&Dq+>!IQoN z64}bPLlj35AV5k{>2`EyZ-ld4~=FdvMpw3OL#q-mv#1F=LuMp>3^#T^e!HI+nic=h1YFBtm?!dB@^-E6Z-rW4Gw<9E*BZ;|YjxVe z6(D91%RK6#??Nt$ta3se+c5DtjOY31a~zK=5mMOil%&nfvD@=EA%RBQG2E5N*_#U% zcK)Cm6M*{Vc7_KWaKFq`1b3r3pG^P!MnxzOP~EdLNjrIFjL=^y#l>Uu&ahyK$o!AFvcrrEr6+A!E|1+=fz z=(RzZX~HU1$PTN@NO}&*LsB8h8g&!1Z96631zUohBc~T%Vu)0GUk#@@VRf%JZMnBf z!*h4ZXgM7nlpQ=lx82kAgk=pS42r!+*gBI!a#C5FHG@xsRkzDK~wer|7{{>7wUUa4eGa#9jVQ8P@tqAQ#w(2!PlWBubyRf-JBH-v2 zI$Gp|a?=vhrwIcJ%c~H6mt{w;6e;D>2-p~+=e>HENKzw;6_n5kBL!-vhFC86y8X&q zR!ylEm&&;jT`Bj=uc9;8riC3k(IGscV*k}y%Qx0wjK1|t2^6~|A6S{e-h2RSTEpqk z#h{CouDD?KML3WzqcZ$RjZEg8d-OiMiuJXXdu_N^b_s<2@jc-`0h+!gF*GX;=JXUy0?)m3?$ zc+k=k`O3M5lF}2PLWw6H(4@LzwQ#BINSl?e*s=;3!~@N&rIlr}*H$-b9#Uz(Oyz3b zG3egbHd*v^&V;GkH@vEf7|8Dw%GCtLihql6sMaDjTObv3AhZm?%92W&WzHS@=1?>N zu;5b5!D+T5N7jn-Dyx!1$kEFy%*jnX ztJR}()ZjKIGvTfNJ)nUau0O{sG1XZ8DW}ce>?J=6z1`%RlD=^yS7$6zP+aO`#SI{P zf2lfc5=t7?sK+tq8-cJ=&J(z52TIHBYtk6w2tF~aA;~51&>~GJ%M$emYy4qN%<k5mM z9CEHOx5+kPnP?Z!UoL0VH)H5K7Dn?xOKo$80)0bqI2fb9;j{st3aLJkRliwWR=7f+ zjy6%E7-xx|VvU)CeP^wW?poU3@sM@(Q|W)Jp^EU%T)t!W7YpmxDkEH~|9PeAXA>*R z&^CxA9xkCZm}SdQRjdYoUH5|8zweoFLY=oD)DogQx-1a93IFh=UUvZ=w4FC{UBCb8 z#8x@hWeToUDA+L{_}*unyZ?h&w4Pw?&tYTJ&ElkYNSr&TowW$ioa($~Vydq+xK%OA z7+jzhYxy-X1wUi5gzObs6oPWVqX|D4z0zGB$(?`))}aw&t3D;KtTHvpAP$j4zZVfn zRDuB(by_6LmM-ya0PTwQC=auQA@#jBdk2018*50HU-Zuif9*LocHNMAnot2Ry3Qt# z6n%5zomel0NKJfy=J{YgK8QqeSeByky|#|VpPR3mhn|yuFE5pau@1=2H;mRGV@VLA~^T*k_AObb^h1eCA0MCiPXm+&YZ=EwLB;0KbGi3tI#(BHco0W2Oz zT=j&b9(sh6c+K?gtS}lx%od}hoaIzUBKeDr6|vk{j1ux!)R0$voT>d0ivyK938+Y8 zLBlmRIeA4(Vgd2uTAZa{BPgwEN4mqtX6^d*6zb;92{@|xwE^hL1_Q=nm(|zC74e96gxDX|#9+Qk^StV)> z*))3ci=3$U4rN_#er0nNBWI&y-^7OdXscPvugQ!HG-NlJNmS?r5?*Hhwp8#-@jsgh zH;17qbS!YCZ=R%_Y-C&eo_R72TT??%Pw?=teP?|HLY_u6UH-#gwdbC)hb&oJ-0lM6+ zhhiLJta?_ijDV1iomE-@J4-`0n@H$llOa?+rCdRp%z<#xua-z&YMy_bHf3hVnjM-g?oey2FJ%Wq zRD*5w$9Bu7@yW&LhSH2UP%_*r3`M2;h{oIzn9MXJx{s4vU}P5+fG?pGA$*EwKt*rL zoM|66Mg^SWojJaD9KsfmZ(Uhhg3^;fuYPI%39#U*Plo!Qtet9**=_C_OBsnN595eM zerxs~Y3?nL^PexER$r!fWo|)Zu8JJ+#h+1&Z}>2Ogfmnsv!)G(Wk2IK@oO4r&d=oQ#aO`U#!J0 z(BGQQL9MjjpcUqu_ z|?JRy%_nhY`y^{$4(!F1Q;a^00h>pdm`UB96U+Ts(LfFmaCtap$T* z6rv$VT_i^g1^B)q@2L91R2-Ee&{LKI3qVyKgKQvNJTyQUf)@NiCOAkLI|$u39KQPb z@t@FxM+kCA3JADQR<<<+_(T1$vUn&Q9+O0aqNzkwM3DlJFWY=5DS`ric>bbVB9pAh z>NL4gy_^yZ@#-aRSZnq~}K!ZZ`%Htk#cck2DG~}gqa_;MMG}O9)<8!x@ znH*Ga49jlRyrE+Dtd5;uUu=Fvvx1gp2{aicD=`|~Brh^*(y%NjD;{2xYk#!M4~YlP z;FMxGxu*};$0ibXl!>daNa?a(Ne2PiAFq2G9k)h3Yfp*wpGZZ56p@@g^m9n9r!&Bo zg>~HbB2#9>d2lxwOJeSAu1QOiRIjppbFSDb^_VwP1Ze*hc5*Ipqv{0`b~buW z0SbCpEXCT`I+uiIk(qS+9BPfQ`#Sy%(AX${tC*Q@5H%@~3*UQdTtO&2jUx%XFq?u&o|Vc20kPzP{{adFkJ!|0nfF<~!frsi*F5(;pu%cS3+?dhq5* zqOr)`oY?+O>${-$32a8W!S8&(n@k#S(tmLq&!aRBra&mOo#&fXfcCX2h5@Tkn;K#< z`O2u%8{ML$B@{l-a?~Xs-I|0pg7&r?Xlfjv`wb!+-n7e$4T1i(Le-zb!r|3Tg79UNb+*9kYRAUR&M?4T!+wP zk+^$Dk)g%Y$W5h1vLKs>K3dUp5dVvXJ|V33;5X3K(w0cC?B;ryty9|&T-OQPsA4^Q zhy-oo;os!4^rZy^B?60@YB=yu6-Z=)Pse};JJdiTvkR6(R->{FhLAT5W9Zc&VSh>r zi#B}<*1$!rysC))@A-U!ScV{l(D)xWdD&Di{_og;vvc&TXe1a`P4+W3luE_Hl87rT zmY4n4`SemqT_hiX@_)89n7SF$vNN%>A0vssi`O9rvX@AgASy!CNt(eZ{u*Y|d zYO$V46auu}?w~bjN6S^Y`UPK8?AM|dDD@&=A4s`Hg7OK*^w!GPYaNNBG{5rv7N!QA z^(Rh$p3ipK?NTZ_92$Ml#=9Hz`~6?-8jmTflZi&TgNCG;{*3okx8qq=@?==zjD4#m ztBkAK*xOb`C(MjCjkHY1(LkWJSqetc z#T6$jB{5%b)b$noKf(!AFs5+U0Tr=pYN5ua5{5Ebwks-HAW2{tDQp|hfy8n~)fQl? zJ#tRIwLnJ$@@`6J+PzA#OD73%tyPwQ!i-CrtjdQ=nu3yQgP%s{6@imZBQ}L$E&6T! zXY9`Ls+J3v>2rqrJKh9_rS=*O5w}5$B%z_?$;p1I?CS)20&41cw(C%}#g4}+vmCje zM17lK;m$R59_bF&J#NW{XLi2lPBoPoB1RH!zKj3VOHpvkgT!ha_-`e>oJX36io(tg z2uA77vQs5m-gd|$Kc95^Vcx9*y?c*D6#KbMezVzD-3K;pLoG9R>ik6Fqgd`(A`=9H zDR_I(Ui0KSI4uT(6($^;nhNm@a$GI(=~7JnUL90*8Kj*w-jLQbx-6-qXp+mGXpDl z^XVf|bL!WwNvkaC6DRw#BW+7hRCobwdeoIl)Q#Jd>L{*v1_ zd`a`%V6`T4E3H4#@Dtd4G{IzIUY*alICx6-jZQtq$Z;<8G4@%9JpIB0=b33Jl6FhG z47#zUQ;pp)onBJy&4wk97<&MlW2Z3o_e?nRiXLN$vzJsFtHiWF>WI-=R&9x#zf11c zbI~9c8PINN5QV~^&@*XCylRk!8q&O~i0lYXZPs@#yQ=4@)>sV<3pFp_iU%8a|inS9+3_Y~5gk zG1vimYI2~Ddn`~aam&0Ye6n+B^rZF7F|brXzDO%48(5jIURCX`>aiI+jyCp}^}H3O zF51`u#au7KREZvaDbOT+?VPtJT-Z?i!Rig;3=F||$NH0@9*nA3&CZ8%dKs^n_pF#nXGs_<;Xpeb8Qb-wrhD`2PmI!U0Y+MOrSv_q}2We z!zYJBu%HKHKoh(#kBiLl%=f`9Et?2E%t=UwBYnd!4JF?pbW0;gT2L8!;bi@r{CvER z^&e{4PY^{Azm(9ATV|l&cxujvzK$Yeg$k;{3EuyVMQ^$cjJs;m~gf zt8PaH*0fy@1OmDisbAOVM4Wb-uHUS2oQ%up5aJB|ar8}`oD6Y(06d+wds*|C8sc+U zx9g*`>^cJ2?-!@Faaot*4g!AgSpqhhM!W_07^-(OJe% zPrq!B6#J)?XDSkruS5ic=@wxu?o+9jEeKLiQX;@Gk=u4@C67yi!m2trDzKxEDKU;G zzhofc&CXK1@J}AoY=vFD)8iR>unZDuuA#}JkcP8Yeb^7HNRlZ3b<77y7H*)YGI|}$ zNGM28WdjGUZPtx#H&+crxLr3gQ&+xYC`&J!VyT3XFnW)KesueJeK=L!9V|L|#BCgoQ_|n^_@{R=I>C8uaAkA=!v0 zejds$AW zYK5krr&;waR-yZ}y*!|%F>?L7(*7uCu#6mF?>^};2HEAOEF+H|+lQD+G^oB&onkd5 z!s6`qs?n$7eD@0dMUt-h>Z4_;ef!EZ!2Q9!BfoNB@8Is7>tWW;14*kDw`>*BBz>b~ zp|0Sc0^ca=Yo=hV$)Z-tIvT-saA`7#AcI{t1ly53x3B17T#9Dze=e2sP*xt%Cq$?2 zOysE%VnydRo#+8B=SW#3R6bKFXqEQPiZ^PdIbXlqffe96O|T)I!2PC9qO_ z9x9x?L9EkkCVC?R_3y8NH99mP;}de+9IRr0dmpMjlpioefwHB0?^TYnz0{-F)8hdM zZosk+=GA=NY9gy7WbL5#FaVmh+Akk%gZ;X&Mz2C=?l7F*vnAcE9xwP?0CUl#s?2jD zBoyy~-)=)9ooVRF$-4xmV^3cHYtLJ&R5xVhg(mJzPMeIp1f0Igx8INDq`sbbCDK89 zQhVuM%-?^CAPEDPt#qYU&^_S^|X>sS8+@?kL9pN5{8MafE5w(vTF7*zmn8? z2s|g8(=k!@Bgz{GSz`%N`GM=K_qY=Z(V@sIU#$SmUvV-INqf6yz8x-QBHx=pgS!rp ziOoi$Wu3Sr28Tr0VMN1~Or)U+OhV)$o>B4J4#)|fqv5h`FyZjRAazzk$p5*H1=B5} z$-T=Eww<85;2CjhNd-EL>tTlL}k`o(V9Zqp+g);c(#vm?XfcDQ+5XIOVTQarS) zQBY764z&ZHGiEQ8H`nj{r~NfUYe@BvD<04D(A@T#Q-ZAfsX#!}_qI(Ou8H8c*K70c zMqZ~lK-gE*e%#C5X#X%=V_}1`@w2738^*$hj`OqaN_+5rCv7*z)yI-O&&Qu{P0?@M zI6Q`;2zoI9px~Yk;y+=Ba7a2dEljRO49Tsjasp}pvx;=mGz3l!IjlpAb?Yx&2gMi! z!V#+qWF2tC3VuSIricJwRhG*h?YCHJ3WBf)1riIbE9d(z>V}Zc-%#q< z&Qypt$Wu^^&0FiZ!kzYJA^0rSWoK3t6`>}6Z3;-9p4utC+Qql>hbEm;%nB;3*61)p zh&mb^G_7MBFX;#B+MYLCFb#%i)i$|-iTu)JkVf9pTrkchZ*_gIhpODpQ?v4Idm{07 zCh#S&NWBh9`l9PA#&F&IM2|FfOu&42zs#S9E6+smN_dHS#4zE_l!ybPOfl0G1$IJU zLwyWwcX8@)MQ$io%R=Q1k-4LP?`7s?nQ?(vNK7_Te&t9k?MdH^Yi-H9%?9BVkPKct zr0)+-H+%7_ZE|CnH>)!`2eJR+^B~i7+nF6bF=kfy#-pq5L}9%xFw5ma8;&Mn z2$a`FxI8s4Aie-@N~=_gkYdae-bhe0vXdDR<%mk}gc znpAqA!gf7zt!FPds}kqm%ZZVrNlkLyUZZT<85O+5G8tWY>sVvfMRmWpLzh*H$X~ zQ4rvG5)V^e+bVPO%EL*c6X2BxElLT(kR=v-a1%zu$d^T%6t)(Z<$<3vLw~1?A6t_< zkJoAPsbter)DE&nVW?5`s-r(dsZp~=D!T%0-H?$K>AjleZ3CIJP|t_p2smbut5`^~ zs4!7r$k2#1PL+@bA)#T^LJ@W3prf)+rJG(*q249(pb-9Jo$LX^;j^>p{l9lMSnyXx zqcorQX+&}u7I8v^VAH#f`ROjF>}d9>8x2wiS*c|YxTSZ7`t@nOrwEX(N@=XkH%^(4wYt@y&cyQ)H_YL z3Xs@LJPtcB{SO3B*7GBFWx2agS%fP?=wCTBDcb(7cPLWfoPAB*x9m-U4T8&isW$5c zziXVvy_(u&ie%I&ock)9fzmQmG;Yc>xX=E!2He8M=@hoAFZ$J z;l>l)d1d+Q&GAH@EEorg$E}L-r4RM5Xq=+j@3&4;E13lPSuITy zC2{q5KvKJnt081rSW!Ba;Ci_TQ%D$b zAd0o4DF+rezOV*jqyo0}vOmG&24xb#8f|tm+Jm`8u=&A)xvRV9s+qksMf9Nr!TnjZ z7^(P5cruX7G$XSY4PiOc3`O@;S{f>L%bz%mnp!~@QSww{L+S~`)viB+i2HreC(FrR zNki1l`nR`9KI*}XI#5k~m6+$lf*T|XY)43SAK}t7Mhu#5Uv>{P@=aH`ZkEZH=`EPt z^KO*0*si6$0gor!0q!+7Lpvb9EXu)8VQu*HJ;ikzR&UPwQ{YB?x8gW9YM33YV_HMxW(>l;vS9+u0Yh&OAZI1Bk48y*WcP`j;M zp>1-mG{>Bh|GnCmW(#4LZ{~!UrV|YWedIOzya-1Sjq1Dd{#C6Uu3jAHVMA2+z?;ac zE*d^x!EwzcHXxhieyFB!Z+p;f(Qo(aOlyNiXulx=h4C0-rfSjdcz;wyX$0Pz9{m-; z4WhFwz=E38UxMZIDT-j%-TD^$m3t`Bzx^Vcpqbqk3pXLq%PNnQIIH(h)n9@&@*4vn61qz+b=hFuEm5 z<)I#Z9(5N*9Z^Pl-7ALg&%tevcaLUe>PWX|r%~eVQR7cGF0H@DP@va&|GzWbg{$vu za3zj7yZ5QGx&j7$Dt~VhHTfUP5gjAQ>M!LriAsAVEfb{}4%TkAT0}Z@{#f3x!GwebWr)c5lJL#Mw>6u7^n&SWwD*1Nd864 z>vhyB^xSi$_aMmF7(0*~vr7@xv03{%@nQHk*`yrUOe9=wY6Z+n$Rs;R^Yk^N_&lQ% zNQ|KdF;0<50-j{=zr%dv6{ z0PVlf+6 zs#)grq<17|#7f^#?q1O#2qY!e=X1L%8v!g>NZHX9xyd&LUNFaiA?lHoWePO$XPZCP z45Y$+x4$Iq#H8Kxen}XJonI;CEw~oEAYHw~Vq?Ju@n27H&&6uHN>)mJV8J`EV=2@b zx%I%9N@|Vx=04wg*GqnYOo62dUckG_G$kjsXY(X1TAR$m;;%+Q0lyq_Ly+mW(71eK z#N5Zem>9pBz6ebT$KHHY0G=5%TpYIT-+|h zi#90Y!Wt2bRt!~7Cd#O%PECyf^Mzmm0ttwx1~!ceW-V@xj=U1-I@6KR zFlj;i|3-VY&uG8;e~tDg;dpFP>Hjr7A$nnxg8UTXz}Xl{r5wnFGDh4P!8iqE^YWQ7 z`Yu_`<@0%Sv&E*Cq_$g z`uObON+QTHs|TA-i$b^C9ZWwI)qb{Cw$tRA=lf(@-K99TL=?Zwv>q7NeEk-!W4{;t zS>1Nzcg7kHWTkWe+g@qiYILf#BO%VcHJ;#oN=nk>mQtd|${5se^K2bV|Ez8al>%BE z>pn5um_G!GEeD39@4gBLB&P)e9+8Ym`i#>D*q`XY`#*@BAgLLmR;2#;n-15$XGRm;gil9BXlyqcEWr8Y+*i`VezBFjUWX1*yeF*#yS z_|>B_TKM?s=?+8I7M?0UvJZ4ehT4?Vd>=RrU04yKDb;R#yY-#j53H7=7$V`wve05T zSG;tsXmhN4>(`bnwqU=MXQhCC${7Ad*UoT8vwfm={di9&jbu~JG7vHU2mO;I%cxV? zYW>BVJ|sp@Zvnt~&9;#sfG?{e25b0;5fan{o-%i1+xvegd&{Ocz-?O>cXx;2?lkU= zH16*1!5xCTyL;mh+>_uQ+#$hTf(K0>*4iJ=zICf^)%^$WxAD#~#(d_{3B})umsua( zf3Rq3YeAk?itlib1%^2)a8(lTNIFbvMaDAw(tS~JOP-uT&raF?lHDwoWcDd#?ym1k z(n(!z5z>ys&+0ize&*#sv+(7%sqTi%$u)5%eWG>u&7%?J9+lu@w*JSfn9_C$wrE^& zU+y=jVFp*@BJv2N9?|fJeHS@fjJk7*if+@!EnZ+1@Zc!{}bb~R4%&kyY zRk^EcR^eNk-|wKQf8oDm89SHe8VpQ2(xpFVkED&e%tJ{2>fdbu4wVDL+l~99Rt2qH zoejI}admce1T^Bv52}+nn4-H3iKJo~GE7{8v+UDV+wC2va@W(2z9_EGrWLxp5g$Kx zKhXrA+;qK6$h_0!x=KX(6c&>57p8l2dC29;1-V~_UwKDqDHoy*@c0yG~pL}6& z>LRJSe?<6${M|l8vqo`aZJCy_c}8|Y(C|EOko-|T*?2j98t!-yy|S>vQw}>}v#VpE z22R#h7H1&|>!^Y*@tSeTUdfI&vH?oUHPX~UOA$h_(wPui!bZ_(}d*Ct)&8 z8jiZ_25!ulW(&5Y4^Bi5zeK19WGue0%U&`!9CzlX2K^LD`b$Jr=&+VFvLl-Ln-WlF z>l&6^T)v^~*<7$EcG-$TCKUk`5tKVIZRShQ0m~K}q_bxjk>X9+;>2caSyxeGL|s3# zgF@=DIsZjLpdq{D`qRn$KGQeta)K6jm4h2~&%S*HG7MW;vB?<=o9wb$r{v5IMRjCH z!76hVCf7Q+I4WAiC%Gzrl<)F4xSAt z8q$&#VV4@ELeI#bb4O}CQjZp%8Ae_b*@xslnoSCE=I-gtJc^zn$;M37%4?qB=Nhtu zI1pVk7&CG{oXW;d6Lvk;ad?_-C;O5$m8RRCXp$*$16nc>Mu_bPzK70?vwf#2B$Ie}K? zpG(tevoMAUY4n7A3i+~A(z7};;AJlXm17qI4M`c0?te874f#vCHwX%}f<+&y>SuujPNBRC#g(3Jn(RiIidwy2m$q48|E`xkRajJ_iAgw?~!$IhB`gQ>Fz_L%4U)c z=A{Izj1P=PEAHuG#yAoS z=cLz{?{7T}9h)l(jLaV=gc@eQdELg zSYQBdUMadJgQ>r%BpskLo4vtG;3ox{s=}zO@AlIdJ>?}h7j5&5LD@Hn$_T|bEbE1E zN&JU(Nm!H$ATBAo)q+xIcO;GhMkObiktAORv4U_aV@kkQUC&qXztxG?#704dR|J!!B zFlLeBfQ`XgJouSwB`*4^)jD?3TF%6Ju;FCO;|dtQU>>XS~FiTepj*IAbGwGejnw?o?0cwCE|e4L4!o;4+mFUt$k zSKu8)53;X%tg*6u&0MR1%zQ0q!hhw?F3U%>pMx6fJYD~{&Gwe}&8xD#*eZ&(=m z%mayiig~a6KoTpz8|f$V8ZzI#N7w7ri3c9L1AqfbCFKBgQI0aAcGlIt-C$PZW?9|I zRzFwmijYx&s?zT&%G$T1$e?ms;aF&YPwy}2o1SE;+O30?2ZXw{ zS!{y8FP6ct8hiiraY73 zrVk})r_bWiyTPna{Fu?Isw%WK1&5NWyd7X?Y*~i}rc$cF#nAhJQk-TKj4y@Ok}-9x zZQ{7nJrvX_nYHa5!q=lWp?F1hB(qv&yAFE8At00<}QuG{r_bnTB>0+ZFMQ z=Taw=<*y`vEFL8Bu+~}?nUoMlZ1o@nd#3ND)6C&crR|)1(Z^_G8b1Z~WkRS^-;C*$ zNT2nS#Jo!1+GDN2l2{uh+F3bG4z}8<+kUQ*q;@qYB18@`xnxUhZs0%i*U*J+I%89m z5AI&+0Vp;8w`C#K=SA%r1`6Dg?2E+NEW07!4SPU(4~!;F05v25V#{qmQqGcK zVKb)}(frk9Qxgm}h7g7s87qPbP*TVS#wn;|YsN(mB&*}*rBQkr^S$aJ8Ic^^Y0Wao$*cF{I{eUG2DY0vpH*2NFWaOZDl&~ za2AtR>e~|+Hk^iSoj)y#srd8q?<<;yd)}|Q^1_CDSr&wQj4jqF|SqSMhABq&itYcZZ(wZV|l_T5j3b*&P-{ZJzNC9{w@ zC=3$0@N6O}*r*g}Alg8PEMy1^(;TV-`j?&jR0)1ul)MDg|1I7;Kv8@s>i=9Kg1qk^ z+p32Crx<7C>zYg%iuH*=Uh+T1I3hNJ7^Kwg|7GNn(UmDpq|yEO5};GbO4SNhcB1ER z`6%8Ti+|*wc)o(Im9tq~hAOoF88n^YQkf*qLjMUa7*bWh27IS84a&`u%la8CV?ny* zE%y!`G)he(n<#j~sjOpN?tjhqvmWY<{*!-hjy}l*#ZX{Uwg(DX*tLG;Yt;%DF63_^-l8K@B7<5eQ$IttXZ^d) zwr#%~tOoQ}!E$jVj(Qt;M0My>y4so@Ql9GK`Y>i3*0tm^d`raF}pz5iKLUFzs>E z{|z=m>C*Ky7!=CNx~t8v%J58joo)Vy0(a5l?1e;~%XWiH(Id)dTcG$BXs_uusGXx} z^11|n6^X__UE_|Q#?+jPv2I`8k44;=dmKDNiYnaPfPC zjn-K@nvU#zMEN5elP$`JU+1k*z@R4Cw8yMF%yj>f7CBnuoul#s&Tv~O#^2fbVZowK zJ117GXEgekslW zZM2&>w*$F%1(yePS~Kq$QJ;NvE$p-=Idm62pe`6{=DoI!Esonib=NmgUo*=4mKw<~ z`&K>_CQIN|N{8^}Q%gKGhHYv&Lc4~?AoAKr!VBF&SUchM;n!`|k!v!M-M}h665Tu! zMU-1aTrJSJ)9ZOl4pa?m>yG3&X8%3>RR(sEcC>*mV8ZTl)ySrQIH2K*ZDh2!%HOrXxV_mN+HJLHp?o#Jhz?4xfqcYp;QyYXx^JnVd3kEB|ituz)fXF><`y z480F7T1M`%1Kq z?w_Ch-qlcXvi7hnZfUVKt7ch$MK}P)4eNan*iGsM7otv$s?I7i&;jMD*Q|gnZ{%5z zC^#GfE*$l`#Ct*`4XLh#k0zrysFX`fSt`~)5Iz+Xg|1MK z6+c0dBVaQ>u;wX042WaEsKv7iqmJebmYU#?AdL45CLB%o{PwBKvP)z0MwyOsuR)im05IT(#c;SvQpC(e0T%>4+{l{E`e&AM z$DUn1{ytkLXE82ONHTCnZklt2uVwj(UM7d~)MUNfbkJQ|7l=-j{?PDHY8`K_{P;y) z*zk1E?l3r7D3%-_#o~C}I!8Pbn}o3P{&0DB;4pPg2IhvWaTDM>hAZ-5=*R@zb|devuQHA7Bb{<(v0hzktp7H zE^*s`V^Vju()yI7xGSmFY>TDmAuIKBpDP(MF@=Z^Po?OI{|Wp{XAmR-=iF`LkyuDocrXgL0Bm{ zAtorTNRdkbW>k)3Vsxo;QPI)+>~|1?CupZqN0JN69YeiPh^k=g-d_p_Z=|OA`N=GR z-ueCB?cvbb_&t)}07I?|e{WX0Bq1-TqP$u(4-?SO-)O1tZN!Cw_6?@0qmklNNagoU zW_=kWmiEQD%TB{>{-Ke{oxGO@{dzv_EK3TR;@klJA+?8dSOMt+ZiWOaJ_%&m23Pqw z?wuDYbuMpepr7B5U#fH_LJB*yJ=#MdJ~l!{s`&nSmyRV1YaJ>#2RYS_YGW5+FlGYR z(=B(7{hT&8j92re9oS&9+*G_yq+Fk4WeJn_XISVqgRPjE8Z3}*C)oxa>QsWbN`Tan zUM85-R)#-=FVQt7`tb!Q**YTlEB>FRLK6@c?I{|K3g@#gY6LV1R*VPV&Xzx_)o=W2 z{vX6<9~1R1B^)Fg0ZsBx%36w(QVAC5xjW9z9I;q2;%T#+foMo?Rl#lQ ztYDLGYe}h3T-Do9(*NuHN-4ho_IPQz-ez?ZJQe?^75#OaVt+E(a=SdDIIVasg%a|Y zEaUp-crKk#YtKXQ{z4&;MmtIQT6`1I^0E7p?yQl(RvjjPbEo>nS>RZ1Q_;K8j}wm2g;L744Wx)lKlH=Z%^tWa*9Q8=D2#+r(iu15__Xm z>CtFI-MQTZvy^qVFQ=`_Sa%!O$kc?&kqkZ^R$RG@zixJ?L}|NU?P(b+(L|+NgyLYPRIqEc0VR> zWKh1?Rb2zs9#AN=I^cRoTZ}RVJv>ioL^)Eg9*9+092gqv-U_Kl`XXnB$?1~dnTy{z z7ZiWx1_zoq5&YHN8jE`O@XE{Q%WP1Cm#DsQS&3Rn=~u#-pi^vjhIs0>AonJ8XotC# zZ+=&d{l>l+KHF&&7-Ac1RASOG0;cR+_NCQFl=(+Dh`d?A>4!#$XuH3I^9Gidgb8XK zb7Mj*#hC`w`6s^^zk8=_NyZc8j(+pm3fh|Yrmn;sFqG)vAwOd>*L7Sz@Dp@L(f{%O zeJy|R#%or2k+9*6ywKMec(eQoKc!BEggF6U=g~fCZMEp@aIJKl=3#CK&zTm%n9gZT zt4dm7wtXyhM*R3?&tMT8MvPZzxba}1I|slk)*KQ-bmofF_ag|IZ7j4v+1rhF<7oT$Y!19 zc^)((Z<1;Af$lILjcjS0p)o4x@%swB7}SLw%2c$>rkYVm*t7Du)ZmoZu9TRc?NB2$ z4B-WiPv%`dELxWj%2xM*4yKwp@OkGxcDm>Q&GjxK(&{a4$_*!@?okEp^(58)^3No>$lCRnF>+ zR+Sy_M|0?W+;pauEI|^58zFz6L?&~9-g&H)pn1a6LAt6&eY~7hl2Tr;3eJ32-W*lA;D^k4akYQgv!}uFpD?#S2Y@H zqQGL5MP}7u1y-NW7W#2JXJ+Vu__8J11P$bHj0h%4;C}sy?pS#GKEa~iG~x_3VmNsU zw4a$zT&Yat7j>`GN}*JHQ(Y*^4AM4=dkU)y99}E=`g^smV7+eM=A=NZqblO&VAR z6DtfPq}(mnrwq@LMz&~{Sme`_k#;=Ya!dm*4(j{3yA=7(5GfJM_YNaehF^@qA*fyOr|pdXP|NqaO0v1{E1r(XOOy__{2w4i_U8 z`1)+Lor`AfsFA7=7XXhma^{sJv6C|H19VX+5}f>$D)ntCd7A~|{KTBBit$WX7;AI{ zQ)V4uzkh?i4U5WcBO+6l;dEr|o%S-0EPTT80vB7sLe`+NyX(E`KMzlfp1g<;s(2Ud zKq10BA#N-edAIHFP{Q~IY(!tDw2lSQpds;K@b-s%x&HMh2$Kiab-(kOaW4WA zCiZ^{mr1Mr`=}61X(Zq+jNh9$6$jS1>c3C_d$mjt3JPiv>VJ^d@5p5GP5<2)qAnmk5)VRwXKrIqFSgj*HIvXNU93`5E3m-2f}B_7>|% z^g4pyA7`G$f(yk1j+Fd8e$1E3S#DyvTTSGyc}o@<3y@!KMDin<$uHU%7Dk9BQ+(^@ z72h2b49EDDTfRN@5tvu>lzRO5SU^JU{MY?te>L&k4AEg}|I|SNPU3(#ed{v61S_5w zg_Qg3W=!m_Pg@6k^ zPH8{vM!4hM?*xVR`O9-wI@G|!{ul-PFynp#?+VdAMey~0fg|!`wVI(eaW+}#pP=kt zF;(P#yPjWjt0>*8>DDQIE;4oYTpqx_lnPrRE2_{;5llxpR#}2J(9I8Ol-6P$esf_k zIs!)F7%1|k1#cCwY4Rb>UO3S$r5z@jZed6kk$Z(Fy2Y@{*QD_!H?TIi89EN9;2e!S zDQI~2yMp`@6y8FcYIP*)i0#ysos`wYF&e|B2Z-5$S7oftSq%ov;*d*xtpE{V6~76Q z6P$2zXmeF#yG9X!w>A`78iiu(?tP`p>^(Mmy6!-fg;;I(2}R!7yQ9`2Czg?02up!||6}m6(Pu{?v}nqV+T5DWkey8*Q!idj^}o!v9$Z z5cN0_4zs&Xj3_&ow*Koh!VNA_ny(6?L81-Ej^;1v>Y^yJS_5#gvb2M}lK>u688m6?v(dV4#fzj9a{_GR#slE3l4_Bu*Yq!R#=}8)tgG zNx$e03pKMG&ZVM6|FzbD826UrefiX_W?co323`Vv0z=!gBCT+5zv=u!A=G()&AvaQ zwpb?3W~*N|JA$9}kWEAK3ocn{f-cKG*^R&U=G^0;Env&J!R1$J0sgz2pnRx}JuYzN zrq7d~XaLDtERar1Nvd!Z+tq6>eZ4-stXhV%sMh{#tv4M6EpQc(`V&Gu>8| z-7=naoQlsleUiKcg^R20^l&52`9aB-j{eP=No_GkH1fNm8^li{z# zT&oCkCkZQZBKdl=-~q|Q6yIWuMArOqZ?eP>s~@3PtC%`-S}xAH*rFQexa##71*ph^O@>i|BGeNRd{Vo@tKp--toB zZR8xGzD}z7z8@xwY@s1FE>s?Y`iNINOg>Jmxc{wn1vPpQB0jhit{6r8av9>I<i{Eq$m)C;k)*#C z3Osca6H+tN}^wr7QONZ%F3(c zLZ{cOhh?UW(>ln<^)}M>QsEBN6V(!0g6($WnlYcV8($T$*^$w!TvcMfqIZ9Y*6pRU z>zqe0H3GRS$u)f6opQiv0PH38gRw`tQ&H`$6CIGQyusb>*N~Ax;vS1 z9=H`WvJEbuUp2zaxk{w>_d;Amvf;|qCp?ZNw^w;r+>`i*%;-g#(4 z&KU!MBBW%MJ(KYU@_IQzKn1Q)AOZ z5H?2>d|g+`|1R=W(i6J%bOSqZ z0U2ZybMH}n)HV+JryH|d@GIOlCWxA>^Lb4Dm#U|Fc1v5gBP!$gVBMs@*qpOC0ghsX_A)MLSLE7eC(&g9Fok0Y%U zhOEE=wZmh!V!S1X0uJ{?h2>wbz_=sNVslMv8p-G(FTGB`f-$NsOCm{{fNFXd7<{`U z9bgWv>*<(YTDvR zakS(ce&Z=!X_>|^T3QO1;qGCH7c{)=j8CU$N+|FR$W~FsMb@nK1Ods=u~>(ls0IHHtNN^M5TfdBq4A8 zZpjQp`jRwEzRvHxnJwk4Exf?zw}u@_EFjJHk?EeO+&+XVaEn~Z8U2%u7UYXJjbMm; z3VW*vi|z=UxR3H`H}zN(OI_3$=$X_X#yLU1mp(e(di&cYeuRVl~I^!(6-1hLVw(* zC$L5$(qqN9L|Bv+)FCw@kRu<|ds-B|eQ;!_iyS^-Cqt5FZ6oV%G1|8?`w7uAsnF)c zyG#8>Bv|6Bh9nn1;hO^a>pB1%K+a%muHj|eiW#U42Z7-JGWgMPPtNLiA+^;X_8!L1i?8;3?#lQmu``Zx7p|{2rb;gqaCGQz@ zsLG+J&u}R!wffwuDJkcCsF&GXp{y90B<2BlsEW_hGM8oGL>!CYIZcC;j7*Vd$mjA2 zh7u1;XE3OCbURI`&<hiWK4po<5N#2Zg^oMl%!LIYpXC}Yl zxg1G33DA>Zbh&s6P*uun8^M_5!_e@zSb+el&d4MjVZ|1nX3a!;QzId7cgAn!Nm6@CK$U5WpPWI%NmtO>!U^=)%SsRli-nHW## zIG_|#=kme0XK*t^Rp;nyh2 zWMl?(ARFCuD&c8!aS1iB!mzp$x}r}o*V1-^d)y@3Q|bj`7^|5N6}+SMN?6*FOmbA|^{hc-fy5{o zZ6NO~f42HCZxf$T_<-;qgQjV6c8Crn>>6&3kfjExoTR3QjDL}2s1CX7u%@PeGjO