From 85f45acbf2b274416dcc07739f6fb469527a27fc Mon Sep 17 00:00:00 2001 From: void Date: Mon, 3 Jul 2023 16:11:27 +0800 Subject: [PATCH] add doc --- compile/BTSIDAC.abi | 1 + compile/BTSIDAC.bin | 1 + compile/ProxyAdmin.abi | 1 + compile/ProxyAdmin.bin | 1 + compile/TransparentUpgradeableProxy.abi | 1 + compile/TransparentUpgradeableProxy.bin | 1 + ...351\223\276\357\274\211\342\205\242-2.pdf" | Bin 0 -> 238751 bytes java/BTSIDAC.java | 1055 +++++++++++++++++ java/ProxyAdmin.java | 309 +++++ java/TransparentUpgradeableProxy.java | 307 +++++ 10 files changed, 1677 insertions(+) create mode 100644 compile/BTSIDAC.abi create mode 100644 compile/BTSIDAC.bin create mode 100644 compile/ProxyAdmin.abi create mode 100644 compile/ProxyAdmin.bin create mode 100644 compile/TransparentUpgradeableProxy.abi create mode 100644 compile/TransparentUpgradeableProxy.bin create mode 100644 "doc/BTSI\350\234\200\344\277\241\351\223\276\347\273\237\344\270\200\347\275\221\345\205\263\357\274\210\347\254\254\344\270\211\346\226\271\351\223\276\357\274\211\342\205\242-2.pdf" create mode 100644 java/BTSIDAC.java create mode 100644 java/ProxyAdmin.java create mode 100644 java/TransparentUpgradeableProxy.java diff --git a/compile/BTSIDAC.abi b/compile/BTSIDAC.abi new file mode 100644 index 0000000..7fd214c --- /dev/null +++ b/compile/BTSIDAC.abi @@ -0,0 +1 @@ +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"isApproval","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"creator","type":"address"},{"indexed":true,"internalType":"uint256","name":"categoryID","type":"uint256"},{"indexed":false,"internalType":"string","name":"categoryName","type":"string"},{"indexed":false,"internalType":"string","name":"metadata","type":"string"}],"name":"CreateCategory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"categoryID","type":"uint256"}],"name":"FreezeCategory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"FreezeDAC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"categoryID","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"DACID","type":"uint256"},{"indexed":false,"internalType":"string","name":"extData","type":"string"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"DACID","type":"uint256"},{"indexed":false,"internalType":"string","name":"extData","type":"string"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"categoryID","type":"uint256"}],"name":"UnfreezeCategory","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"UnfreezeDAC","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"categoryName","type":"string"},{"internalType":"string","name":"metadata","type":"string"}],"name":"createCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryID","type":"uint256"}],"name":"freezeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"DACIDs","type":"uint256[]"}],"name":"freezeDAC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getDACByIndex","outputs":[{"internalType":"uint256","name":"DACID","type":"uint256"},{"internalType":"uint256","name":"categoryID","type":"uint256"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryID","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"string","name":"metadata","type":"string"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryID","type":"uint256"}],"name":"queryCategory","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"categoryName","type":"string"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"DACID","type":"uint256"}],"name":"queryDAC","outputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"categoryID","type":"uint256"},{"internalType":"uint256","name":"status","type":"uint256"},{"internalType":"string","name":"metadata","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"isApproval","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryID","type":"uint256"}],"name":"totalSupplyOfCategory","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"DACID","type":"uint256"},{"internalType":"string","name":"extData","type":"string"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"DACIDs","type":"uint256[]"},{"internalType":"string","name":"extData","type":"string"}],"name":"transferFromBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"categoryID","type":"uint256"}],"name":"unfreezeCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"DACIDs","type":"uint256[]"}],"name":"unfreezeDAC","outputs":[],"stateMutability":"nonpayable","type":"function"}] \ No newline at end of file diff --git a/compile/BTSIDAC.bin b/compile/BTSIDAC.bin new file mode 100644 index 0000000..dea7f94 --- /dev/null +++ b/compile/BTSIDAC.bin @@ -0,0 +1 @@ +608060405234801561001057600080fd5b50612a40806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80635089e2c8116100c3578063ca97c9b61161007c578063ca97c9b6146102f3578063cc8be70e14610316578063d86e29e214610329578063deca7fb714610331578063ea605f3d14610355578063ffd89b6f1461035d57600080fd5b80635089e2c814610259578063918268151461027e57806392ec0cdd146102915780639b08e7f8146102a45780639cb97a52146102b7578063b61b2b39146102e057600080fd5b80632ffdc5f8116101155780632ffdc5f8146101c7578063391edc16146101da5780633b3987fe146101ed5780633e5a304c14610200578063441f819c146102235780634c00105f1461023657600080fd5b80630256e2781461015257806304ddbcf21461016957806316cad12a1461017e5780631f2d486014610191578063286806cc146101a4575b600080fd5b6066545b6040519081526020015b60405180910390f35b61017c61017736600461229f565b610370565b005b61017c61018c3660046122fd565b610405565b61017c61019f36600461231f565b6104f2565b6101b76101b2366004612349565b610653565b60405161016094939291906123af565b61017c6101d53660046123e6565b610719565b61017c6101e8366004612349565b6107af565b61017c6101fb36600461229f565b61088b565b61015661020e366004612349565b60009081526069602052604090206005015490565b61017c610231366004612464565b610912565b6102496102443660046124d0565b610a35565b6040519015158152602001610160565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610160565b61017c61028c366004612503565b610a65565b61017c61029f366004612349565b610b8d565b61017c6102b2366004612594565b610c72565b6102666102c5366004612349565b6000908152606c60205260409020546001600160a01b031690565b61017c6102ee366004612349565b610cfd565b61030661030136600461231f565b610de0565b6040516101609493929190612603565b6101566103243660046122fd565b610f6e565b61017c610f8c565b61034461033f366004612349565b611001565b604051610160959493929190612628565b61017c611171565b61017c61036b366004612675565b6111f7565b6033546001600160a01b031633146103a457604051636381e58960e11b815260040161039b906126c0565b60405180910390fd5b806103c257604051636381e58960e11b815260040161039b906126f5565b60005b81811015610400576103ee8383838181106103e2576103e2612722565b905060200201356113c6565b806103f88161274e565b9150506103c5565b505050565b6033546001600160a01b0316331461043057604051636381e58960e11b815260040161039b906126c0565b6001600160a01b03811661049657604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039b565b6033546040516001600160a01b038084169216907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152606a60205260409020600101546001600160a01b0316331461055c57604051636381e58960e11b815260206004820152601b60248201527f4441433a6f6e6c7920444143206f776e65722063616e2063616c6c0000000000604482015260640161039b565b6000818152606a60205260409020600101546001600160a01b038381169116141561059a57604051636381e58960e11b815260040161039b90612769565b6000818152606a6020526040902060030154156105fa57604051636381e58960e11b815260206004820152601f60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e20617070726f766500604482015260640161039b565b6000818152606c602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839233917fd1e45707b3f71c77903b61f04c900f772db264b9bf618f1cc3308fb516eb61699190a45050565b6000818152606a60205260409020600181015460028201546003830154600490930180546001600160a01b0390931693919260609190610692906127ae565b80601f01602080910402602001604051908101604052809291908181526020018280546106be906127ae565b801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b505050505090509193509193565b336001600160a01b038316141561074357604051636381e58960e11b815260040161039b90612769565b336000818152606d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f34cc9ec6b85c217ac6bd5f7b86411e4e4e40d816d5d17725c4dec1f0901d9074910160405180910390a35050565b6107b88161142a565b6107c2338261147c565b6107df57604051636381e58960e11b815260040161039b906127e9565b6000818152606a60205260409020600301541561083f57604051636381e58960e11b815260206004820152601c60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e206275726e00000000604482015260640161039b565b6000818152606a6020908152604080832060020154835260699091529020600301541561087f57604051636381e58960e11b815260040161039b90612836565b610888816114fa565b50565b6033546001600160a01b031633146108b657604051636381e58960e11b815260040161039b906126c0565b806108d457604051636381e58960e11b815260040161039b906126f5565b60005b81811015610400576109008383838181106108f4576108f4612722565b90506020020135611616565b8061090a8161274e565b9150506108d7565b6109646040518060200160405280600081525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116789050565b156109bc57604051636381e58960e11b815260206004820152602160248201527f4441433a63617465676f72794e616d652063616e206e6f7420626520656d70746044820152607960f81b606482015260840161039b565b610a2f84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815292508691508590819084018382808284376000920191909152506116db92505050565b50505050565b6001600160a01b038083166000908152606d602090815260408083209385168352929052205460ff165b92915050565b82610a8357604051636381e58960e11b815260040161039b906126f5565b610ad8868686866000818110610a9b57610a9b612722565b6020029190910135905060005b6040519080825280601f01601f191660200182016040528015610ad2576020820181803683370190505b50611810565b610b4257604051636381e58960e11b815260206004820152603460248201527f4441433a63616e74206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b60005b83811015610b8457610b728787878785818110610b6457610b64612722565b9050602002013586866118bf565b80610b7c8161274e565b915050610b45565b50505050505050565b6033546001600160a01b03163314610bb857604051636381e58960e11b815260040161039b906126c0565b610bc181611ac8565b600160008281526069602052604090206003015414610c3157604051636381e58960e11b815260206004820152602560248201527f4441433a6f6e6c7920667265657a652063617465676f72792063616e20756e666044820152647265657a6560d81b606482015260840161039b565b60008181526069602052604080822060030182905551829133917f8171c3e7cd97b6ad5e189e7564be1f3291b03d6802b0eac2293636e8277f0e319190a350565b610c7f8585856000610aa8565b610ce957604051636381e58960e11b815260206004820152603460248201527f4441433a2063616e206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b610cf685858585856118bf565b5050505050565b6033546001600160a01b03163314610d2857604051636381e58960e11b815260040161039b906126c0565b610d3181611ac8565b60008181526069602052604090206003015415610d9d57604051636381e58960e11b815260206004820152602360248201527f4441433a6f6e6c79206e6f726d616c2063617465676f72792063616e20667265604482015262657a6560e81b606482015260840161039b565b600081815260696020526040808220600160039091015551829133917f6790b7a7222403863d6359169e1769717ae3d64801f03a6b9433bcea146d1c839190a350565b6000806000606060008511610e3857604051636381e58960e11b815260206004820152601d60248201527f4441433a696e646578206d7573742067726561746572207468616e2030000000604482015260640161039b565b610e64610e46600187612877565b6001600160a01b0388166000908152606b6020526040902090611b24565b935060008411610eb757604051636381e58960e11b815260206004820152601860248201527f4441433a6e6f20444143206174207468697320696e6465780000000000000000604482015260640161039b565b6000848152606a602052604090206002810154600382015460049092018054919550919350610ee5906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610f11906127ae565b8015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905092959194509250565b6001600160a01b0381166000908152606b6020526040812054610a5f565b6033546001600160a01b03163314610fb757604051636381e58960e11b815260040161039b906126c0565b6033546040516000916001600160a01b0316907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908390a3603380546001600160a01b0319169055565b600081815260696020526040812080546001909101805491926060929091829184919061102d906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611059906127ae565b80156110a65780601f1061107b576101008083540402835291602001916110a6565b820191906000526020600020905b81548152906001019060200180831161108957829003601f168201915b505050600089815260696020526040902060028101546003820154600490920180549599506001600160a01b039091169750909550926110e8925090506127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611114906127ae565b80156111615780601f1061113657610100808354040283529160200191611161565b820191906000526020600020905b81548152906001019060200180831161114457829003601f168201915b5050505050905091939590929450565b600054610100900460ff16806111865750303b155b80611194575060005460ff16155b6111b157604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff161580156111d3576000805461ffff19166101011790555b6111db611bab565b6111e3611c1d565b8015610888576000805461ff001916905550565b61120085611ac8565b6000858152606960205260409020600201546001600160a01b0316331461126a57604051636381e58960e11b815260206004820181905260248201527f4441433a6f6e6c792063617465676f7279206f776e65722063616e206d696e74604482015260640161039b565b600085815260696020526040902060030154156112de57604051636381e58960e11b815260206004820152602b60248201527f4441433a6f6e6c792063617465676f727920737461747573206973206e6f726d60448201526a185b0818d85b881b5a5b9d60aa1b606482015260840161039b565b6000841161133e57604051636381e58960e11b815260206004820152602660248201527f4441433a6d696e7420616d6f756e74206d7573742067726561746572207468616044820152656e207a65726f60d01b606482015260840161039b565b6001600160a01b03831661139557604051636381e58960e11b815260206004820181905260248201527f4441433a63616e206e6f74206d696e7420746f207a65726f2061646472657373604482015260640161039b565b60005b848110156113be576113ac84878585611d5c565b806113b68161274e565b915050611398565b505050505050565b6113cf8161142a565b60016000828152606a60205260409020600301541415610888576000818152606a602052604080822060030182905551829133917f7fc84bbf5f6aa9afb4daed41edce6598ddc95f8dd2c17399ab3bf775c637d89d9190a350565b6000818152606a602052604090205461088857604051636381e58960e11b8152602060048201526013602482015272111050ce911050d251081b9bdd08195e1a5cdd606a1b604482015260640161039b565b6000818152606a60205260408120600101546001600160a01b039081169084168114806114ce57506001600160a01b038082166000908152606d602090815260408083209388168352929052205460ff165b806114f257506000838152606c60205260409020546001600160a01b038581169116145b949350505050565b6000818152606a6020908152604080832060010154606c835281842080546001600160a01b03191690556001600160a01b0316808452606b90925282209091906115449084611f4a565b506001600160a01b0381166000908152606b60205260409020611567908461203d565b506000838152606a602090815260408083206001810180546001600160a01b0319166001600160a01b03878116918217909255600260039093019290925582518481529384019490945286939092908616917f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a705910160405180910390a4604051839033907fc5cfb20a182ba4b800686ac3d941ef8a395ec1bbf151ed8db9b9daec7a67f9e790600090a3505050565b61161f8161142a565b6000818152606a6020526040902060030154610888576000818152606a6020526040808220600160039091015551829133917f97b179d991379a1ceca6ea8271f229aaa1ee8dd74df21f9236c5379df138f42e9190a350565b6000808360405160200161168c91906128dc565b6040516020818303038152906040528051906020012090506000836040516020016116b791906128dc565b60408051601f19818403018152919052805160209091012091909114949350505050565b6067546040805160c081018252828152602080820186815233838501526000606084018190526080840187905260a08401819052858152606983529390932082518155925180519293849390926117399260018501929101906121ba565b5060408201516002820180546001600160a01b0319166001600160a01b0390921691909117905560608201516003820155608082015180516117859160048401916020909101906121ba565b5060a082015181600501559050506001606560008282546117a691906128ef565b925050819055506001606760008282546117c091906128ef565b90915550829050336001600160a01b03167f9fcb3fde540f1319bf07575fe9913e34b82a0ed274f00ffa218e9bb779b68ed28686604051611802929190612907565b60405180910390a350505050565b60006001600160a01b0384163b611829575060016114f2565b604051637e8c1fc960e11b81526000906001600160a01b0386169063fd183f929061185e908990899089908990600401612935565b6020604051808303816000875af115801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a19190612968565b6001600160e01b031916637e8c1fc960e11b14915050949350505050565b6118c9338461147c565b6118e657604051636381e58960e11b815260040161039b906127e9565b6001600160a01b03841661194e57604051636381e58960e11b815260206004820152602860248201527f4441433a63616e206e6f74207472616e7366657220746f20746865207a65726f604482015267206164647265737360c01b606482015260840161039b565b6000838152606a6020526040812060020154906000828152606960205260409020600301541461199157604051636381e58960e11b815260040161039b90612836565b6000848152606a6020526040902060030154156119f157604051636381e58960e11b815260206004820152601c60248201527f4441433a44414320737461747573206973206e6f74206e6f726d616c00000000604482015260640161039b565b6000848152606c6020908152604080832080546001600160a01b03191690556001600160a01b0389168352606b9091529020611a2d9085611f4a565b506001600160a01b0385166000908152606b60205260409020611a50908561203d565b506000848152606a60205260409081902060010180546001600160a01b0319166001600160a01b0388811691821790925591518692918916907f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a70590611ab890889088906129bb565b60405180910390a4505050505050565b60008181526069602052604090205461088857604051636381e58960e11b815260206004820152601b60248201527f4441433a63617465676f727920646f6573206e6f742065786973740000000000604482015260640161039b565b81546000908210611b8357604051636381e58960e11b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161039b565b826000018281548110611b9857611b98612722565b9060005260206000200154905092915050565b600054610100900460ff1680611bc05750303b155b80611bce575060005460ff16155b611beb57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015611c0d576000805461ffff19166101011790555b611c1561208c565b6111e3612101565b600054610100900460ff1680611c325750303b155b80611c40575060005460ff16155b611c5d57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015611c7f576000805461ffff19166101011790555b60675415611ce157604051636381e58960e11b815260206004820152602860248201527f4441433a5f63757272656e7443617465676f72794944206e6f7420657175616c60448201526720746f207a65726f60c01b606482015260840161039b565b60685415611d3e57604051636381e58960e11b815260206004820152602360248201527f4441433a5f63757272656e744441434944206e6f7420657175616c20746f207a60448201526265726f60e81b606482015260840161039b565b600160678190556068558015610888576000805461ff001916905550565b6068546040805160a0810182528281526001600160a01b03871660208201529081018590526000906060810182815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152606a602090815260409182902084518155848201516001820180546001600160a01b0319166001600160a01b0390921691909117905591840151600283015560608401516003830155608084015180519495508594929350611e3492600485019291909101906121ba565b50905050600160666000828254611e4b91906128ef565b92505081905550600160686000828254611e6591906128ef565b90915550506000858152606960205260408120600501805460019290611e8c9084906128ef565b90915550506001600160a01b0386166000908152606b60205260409020611eb3908361203d565b508185336001600160a01b03167fbaa9ce3c5df106e294a8517fe62aa9525a79ef0db04efe8d2758f89cd585f6d7898888604051611ef3939291906129cf565b60405180910390a481866001600160a01b031660006001600160a01b03167f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a705604051611ab890602080825260009082015260400190565b60008181526001830160205260408120548015612033576000611f6e600183612877565b8554909150600090611f8290600190612877565b90506000866000018281548110611f9b57611f9b612722565b9060005260206000200154905080876000018481548110611fbe57611fbe612722565b600091825260209091200155611fd58360016128ef565b60008281526001890160205260409020558654879080611ff757611ff76129f4565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610a5f565b6000915050610a5f565b600081815260018301602052604081205461208457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a5f565b506000610a5f565b600054610100900460ff16806120a15750303b155b806120af575060005460ff16155b6120cc57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff161580156111e3576000805461ffff19166101011790558015610888576000805461ff001916905550565b600054610100900460ff16806121165750303b155b80612124575060005460ff16155b61214157604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015612163576000805461ffff19166101011790555b603380546001600160a01b0319163390811790915560405181906000907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908290a3508015610888576000805461ff001916905550565b8280546121c6906127ae565b90600052602060002090601f0160209004810192826121e8576000855561222e565b82601f1061220157805160ff191683800117855561222e565b8280016001018555821561222e579182015b8281111561222e578251825591602001919060010190612213565b5061223a92915061223e565b5090565b5b8082111561223a576000815560010161223f565b60008083601f84011261226557600080fd5b50813567ffffffffffffffff81111561227d57600080fd5b6020830191508360208260051b850101111561229857600080fd5b9250929050565b600080602083850312156122b257600080fd5b823567ffffffffffffffff8111156122c957600080fd5b6122d585828601612253565b90969095509350505050565b80356001600160a01b03811681146122f857600080fd5b919050565b60006020828403121561230f57600080fd5b612318826122e1565b9392505050565b6000806040838503121561233257600080fd5b61233b836122e1565b946020939093013593505050565b60006020828403121561235b57600080fd5b5035919050565b6000815180845260005b818110156123885760208185018101518683018201520161236c565b8181111561239a576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b03851681528360208201528260408201526080606082015260006123dc6080830184612362565b9695505050505050565b600080604083850312156123f957600080fd5b612402836122e1565b91506020830135801515811461241757600080fd5b809150509250929050565b60008083601f84011261243457600080fd5b50813567ffffffffffffffff81111561244c57600080fd5b60208301915083602082850101111561229857600080fd5b6000806000806040858703121561247a57600080fd5b843567ffffffffffffffff8082111561249257600080fd5b61249e88838901612422565b909650945060208701359150808211156124b757600080fd5b506124c487828801612422565b95989497509550505050565b600080604083850312156124e357600080fd5b6124ec836122e1565b91506124fa602084016122e1565b90509250929050565b6000806000806000806080878903121561251c57600080fd5b612525876122e1565b9550612533602088016122e1565b9450604087013567ffffffffffffffff8082111561255057600080fd5b61255c8a838b01612253565b9096509450606089013591508082111561257557600080fd5b5061258289828a01612422565b979a9699509497509295939492505050565b6000806000806000608086880312156125ac57600080fd5b6125b5866122e1565b94506125c3602087016122e1565b935060408601359250606086013567ffffffffffffffff8111156125e657600080fd5b6125f288828901612422565b969995985093965092949392505050565b8481528360208201528260408201526080606082015260006123dc6080830184612362565b85815260a06020820152600061264160a0830187612362565b6001600160a01b03861660408401526060830185905282810360808401526126698185612362565b98975050505050505050565b60008060008060006080868803121561268d57600080fd5b85359450602086013593506126a4604087016122e1565b9250606086013567ffffffffffffffff8111156125e657600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152724441433a44414349447320697320656d70747960681b604082015260600190565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b600060001982141561276257612762612738565b5060010190565b60208082526025908201527f4441433a63616e206e6f7420617070726f76616c20746f2063757272656e742060408201526437bbb732b960d91b606082015260800190565b600181811c908216806127c257607f821691505b602082108114156127e35763b95aa35560e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4441433a63616c6c6572206973206e6f742074686520746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526021908201527f4441433a63617465676f727920737461747573206973206e6f74206e6f726d616040820152601b60fa1b606082015260800190565b60008282101561288957612889612738565b500390565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020815260006123186020830184612362565b6000821982111561290257612902612738565b500190565b60408152600061291a6040830185612362565b828103602084015261292c8185612362565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123dc90830184612362565b60006020828403121561297a57600080fd5b81516001600160e01b03198116811461231857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006114f2602083018486612992565b6001600160a01b038416815260406020820181905260009061292c9083018486612992565b63b95aa35560e01b600052603160045260246000fdfea2646970667358221220bc9fcd2fdd860b5d14dc32152b40a91223bbfe9d4fbe54a975a889177bacdc4f64736f6c634300080b0033 \ No newline at end of file diff --git a/compile/ProxyAdmin.abi b/compile/ProxyAdmin.abi new file mode 100644 index 0000000..6ee221f --- /dev/null +++ b/compile/ProxyAdmin.abi @@ -0,0 +1 @@ +[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeProxyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"}],"name":"getProxyImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"}],"name":"upgrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TransparentUpgradeableProxy","name":"proxy","type":"address"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeAndCall","outputs":[],"stateMutability":"payable","type":"function"}] \ No newline at end of file diff --git a/compile/ProxyAdmin.bin b/compile/ProxyAdmin.bin new file mode 100644 index 0000000..e37a125 --- /dev/null +++ b/compile/ProxyAdmin.bin @@ -0,0 +1 @@ +608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908290a350610895806100616000396000f3fe60806040526004361061007b5760003560e01c8063d366253d1161004e578063d366253d14610118578063d42d0f4f14610138578063d86e29e214610158578063db1fc60c1461016d57600080fd5b806316cad12a146100805780635089e2c8146100a25780635defeee3146100d85780636c57245d146100f8575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105f7565b610180565b005b3480156100ae57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b3480156100e457600080fd5b506100bc6100f33660046105f7565b610275565b34801561010457600080fd5b506100bc6101133660046105f7565b61032d565b34801561012457600080fd5b506100a061013336600461061b565b61036b565b34801561014457600080fd5b506100a061015336600461061b565b6103f6565b34801561016457600080fd5b506100a061044f565b6100a061017b36600461066a565b6104c4565b6000546001600160a01b031633146101b457604051636381e58960e11b81526004016101ab90610740565b60405180910390fd5b6001600160a01b03811661021a57604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ab565b600080546040516001600160a01b03808516939216917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60007fd5696bb175b326f8ce5dbe1ba5f41da312aed21a7f90cc42d40b8a20f2004c7181806001600160a01b0385166102b463d5696bb160e01b610556565b6040516102c191906107a5565b600060405180830381855afa9150503d80600081146102fc576040519150601f19603f3d011682016040523d82523d6000602084013e610301565b606091505b50915091508161031057600080fd5b8080602001905181019061032491906107c1565b95945050505050565b60007ff15228001de5006b7e364229f9fb3c2f54a1e8f2aa8887d686ce09f2f04fc23181806001600160a01b0385166102b4621e2a4560eb1b610556565b6000546001600160a01b0316331461039657604051636381e58960e11b81526004016101ab90610740565b604051633a2a322560e21b81526001600160a01b03828116600483015283169063e8a8c894906024015b600060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461042157604051636381e58960e11b81526004016101ab90610740565b60405163333b0add60e11b81526001600160a01b03828116600483015283169063667615ba906024016103c0565b6000546001600160a01b0316331461047a57604051636381e58960e11b81526004016101ab90610740565b600080546040516001600160a01b03909116907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146104ef57604051636381e58960e11b81526004016101ab90610740565b60405163207fa8b960e01b81526001600160a01b0384169063207fa8b990349061051f90869086906004016107de565b6000604051808303818588803b15801561053857600080fd5b505af115801561054c573d6000803e3d6000fd5b5050505050505050565b6040805160048082528183019092526060916000919060208201818036833701905050905060005b60048110156105d85783816004811061059957610599610820565b1a60f81b8282815181106105af576105af610820565b60200101906001600160f81b031916908160001a905350806105d081610836565b91505061057e565b5092915050565b6001600160a01b03811681146105f457600080fd5b50565b60006020828403121561060957600080fd5b8135610614816105df565b9392505050565b6000806040838503121561062e57600080fd5b8235610639816105df565b91506020830135610649816105df565b809150509250929050565b63b95aa35560e01b600052604160045260246000fd5b60008060006060848603121561067f57600080fd5b833561068a816105df565b9250602084013561069a816105df565b9150604084013567ffffffffffffffff808211156106b757600080fd5b818601915086601f8301126106cb57600080fd5b8135818111156106dd576106dd610654565b604051601f8201601f19908116603f0116810190838211818310171561070557610705610654565b8160405282815289602084870101111561071e57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60005b83811015610790578181015183820152602001610778565b8381111561079f576000848401525b50505050565b600082516107b7818460208701610775565b9190910192915050565b6000602082840312156107d357600080fd5b8151610614816105df565b60018060a01b0383168152604060208201526000825180604084015261080b816060850160208701610775565b601f01601f1916919091016060019392505050565b63b95aa35560e01b600052603260045260246000fd5b60006000198214156108585763b95aa35560e01b600052601160045260246000fd5b506001019056fea26469706673582212208150299ee9d681a151e754e5c2cb5d848c173386a74593edd16e82b8222bcb0e64736f6c634300080b0033 \ No newline at end of file diff --git a/compile/TransparentUpgradeableProxy.abi b/compile/TransparentUpgradeableProxy.abi new file mode 100644 index 0000000..2bdfe2e --- /dev/null +++ b/compile/TransparentUpgradeableProxy.abi @@ -0,0 +1 @@ +[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"_adm","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}] \ No newline at end of file diff --git a/compile/TransparentUpgradeableProxy.bin b/compile/TransparentUpgradeableProxy.bin new file mode 100644 index 0000000..02db789 --- /dev/null +++ b/compile/TransparentUpgradeableProxy.bin @@ -0,0 +1 @@ +608060405260405162000a0838038062000a08833981016040819052620000269162000220565b82816200003382620000c1565b805115620000aa576000826001600160a01b03168260405162000057919062000300565b600060405180830381855af49150503d806000811462000094576040519150601f19603f3d011682016040523d82523d6000602084013e62000099565b606091505b5050905080620000a857600080fd5b505b50620000b890508262000185565b50505062000344565b620000d781620001b460201b620003511760201c565b6200014f57604051636381e58960e11b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e746160448201527f74696f6e206973206e6f74206120636f6e747261637400000000000000000000606482015260840160405180910390fd5b60006200017e60017fc491a4bc7f22df3d1fef738d9a3c4c3d72de30f6f5b4b051104051df906485f76200031e565b9190915550565b60006200017e60017f1739bb05de6bfb1e46d9ecd038d53871bf808b66c6cb0c157e00eb42c2717ebb6200031e565b3b151590565b80516001600160a01b0381168114620001d257600080fd5b919050565b63b95aa35560e01b600052604160045260246000fd5b60005b838110156200020a578181015183820152602001620001f0565b838111156200021a576000848401525b50505050565b6000806000606084860312156200023657600080fd5b6200024184620001ba565b92506200025160208501620001ba565b60408501519092506001600160401b03808211156200026f57600080fd5b818601915086601f8301126200028457600080fd5b815181811115620002995762000299620001d7565b604051601f8201601f19908116603f01168101908382118183101715620002c457620002c4620001d7565b81604052828152896020848701011115620002de57600080fd5b620002f1836020830160208801620001ed565b80955050505050509250925092565b6000825162000314818460208701620001ed565b9190910192915050565b6000828210156200033f5763b95aa35560e01b600052601160045260246000fd5b500390565b6106b480620003546000396000f3fe60806040526004361061004e5760003560e01c8063207fa8b914610065578063667615ba14610078578063d5696bb114610098578063e8a8c894146100c9578063f1522800146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b61005b6100733660046105a4565b610118565b34801561008457600080fd5b5061005b610093366004610627565b6101bf565b3480156100a457600080fd5b506100ad6102c1565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e4366004610627565b6102fc565b3480156100f557600080fd5b506100ad610326565b610106610357565b6101166101116103f2565b610427565b565b61012061044b565b6001600160a01b0316336001600160a01b031614156101b25761014283610479565b6000836001600160a01b0316838360405161015e929190610649565b600060405180830381855af49150503d8060008114610199576040519150601f19603f3d011682016040523d82523d6000602084013e61019e565b606091505b50509050806101ac57600080fd5b50505050565b6101ba6100fe565b505050565b6101c761044b565b6001600160a01b0316336001600160a01b031614156102b9576001600160a01b03811661026257604051636381e58960e11b815260206004820152603a60248201527f5472616e73706172656e745570677261646561626c6550726f78793a206e657760448201527f2061646d696e20697320746865207a65726f206164647265737300000000000060648201526084015b60405180910390fd5b7f7fff140a2090a44f84000f793b3e2c26fd84de1b51418e5734481ecebf9fa41961028b61044b565b604080516001600160a01b03928316815291841660208301520160405180910390a16102b6816104b9565b50565b6102b66100fe565b60006102cb61044b565b6001600160a01b0316336001600160a01b031614156102f1576102ec6103f2565b905090565b6102f96100fe565b90565b61030461044b565b6001600160a01b0316336001600160a01b031614156102b9576102b681610479565b600061033061044b565b6001600160a01b0316336001600160a01b031614156102f1576102ec61044b565b3b151590565b61035f61044b565b6001600160a01b0316336001600160a01b0316141561011657604051636381e58960e11b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a401610259565b60008061042060017fc491a4bc7f22df3d1fef738d9a3c4c3d72de30f6f5b4b051104051df906485f7610659565b5492915050565b3660008037600080366000845af43d6000803e808015610446573d6000f35b3d6000fd5b60008061042060017f1739bb05de6bfb1e46d9ecd038d53871bf808b66c6cb0c157e00eb42c2717ebb610659565b610482816104ed565b6040516001600160a01b038216907f35c786da035a401a18e1a5dade4bdb4c07d82bdd5c15bef8561dbf76ad4db25d90600090a250565b60006104e660017f1739bb05de6bfb1e46d9ecd038d53871bf808b66c6cb0c157e00eb42c2717ebb610659565b9190915550565b803b61055b57604051636381e58960e11b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e74616044820152751d1a5bdb881a5cc81b9bdd08184818dbdb9d1c9858dd60521b6064820152608401610259565b60006104e660017fc491a4bc7f22df3d1fef738d9a3c4c3d72de30f6f5b4b051104051df906485f7610659565b80356001600160a01b038116811461059f57600080fd5b919050565b6000806000604084860312156105b957600080fd5b6105c284610588565b9250602084013567ffffffffffffffff808211156105df57600080fd5b818601915086601f8301126105f357600080fd5b81358181111561060257600080fd5b87602082850101111561061457600080fd5b6020830194508093505050509250925092565b60006020828403121561063957600080fd5b61064282610588565b9392505050565b8183823760009101908152919050565b6000828210156106795763b95aa35560e01b600052601160045260246000fd5b50039056fea2646970667358221220884bc9cfaa648afd459182fc757138c9f04d80934633cb9aad43098a7856cbd564736f6c634300080b0033 \ No newline at end of file diff --git "a/doc/BTSI\350\234\200\344\277\241\351\223\276\347\273\237\344\270\200\347\275\221\345\205\263\357\274\210\347\254\254\344\270\211\346\226\271\351\223\276\357\274\211\342\205\242-2.pdf" "b/doc/BTSI\350\234\200\344\277\241\351\223\276\347\273\237\344\270\200\347\275\221\345\205\263\357\274\210\347\254\254\344\270\211\346\226\271\351\223\276\357\274\211\342\205\242-2.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..b6de9ce2c66dd1f3034e7deff9b7af15cc486267 GIT binary patch literal 238751 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

PilDh7wNDen5%xt~UEiEGp|H-WK@mAcK zXUgw9KPt50(Ml+}v(0_@f}UU((}+;x50ZPPH)W{I%)gNvbYmwh2Z+!@0B;^$In1E6 z0AW~^!$Ou=F+cMaNJh^Dn1u4RRIv?!zXn>H0%!KkQR`T-k1b%L<>FK}3>o5mvcoMb zE`W9ae#ai{L}pE8d7>~V7W#aFYiE9TD?|zC`dzEj9=fai!ks(C93>bM zMEq}m4F>LxV`w1^>&=zD_Lg(ho0NNa2!-@&M=vXzb(VMyHOG$TLj zcd@~K%~ZO6*}l@LTeT>@Hg4uNHIVzaUo!HBFXesgFTZ5COk2)>d|zx#Z%V)ZYu_|% zOm8a2v2gviKL9RQzwrBD7rx+x_UOVWfp^AMG>{js)jaR4hq;PC3xsgUl&t6)Q&W5n zY3sG1X$0!nzSfQ7?c3#XFbo&3bUEPIL-TVg5v_OGL-TeWIy?(OlZ}B1qdzqy%fjgS z*x*y}moiPK7J2OJ(plpBKVssD(#Sp^NA%;ZdPM?Dvh*8=&w?MYpTSab@@rvyYlS&Z zZn>4d670l}R|skCo6N7dX&ThD7tw={@#?K&o6x`P;mlxy&}}6&!b65KM@h%P)VUok z0A8Y+;k3x{x(iPH*OgbcQ9l?Wrr#JDyLqyUf$VwN#FDoHLkz|;M z+4}(_19d5-%O0|xk^8(oE|~pfQb3)LpatxrUe-9;p~ba{B~_IuB_Q>dSVwf=fskim ziHXTI$Y+aU-K-O%*x~$Kqcp31m+&TB+P-^2+_%}!RjKWtw>cZjo8DT?zYof&#>-X# z6siCAEc1o?##{E8{u+?Q`mYY@?nmnD^RnM=P6xhPe865}5siG(#QZdI|KwaI z4Yn_j#G?+-t!L8kWh`h(r+nG6{20tWrl`LAAaphdr5ux3-LBrc&`s6S+tVkE)>Fib;|!KEuT(7^L#&y} zHU&kSEwqH8u;-F^Gf5rf)#RrNYw_uydzj@-Zy*-d-^b14d4AmyqK|yw3`BxYkp~V) zg%anRrj#c5?U%;^J7%2BQ(PADv^dg1V@b@1LDi~ICNe);X`i<4dP|40E(0mHPna=q z+F%>eS^}L(ddDPCwz!WR@V_5cv1~FHI#6`zpMc7F^(O!=GdOEqc_Qe0hm|QX!I#xn z*NB7?_a&kEh%3ouVzd|lkJ0W3Hr34%nAd#;y-B_eHZT=5VV!eSvSUz@bc-DI+R71F zt-vTGZypaE^z6~6LL=S@!O<;sAYYB9P^u_$Y0lOX@?}SHM1xB@ZEyFGr%pr+;t_z< zZ8*d5=$E_i5`KnnwS|E>E3Sc!fe9T5-j1qm{dDB>*peBo@NFm9qLSXNg&oXVDz9e> zvk%&A%cIZQdSQ4AwOV^b*^eP1t+UW5t+BGFtNa53Vr#O^;HUD}FYZ6+Ln~`k?8Aj? z#iUosN8Fz{P9}2}8K@N!(f+VPZ@R@<{>D~QlCA;>(^s7$S_MhJ^#dIo%_(C7oKMXX zx(e4t)oS>Lf)=!jBHXwj_*vS%Clbyp-Kn%;$K@pf6|L zuib4?g>sY_2V;c1xYpj+EEX1BRX@tLX&Ec^9TT6Xlo21!QAGV2koi%g_eA0&7V$dO zAvxEk?}*WlO}l=K#M1!6OH$tP9utJ|7$RKmS&`Hqu<wO5$3#^fYP{X&l0?|tB8Kg`S79|&3<=&GHSKU(J> z^(lnm41`x3Gcp1&F)s1LPvQ?je_Kh6<+q7(Rb}Zqy#FbQEqhORkSC3iw7#;(ud`fq zX07-m1!fz;VH=X&IVMdeOFghvW0Skx#``TsIBab~%Jr!|1Jh9GyZh!|xfBh6Y19v_ z%4aO@!_ni9IK3}nQ{mNUFLtjIxo%7DJo+ft{_YHSZT3YcZ41sxLJmBrI$6X0#vWR% z*s6wu-_A`YS`R9HN#Bz@(9~O-c&Gvk-tOmgR~L7Ut~_ZfIer}wn4$x%wg}4Z27kO5 zn|!-rfQUkCH+IG(;SeZ~dH6EqkWoD*aL08>#}~fvKyCx3Ylwcu_qM_qKde!XedlZ% zR6RLTNS#Mh1EFZo=l~rt!|ef1O-@Ks28-m!BlO zlpMMEsKPqCG0pe`J}p7&kWvndWQ(Rrdr5T6arrZPhQIF6IJ_Psbuo*u#zW}?5Lo1i z!UhICh=oAKTHO&ys1I_ z_d(Y<>0hq`0J={YGZ)4OX@@sEeXI|FUek(oIF-E~Ye-k?uVk|%O|U%7r4sHx3X{eH z%(;H2Cl2~Nm5ZEZnIm4nA{Y{bk~tzpA%5+SB?blo!O)(*vwPx}tbSxgaP20Ua$K1p zyWFhtNrfHmXkelrM5LIG4>GO46fz+Ml+-2VL;8uz=g$aEgY>HFHH7)t#e+V>d}Bk| zqb}E=x+p1Ip_~d8KRgv7 zC}mktZiXB~!OFf0kod`PpMNmHeZH4deg22WoEuXXn1)Np#uHIhS8);r%d z`%8V*GGZF>ivZ=Xyh~X3Z@z{Q^FLPpGJpK&%jh;CoOP1Oo0TK?FOyP$4)H%sO8-ZP_~K^! zPv03fwl}3M|GgW9?QQAx?;GWp+5OP}dZ=fI0<6H>M*LoFdP@~MB>B?}uzI*CWQfAX z!HMAvu)TMQ#wk=or}QI-+GjXXnzur}`XV}W*MJ+^S<>j72#xw0fXKVStUG+f>I!Al z!2(wEbI~{o*Fhf;b`u;_F*86kUL71*D=6TzhgLK&hPs8;apF91jNYbN9t}`U)N++< zk^vn9N(mMu454+I@;Sfa8K}3|v`iQrJ3!*I_s|Uq+8jYIt$OKc z6zqNakE4?1ZCBLao5-=URsfz&=*0^8PYqWOf;y^k3=}&*Wil7V(C=|J%Z)NUP6&#_;MZ+N2e};47O^V9 zP*=79TA?~2^hpMI49$JK!c83 zSWIK!H8c;Vi+08#5y3GIZ95Nmup3Eio3eVN-M#RcAA_UTeb5Ow3D#jU?Th}G z+Dg-kTlckT52Q5`$m6;s(vTcSBD30t%{0E^XIZa`A`}a10{X;S5BZ0=&Lner!xu#W6=U` z5ds%<5IUV_57m}~SLojxByc5uBDQJ{#IMT37G(XLt95AWS9a*hW3yV6YCF?}*arQ= zM7ZItYVW~q_gpx|19 z+)L-d);+W{${2N~qT?T6QsJvIy$d5p0J1B2!j`^7d3A(ene+}P z4d-&lh4#R#RtqK zd*iDrq%$i|W|ECNV9;TkP4(!kCxOsB+|nwI?*cPJU< zYGskx6v`^D0a=O0%RimueMTomuqh@X>ZzCA%vq4>IAa&w(#KFRD3TToZA&lg$YR#> z;_~HddpD*s%|Nb%nDU+RT&(0Z$X+JUxpD9){C8`aOs&K<|J_GohVgHf%@u7;xF~BD z&LA8TER1u}7C>9IsU8s&NW9p@@m@fHqe?7T1q~HbQ4(t~XV|($JK|E0cEba^3u`Pk zb=znBAo=`u_?i4J2`g^fV?I(< z&xYE#+ond_Biq`eWsutxdy9|qg(?y3!4 z`czs<^JvABhD_P_6+Mks$t9KFfqi<9*kukEAF3e;Xw_9J3S7FERjWPR#;8f*dza2) zkQ;p5;I_o`w57t|WG@Drr^VG)E%mU;j|Mt-7Mw*!Bmica9@+W<@;(wAQa_ALUFDX2 zfR7WJqQ!g0xPZl`m&gl5En%{7rjkd7dM>r;g;P3=*K{522URo`<%@@RQR(H&?zF`5tObkmy0r|h0min|2>alD1@%)j*yNhX7l68%T0QqVyM9V^ zIWD19qqsnUKr1-x>F>e-p^OizURej?%8LfAabeAB-8huNT4U0L^DCF3u5Q8 z|6$|2so(?RQ)G?Ieza3=DKa+M%O?Qu`!cX6Ra zV~@0coy6y!92jMEnC;-QU71>ci*~^#cx?MssiKdKqSJT#Y&zUkiy%7lxOxq%w4S$U zUs{NOvv3ihgVDZ^pWB`;Q5Bmdbk~rd$jQJ#JR|~bmM{~~osPFw`r2a_>Q$By5+{sO zI#7N&?kD3^u6b|C5VKm8nbdwLsHyHJjt7b;)t&9fRY6 z-zP*z0$q+jMDa}(Bo>z6KmLCgR=u(UF*W@CA`T>x3TrMlO-mc$3sKZba!kc(0GOC$ zXB(DdnK9YTI;GUA@5KiZjEPx$=gz9=D-Y+dTI7M96W=u!0+gZy&3e*E9I)DF?zZ_B zF5-LMYXH%QVk{O8eXe{T;bg1u%>cyyb_-FpSi{Iv=zr^mdIl9T$ zF-?AZ58@kdo=~E}*|X!H%fbBrcGASc`KCHO^WSshiC?*K z@P%gtUvU@_MZ+{8HwFtrd?vOf{7X2h7vAW7xvH)t1HvW2nEn9Bjg`HA^&~&Mu_qb- z7iEtFK-ok2zd_mKcgLMU{H9*7z%WJipv86&zb?m;MA8103D(I{X@~*+dN=0sR-`vf zX8#8wc$e)zq5CXvlPUez=Ef|XZ+f(_{l3fq3R27-BV7A0ED4ZREopZNL^N07s~`Ss znTR0Z3~F)HnG)?<7Dh`tv3>hGtzwQ zIrMbQxUIOWL<*>}b*7ExmXNzQJ55zD2M|R4YgslucWX3;JEz z!DZjI;Sb5#fE*`yK5V!^7~N;;nt>By{y2t{CZ*D zQl8VbGKyxYj6c?BsKnDbLLF_lW_Ip8Rtb#?7*)d_3l#j8zx0{o^aUu{1aR%I0I_A zbv0jpRDkRnpEr|jueHw9*MV*2u<9zUZ7E<2Y~k--%;-1R2KKwnpe| zMiP?M)E#Bm0cNYUEUe8IJn;a6U?X_2^0&c%gN?-Z$&HJUP{x{);IbY#ynYb`b5u!9 z#KuYv+L9}1MTcaC?z<*h(1Qu*w;I)@}|Zo(ZWI&)pz+YK)b+|DjA zedSzY{t&r0<*_VGziajXX0^TJp@gRS%WB)4JTxo%nFu~i;0h}U!eY9MluDN}(AQl% zzrhRY*@oYAx17lt7_k>z`*KZ>;1i__H2qTGK{1zkN)pt(KR}I73d7sS%bu)xAC4oJnH1Vce?vQBH(%tm+=*;*7Lf^!S*r&(1&;b2J!-c6-HH2_RxK6pnwc{8A z8k4?vo~MB!q&h2?9{4c4Hse>jCDYKay0xf;fi!BJ!#7-`R*yew zCbzGfXi5}4&6cN(@u`n)(hPB5`V6wR+8{tn1Fb;~tB%Jne!T(Rge<1e7kl#OPh&*B zN01Lxd-5+yEfHWOUrlcbNH{{t@fhi(SAE`*)M%G^^s|>|5j^qL&yTD^igBdr`U2Ib zFy#z1N#&GRj^N*S-@a%a{MkO(S>0e2SH&Lo*uPTa6q*cleas;~1XUuoBQi?oK06{o zI0V-tRwAKNg?UEG;hm;k;NVFF31Vz731`p_4STt7h!gx zDox0S4dANH?EI>9G%7fJn#n!}xE{Jdx(~$+7@AGu!=qz;VHB8S z0xP1ZA(+H{6VGgytXK}qriBe$H(+2ss13iOS5dJhf@vD>l(yVL`iY>iY`&K(o9qBF zXEtbD(Q~-6i}35k50td?~WmDm{)Y^ z5%n15sBjRVY;VZ`G@@PM7E|0OY+<0wQ-p41vsQ}gnor|#U^uxWd5cRRH2#wRZk@I} zFYxqQX$G3V|KuoPVFoIZ3YNo?7_ESXa}BC?5xz{#HI&CVdzOsp{ZTN1RTws0@1gt=Nqv3+3Oo00Be2YjzSwqn8|nK5 z_lXQ}@|-6bskFJSvu`w7RIE(Mi*#kyf)1?iE^|-*?2PizkfT!2A@A)U&}r*nIfT9o zdJ-0lkW&1_&VcsH7BiKLHO45NxVGcTx))HTP26Q39^LV= zi;17`xK&TL9FO7`cVW$}(po_AAh4~rsef7$LaX41c9e$X6M6Y8`U&`DuW)W+5YcS< zBdNm3)&i3sf_|?qK?wobyg2wWctSVKy{PrLG>q&;x66;e)86%@&v1D*BMJCX1&YhVfP57jR;x@=g zZSk$SB-%fPG^|2%G2r^B*~?lqS88I}>^?}zJ1J`S(@-8$TwBJS-u8*%LkO$jSeCdM zoEZjjYK{btr#3;ae_%;p#Y)_Qm_AEcy~T7}@T1|^*Jz^9K&PFnKy0h+GO;8esEEld*928%NrYbM4Y4`07w=pM2q0@C&H2~=lbLon=h}z(lcF^B&A38l)W19*t2yWFf z^II{Qd7vG;Bz%oGL9K{p9;_@${VI}vYYzg3y?QHfsbdfYiSBMFB{XsvuheuYnJ<9D zzxXH>Q>2AdxN3Lbnm0&n*o)Z#yP=K_akKB;vH&l@p@Z#TvIV;Veqp6PR?2o|-`baH%`ng|C#_#Hzm$h(z{N1`U7%4qUn~v6X9Wj-i6T$R^0 z9j&JG_f1G`+EN?0hvivTN0(iXH0-Cb`MVbx}Rqzw%RQc!T z)D1svNbb4jzJjF~CKdqB2t!#OzhPhm(kGgouZ#xqr$ztEmP;-o#9A<-JJf}Urt8VK zhKwuVlyy_w&Wuu`UY%HIbH3!*C?G)+1311wy~;q0Hkf7nBVb(=i4wp3{uKAZ_|;Sk z$4Zz2szyCD+-y?x@}GyiLl~ zckum>4`wd7G1taw&5H8$tw?19ngYaC+H&q;&|4y)#{Z%3gx#J$BO%RJUl9~-cYCwQs_$jhZAecM^m@OXA(7V4) zN{ki8M7c@5gSQLiSO;W!Abu3pUQvu%W>A>j@#0wabusu>jB3Lf)ZN*t`nK0K(7+(WU~mf~CBJkI1l zY}OFM0S;KUzu=gjkVRs=b09haNW0Dk~KkFCXRI%)pyJQ`(hrtbJECYLEY_skfp+g5} z(qm8!vz_8GTXOth8T;l*``ZiU(Z-VZt|o=EN~8$BY@^TqN3ORI%kXchakNv1^(~7!`?;}XJz@VmjTdm z#_tos0eqRd1V3Lw;!Y-%Rp|jnoAIHqXZdjRVUlA_rWev#N9hkf#vb*Eyd35&6mdLw znHROBCTA8I21vOiolI~0`;7V6^EH;08m^N6@UQwb=HpF>PF<2BG&{@D!2xHz-oAyo z297x6>HRSnab{xkn6L%5>r)<50+r$S7FbX)~B zJ7LA#y*_(7xo8>GA$2TAZ8&C_@obzXqsAZbC( zvFt!Z0VX zAk#LGxh9>pHqTehCJ+kVP(8Vu7%{^=Ah6T7B>dlOR^5KkbJnYfYD12dnagu3c~@;| zM!A9QXB0psx<{)e;wtE2oXPX%5{8ukV+eri!`Tp?A_U>G)ojt@)i((|307w7!YD`g}5x1A@jI$bLaY?vG5F2r_CK zH{7ZWYY`^L3FJ92p#Z9D{@v&q%#w;9$HZ=rsaojJ&b-5sf-@RbU0D6aWNj#JS(L70 zW@u1yUwl9h66KcrDVH|Mh+gY)qo_l`PV#6|Z`F76Sz87^MUd6zO@rpXvyOU~`6)Z#7KO$+6HNtpJN5HQI1`=~T9L7Xz;OdO zB#Fq)g+JAY6xvJ33wA5X{~$-rXLIZJxLX&sQm+K#LDAF^-oHk7o;ViQQg2V3g)Haz zzEFK~yK=U1?((A(_w!Ns&y8q=VR6xSZcArwq78-cEovHy_?vd9monKDHE6B}9uYiV zUfG!XY!wqXZJO+!Ex-a?T|oC;%RoLg=$>1?P$D1?LRkI?dyqs3oAa0M1WEen75+)~ zuubI#d^_utk9zPE$l+pr~wr9Ive& zq;)5V$6yNVd>^?jSOwnM&LjfOvKB*Vp%&ai{zHH2{d(C$)pVV0fGMxn+2LHcH_ckO zd5$UJ5Jlep$iZ^8i7$g;(DY-{ZqN(-GcLf|t@y+sWnq$7moGcYZr7r{G^;i3cC5L| z~s{(Jf+iUWPKZS~9eA^f1A56G@~a(k`sELKG<;e2fba~KU3kVQ zxQTw-cemw`x$7_sDY8QM!n+KXfjlu|s#D%u9$37E^aLh9TtOq;&G9Ht`SJw*<;fw+ z3GJ@er=C}j^z~a7k>R;O2n$Y=o0i2T)ZKKBvgZR88p3WB51hd@&zGCr8Umf4O3ZMv zdbu4^aPE#`m3(r}W2nYE%-F3mTg+6}&ruRNand%bI~0~l_lQ5puP#38t}!>7MWh#N zl{Cq~%SOu_MZR43DqT%ol;F2yg^QUDc+8yPx9U6X=nV z@5mbBnK5!s6CspZ4cH+?zMi;Xbmz%kVs2%Ml&%I&=^j%%D5tzX?R#lk5%c9+5LKtS zhXgl7NeAQJAOBgpqg}72>W!{?%vDq$-B22T*qhqC%aR`tdz>hhKuuNNx$!|t#@DHG zR37>s8cC6rEv+f_Hr1J2IlAmCt2qv{E~ANTDEUCKOdnCKF~G9M+n|Vt=dySTtL{wC z)O>YdgkNo@S9@@A5ayQY(#-~@5ZZ&}{;)S_x?^D6k_Uvgf%MP>*%)n-G>(ZuGDXOV z5n2AU#_A#o4-~qckKh1rJD#s(j??f{0nWruI44XvK2q~ADk;HmBvXKUrnNXf!GV2d zE+oH$7d@|dPfrFD5PP`Jp*!B$?jd2b^~)@*e)czu>~BXn!LKf8Zj4(Or{;H!jT@~F zL3c42Q)i!7_pSA+S=lxg?5&>L8k^TTOuvq$qkoP0j7vk4Ji5<5Q`a(YO-)5lt)tJ1 zcIX14*Nf0x5lX6tZP+HYyj%9I4o{qj7Z!>Mn%JcZK0!D=jdf8;XndobHYu}+*+}w> z5-6(*4{0-PEr)JhBC&24&^4s4qksa<`v(q+>Ab8!M)oS4uDae**5WLp&x`?5tU zno7!fDx3+jwn=35nNkcosS&NUebX3%)iSr3kCiffNXFk366X&n%6DjPxHpS|3eZ2J z!M_XKBwub?u%v;PTW#=3!>K{iK&U927^3JBDCki`)0o8^8AY*fj0sdSLS)9-Ne{P} z_~Bb6DQ9K6Cc<1*-25)quq`6_W zuIp7CnH%-qSW%DBXjc#Cya~lzIoZh(_mdfxv%@Yk#d*1u8#U6AiQx!NZ^8l%cm+Vp zig5bKiT==$#1s)L7|0^g>b+>~Oy&VewHE1xYa51KSvT}K_ZO06?jCM$_Aug2~4?t2UN ze9^|bq^qc)YqTuM$uZM}-z6SGt;{-5(NetEjJY<-h}R~eYJE4ItGNq*9qYnDXoc(^ z-dx|h5|EMdjY9|7Bb-K7)m=p(QJ08bUnzX0_1YFE+rh3A0*{z_4?DU!1I`Gk5T7)Hxih|J>Dk08lEOFyoiCUa&+<@2bGpy5tsCg0!?=CtMJXx zSD5d&IbF*A=Dw`8+F#9F%caV8Ha1yOUhm*c)JP_klNAE@peA>n@&jo^I|&EvIE8m?)^jo z5;98i6@eapCwBU7yFXiRLBtk=MKHd~imov4;W4gkP;r|g&eW3O_fw+ll~nL2eP6W! z4%6Kzx@;EaQQg`vP=lW%b&Psyw}J<;7V!c0#T^o14BlIad|JH8e^`XK)vh>x<6_Fj z_u2qTilP@P+Yqre@DRt#lw$!O1ly+Ip1L#oBPfhM4VyM5l8ALk6A&=76}mml8W%{$ zP+o(C?o}yU6II@EFuqE0KW}l5oPbKzymKs?7O_%}91Ub5q>b-vGZ&MooQbD~m4zGn z+z{bEyOH!|*jYwU^LU@NopRFME1}qUqS-Owgf+3EmY`K9))bG`->m~!%DWwr` zjBZX(?mWVie3g2T4%TRmZu@0U%@V6Jm zfPYxKa737~3U~4#PD%{%rgztwZ^%8iY^hPw#FrQMdmVno@e39CPK|euZS&BxSgPfZ z>dG-mUg%`V@?0j?`Yra`y2XxlNqm~`gG3kFku%uHqDtQ!+3|}Y`&x)rf)y0&q0e$& zzDXAz#>km*kZe(i$CiPEXjUpWk64yoZ+R5AJZ{@EiSO!iut9;~#5+dGK(ix{wov$r z54G530Z%X*%6cD1ZelG`bwLawHfXz%IJ;7Tnons1P(tZ9AED_36N`+6^|Csq>AXnH z1VZd=xkcR+Af2ueZ@OADNmIM8^chT5AgwoeJ57jCO#<4o>%6XAd}#CuyN3lzX3GEI ztn@ZqFf;3KGSpuzlR+XtQJ8;_)(#UBHE%i)OjwF2@@2XKQQtY9hLw7V_WD+}x^OzA z&%KL<0O2e&rS}l%d%rf9p}!{XzC(R`3KS~+N^E+-EOR2&rXzaHv^l{ix-IV1Wt2(a zLo=1;EyR|FF}Zue!*=zvja{V{W{~ z!-scW2w^?fI-7G6<@Qd(`Ix3cedV8lH}2qt3SKM*nI^8udAFm)u4~U%za%dvP@S}u zK)FnX8{4Rkv?udRkY$eUpZmaNWsF%U%h_Dg&S|FT96f>D;(4C@<1}L8_<#FKVB&b& zmB7mWn}S=uJz507h~@*wMACmg^KgVx+Pk&;FIEOAxfWoI2M6a#Jxu60!~E+@i` z(mkGFt&EwGn~&Tfo!w{k;PA1$*HT2~=1PiLbxTtlcortpek>|4LN zmCFq3z7yV#114dK|omNl|VGnkX(`3l;=&Y z-M1yu}UAOt?YB68Qrq@kz76$OXY~--fp4OL%et%2b6b3M~{QSwjSyed{T2m zX;&elo~HGLpE-&hUJR&|U(=ptMO{Z5&1YLK1x@<-I&#tdgzw*PC{<0NDCwibGK7u1 ziOK1wV4R9$<233;2V3_ms)mJShFM8N3dYu$4MJ@|_~h3$fq&EsBf3+;_^I(fuk+{h z7Wg!KJ%ZcBS}^`0sBcnP{lkame_MapB1TF|S-_G6Cki68)5$)9M#B{xS|A!)reNQu*e>SBmG!rMMG(lm7u zLNjn;G;3y>Z8n^N4odl2BFUM}WulcgEh-j-d+f?~!+P`g2GS^l_{%86ul)(O5 zz=&M`5brk$ZT|Lq`C_CI{28IZ?=p9EbD?u)XK&1-U^`zIq@roaFR_qJAqu#q+G*Sot$AVXCm>P`iQi(IMREz2>&Io#66ZHz&WoK{3DhMmiL=isupsH)&Z-T6F_dIpPFi@SOwxVXmB0Ct$X?)>`BGb%+PP)Mm2Bj!tofx8`Ju<&Rp9Xt2R5Pt)-&W{8O#Tf zpJX~Zz)BFiw2wl#FviqJWR)PL@A(tm_!TXDflg5DG5-*wH{DOnEPsp9f3{x1uE_X^ z3KtYf3DZ>onq;g6dL?-CXvCLCkZ`3kNThsTJLr^}cp)r% z$83BYKxW$h8IYM8^Y%YCk!JD;K#-FGy^fs6n+L5&!h`ZN`I1HMJ%P1XH%+wxGSgmc zACTTekVvEK@5Q@fQ&1g-kCUdGMK(EU-2(?0$myREo7u@Vbn@9HR^&$tkzn>7DzH2s zr>txT7}M=!We8R?dAryv4X;U$A2n6Zvnf%>7zn?9kxJD5syfeI^zr6?Ne!-6VgCuF zE7-p957BzlxaWWGiSx#p2FBl3TUBK=nv@CdQ5{Vx7x<)U_h?X`kPq1UR(i$fOGiWv zU0UJc>@U1@{AyGzy0qsQVP{3ynq`yshbE}nT}vR5L3o;Q)H|9XJ>2USZ}8j@cLsmj ztLwQv-y;4;K7>=!hA|FnVU-oI)I;-AjtNB@BmBTm(s!+_ir}SnvR&d^8rv%LnE0~3 zK>AMOI!kljHn!;-hH4D1c8#A-F3_zHn}~cwq{#$SI`k<4gLwXd{lJkPQs+6AO;W?2 zUj)k`vfv5jIV1E=K?Sz>FKPE|HX*Y^>vu4}kl_E=y!^hz>)YoOKAVpj40A_}qwD>5C@;`*Q?p|)0PLcG6S9;zr+O5PL??t#tznU z99vO8QuY}4Q4ueClksY6#>WpGC<7#mbyBE?tAQ)Vo~YvFWTt22-nikKU$<62I%ICK z)flSFac{1Cca>mi4guoWn7I*~T4Gq?O4gO7NF;i2I#d^Up~-$`FB}kQ2ZD~CX_&BwYar0$=$r~cK$eoD;s4hngiG#r% zAbtnd>ax$BrbO?zV{oob2O6SZI3;zrmNI-Ntg`Hpxu?8LO3~^(le`6qVOdIueP0|< zlPcmIpC!*Um$A-rR{LxnVNnyjDSNOoRNJ#rfb6(|Sv4h~e#Nhj(u8Db7*n5}3Tk`@ z=$xzh8`+cxST~?ZlY{xkv1$2ic+zH5HnsCaFqlhb>-_-7w(qEw(K)a*b`fuO4SRz8 z>u;_2iMF+Ebr3nuhAQ%S=hs+wx{R*`Y)7Rq45ucRLJ+x(qwg;u78-Z@k{; zP>?Y1^iJDvW(YD=KX_tFq@otW#-2+lTT6blU@Hu+g{{l~fFTxFTcrwJjX|&Ff9Pa) z@5kk&P#L@$hKb6kZa-%Z_j6;CWNG7?Z6lJIED;Ocjc?<}bzg|`UYka3!-ezOS@_V%oFqIwyN(={n=L7R0m+a~PqwX!Es$jRSVH#=a z?(S}+yOfr0q#LBWyF)^{ySuwnx{;9XhIf0P=lh<+(RU1fo_F{|9XN)2U$L&W=9+8H zZtL_gQPs<3Pww%&*eF!eJ7C9Tb+Z|9-?7ZJJV=oV1pGyRSu;V;z>ulJSP4-XofxskZfykH_Llv{MXKSGLA|EU# zfYn1*QTWyfXXj-G&K8$!#tg86?mj<<2wxh+Ha)9efINnj>$FPGPnK5myGUZ}iKzK{SBuE$8Xn<9~E z%7s*-D9!QYi3_##{&_P2t3#O#oIs*V=+T??VEvsx4dsxWYD#wJNpl+upg5u184x0s z?(|`jE#cBqj%&!3mdbK~PKg_SG(nfX;+IzRAje2VXfMjnicA#yHV-ZlolP=#lZ5X1 zp3q(gA(iFNIfeu@R*5({xcWNk%pbZdm`sWG`l7+_wEdCmxLSvP(2Hw-6uGJ2F6CQK zueN-0IOUq}(;{C7{n(*zt()1f>AD@~J14NVdhCV3101=*u-Uf|@r6%v%i&YT5f||H z&){JRIn2hKB$SZ3f`O*$tz7DfCmc@sPM+bbLcl-9mLqKVytQCf;7LGHLroGa_$#2*(nb;MVf-JY0s+ zD^liRXHPdNBgAEbcp!zgvT@+K#(e^FSQ4K(io7gqYbtEFce#3D9ItQ-$1fl(v-``w zzG;e*ne7#ttP~^hTf$A`hS#4iii)M%d1^M^|KWM*8HBtO+bMw;YZM^hmLnZmCeR(r zv=@lLnp6VygsUfrAd_d8DF!lo4+lC<-x=Uel)q{XHS$$0GtX7%N^+RT%QOy-owrEK zA}u|zn@H_Goj|b*q!MfzmcV$oQLj=DOjO8VD9E9YV%}qjVD;J zkYBu}vb^j1Y_`6^u2I>>m)fznV8sKq1A(d{>3h|87&hG%5I7dg43i6_^A%>ZI7veh zQabM%x1ia;vCDd}Y`dw>dCoOY{O2kdZg34{b)ng|Z;Au1X71%5md!$bh@MTa`xPZ% z=+!PvU=fwwwF?btMDd#TEXry~$RV3&Y_z)H^)numv8)WqE0(3W1*T-V-E*ihff!0>|iujcFk+hq&z znE0*34!DL%EUCNs@}9bDo+%KVcx>0mK4>*PwaP^~qDvE^)8Y3S_;kM{Q;0lJSTmF| zTZ3eUmmbBea0}?@%|CG=<8dH0&Y_oqnSE4~Z+zmfMI0c$m;V*UH*T(Zknu4%TZGt? zKrCtuX@V-(%U(#CNV`aIIrX%+1!;+_vgqteBJ6!1DwMi)hmN39j;ei!Pyt-buWdNp zNy+(O=iZC@vk+ecxt`{=`dJ)uF*>T;Co zU+e1@r&4bDM^~&hss<6Vv3Q_FG8k+3e2BAq@NRseJu^O~05c3O4lg_Jnmv!Z?}|8E zA2g@0!B$GM*J)^Q!W8}N8KMWP5hvI{nGQsk9Vlb7<|MEaaXhcHv9S0h8P(|?O$CHJ zq@1kQult*1bC)skQhhPniwTVypeHXi zYA)+viy482bE=}emu*4RZR=@pWO0Lr2M_%@{0M+;?oU@nzqH-5mFNwjJ$jL^!ze10 zT}BAn5^zzI_*Qbe1t>XA4o}M?Rd|inAPDjjd&7$J| zl2jpHSd)x{uFj=i&M!F(rb0Q;5c=h_;wT5n9@9gpRkwAXc_)GsNZU8=xMebE8=;!= zF4rv$93O-ci^vy9)j8x-;N1YVXF$-5{=WC=XbWMlGBb;?sKRWnk-hgJC%Rz%5!b3) z`_qvC)i(xh7U;FF3dRW(a}X(n0^H4?t#{Y=6frBibttPu2N@=7G2Gahk)8UE485p?IY{zJvL{Rm&a~rIMiiGNnUGUhTLa=sVcO75?=HDayAdVPc zr_hJvMF&iBI96=yLk;!1OS~UUb*=fT-jLY$>o!0kWoQg?XXTEsOSmrM)3>1}fZb+m zn1`!Wwr732r{>mQ)M7Z_hVHVy3fiydlpi}x5V~}5Al>$S|MA1-_EAHs0?@HltLFS9ed;@!hC7XW)+o0e_H|lnN|fNae?{QU10KE>8OBF4_LMfs`dE(EY06(uL_C zGpG64W?cAi7Ghq+`(uE7;uj9LdZDDi(M5cXPXIF~P2V0$j#k@;K6J2e2K`zPT6a$v zES}if%_0<2ssG3)*8Y}H6#Xrq=-4;|R{Pkm#NNvhO#RglRcW3FRZ|^Vxs3$Jp~Res zu9|0khjT*#{j^c4p)lrVg;Xn8hG#Q$v@wcjHlC=zLUJox&dgk~_XZ{~@ayBBuO9Q8 zQsX}*A}j$y!G0$^y?C)gez8*WP^zY}qUV`>MN5z!6^_xrz)R0Mt?)CHsjh&g7%n<# z&X+Z?Y!SD)U8nW@R-+A5A4ecEyE~)j@jJMXRg@f=e-Rk?EE$Gyu+6w;qIf-uAEP*X zk7i%tTKc=`haMVxjm|a7G^GjMb|O*=lK#S?x!%u1$JM$DB7mtgGe6hVa18$KC=R^w z>GHWAz-Z6UfUC*__Ae^Jnz>SgA$b^A4=!V012Ed#a<;qoZxyQ!e#_S1a2Xl>uWY^N zKeF|fa9Nhze_5tC0ievU`@uh_-PFB^peLZYD6)oB_ES>@$j->W)ud$)FWAp8PW8C1=1Aj&;#@9i8o%Ogmr& zq>m9Mbmes|Yp0LC!$7T<$j9E37jSly*Ybn266rCsR-JR6dDTxWDW1vYMi9izc?Hu0 zUWh++bONb_lxnb5GAr#ARk7uckg3SUguZgnInUZ)#R36n+KvNx9*u|#aOyynFQxAW`@IG8<%st- zM+N&%u3=j9qEr8}Q~z&6?aUl+I%)r5aQ!->;gFMjcqd>DP+q8+If5LRT11?Q`TScE zmW2GbB5cG?r?K;F3+tHZ`uA;zP(+sl*p2NkQ}1x$e^hEh0Rl1qL8%xj#>XAUWTJ@h zgAd3cUY?|mAvGO4=5B%XVV+R}RhC|(A7{yy#|R%cgXjbSsI#xTq>IW%mMB=;VqLgI zOZYIG^E1kt6hDPZOLP6?>N-lCsJtaVS%{!df!W|hvgh*i@t%vjQcurwYMh~a2?=uG zAs6m}&^PU3p6^o%V@?HjYR_lYdFjFO-43*7wHiZQZkBYnQJQzlK*2C}pnq;V$D8tu z|6070nd40l86(qc%qmg}zJmbJu}JrUVFC7>e_)Y8cY3i9pqZ8Po^erH}80X)sZrYMkLCLqe^OR07hKs8{?YFs=Q zVR5&Cqt(VB22_9LgZ-WB*3fldD}i~qKEAmgi7SSDJatcTzo|L+ek4FV0l zyFZ>2I`&kLFT7;=4c&o8N@ZKg>d{2BHTeA_l`-`i$9L%8HZ+`ZdK5+U zqo@qhl51f2xmHw0nAaaVqY(=FJFThu((Ez#eYjSsj8cC&o9w$})kD;DV&isg;s!(S zoPDxYOawR@6A|}=lR!8qk|Ila$DU1Zx8*DylM^e%VW#g=;)JM~LPGW5cRiSX8!%~i zW(&z+Gcps^Tq;fecn~}sT8CgXZeQx8^V7>Bd4b=;p})p@hk_3BNJ7I!(~}^{{Tb%) zJD^RIpYbESG+d*MU~EtAsxh;KlTCX41(MSeBL)`dPCqLwBv-CmO;5=r z8MJBc#%os(oClvGt9ThcPrFifvw{M6U~OdbWL$E`<5}zFM`-r>AA7~Z@}?We#Qci? zpc(a#6t~FDeTZsaD1o}Wfj*dpPiN@Aq_``og8)+8FfZ<6lH!>#!Hpvyy3;oLk7qbj zygY@=U8Mn&kVJGI;aC9bBbPD^gK~cHKa-HD>;F(6u|Jq$0X<8skoLkkj`txr_20U( zV3ell+_)b~+?c)lk~&FRkQAq5o%27MH|XYTn7@{4j($%ML3b z{!onf%d;RA`tp3$;}4jG%qB8}_esricZpJL|K#q}QV#RgVH?VMSe*r+bW=D)DVd7X z!_}fm4RG>#^Z>3Hws!r?g1rea`L7MREG%zA5SUnByA#F;#DEdL13PKU;+;VB@i|Xl zO_~R2tsMAV%6|MVU0dKKUsRiwMH!J9!pTjx6&PaQ*J}$^ zJ-}nba%036IEmz}9`fCbdD`#=qEmAuTTMp_`#Ak`v(W12$XE9rlm%Mw<41lrwPiuAAm ztLMSvK7GMwy*9jY;GBX`zDs!JieY$s!ou-nDVj_=Gc{@jD%#5q^Q-i$-~ML zq?o0To}%6d&#nuj;(7MH_ARg#iX`$M-;9;vZSUFZRq3OGnwq~ ziJ9rK5=bN4xugurng7t_4uz`$E&s;VN;U*-hqLC4a~vEx>b)Ukx78>IDMs4~SHI3w zS7=3i#^f?ye;=R@L`+QS2&%u+XQzK6%L>lE?4z;)5uGA>(stJJDR}=yZYhw&LNa#7 z`$VqFF_lrH!cbvDtqXN2&X_6E?CjG$F3vs@~=FBn- zB227)yJM%(@x$PhKMHHFIXN^JbgvNhU8S7fg%{{rxun)wdh`sU{IXt&35ZRvd;$#CiL~?2jzkM^vDUf<&xlQ8qXldr~5|wU5xH+{^#;2xMh=Q;ovH@QOVy6FY1}4Df$C2?K$WMm-}0 z?jxQ{K-hXLUy_M1Puqdw1A!BFJ()6uYqX_RRUlPpt8wPZ`@VzML;0242H|IiO7d9% zb*b0tE_SJx-M4w5uvEPSFT8WpfOD14LDc5FeW02f%f^KjnHBz_8ymyRNvhy1ic+GP zexm}`T>6MgBiz7|H{{T=hDP{%pim+9361tMW70(C`v^3kBW>7=#+zk+F{RNvScHI`=t8$b*{KBk22LV$y=@^s z(Ws)FpXk)4KKdc=3Es`+8&5f;b61NWjz%O+7;EE-zX!vMPx_CW@7u6>%^GL&!z4CH z;=51@Ht&}`P^~7DrGjJNo{J=dUus_lWD9=&sv-FQa zUxh&j#ACXm62kFIxn^pe34)xcfht-TppnB8ZW=UYp0>Q-2aeiNT`}rcn~4R(Fsr?Y zkMEzNa1~^Z8Ei^oU1F4G0PDqoE7E94o6-x)C5>X_MO}H8yw&hHwfw%yahL~N#I8X0 zxf`WKsu^3e!03E8SV*jhc@BYzspW$QqQ!x&cry=zAnW{o1@atrWj9skV;~ZK*CJtq zVE(`;m-1z5*0#F%j#~n4l2epSF7Fu=PhnpsF4^LM4+wgXTqF|Z!9)K>8+QiBueE~Y z2Q97KVU54IxG}s9`uo3YJmUBq>OevZMsfYG#v}N@G#<-y`~b!&NxF^!3%N31_ru`% z*IMI0Kw#9$;h{IX1T(DXz)?nK)WCjC@Z^LMGiJG2Lb5&{F^19yx+E@=I>kO58-i~j zzZ|8$T$HYOFufmmm~F&QodlzJx0_)dCPClT8iMIb-jJigYmyYoIGIkBE? zib^9jYR^A8sv>K>V=)1l<=1!R6`XF0c7O5`%dKq%_g333S%*Fg)HA!je5#GSkp?>3 z)s^I!>FdZL+biC>QSu>H1p$jw8<8)Xwz)Sj?tTv5e_Rp9H>!ZV)+pDE9=G%(c;5#A zO>yc2!$S@-gBcebnu7zMB`omyb!$jap*B0~PkJpPU19ESJtf)>>?3poNJLv zr-*TQ4-z&VS$D9>XW-?Pl?ZGyB*)X7_sRT7<|D#$T5Ol1c|1cRM+r{fe>r2*OK3=v z%{aOYDv_Rs9$G5ZEBM*2fr$G=(8eV-6c%S933H~P<3YN!+mSCe?ywDGlP(%jdqeeD zzvIC(F3}TOu)XR)G`1xgee#3in*Fle$x5^2hy2_|p-^+1T<+O3wh`Ov&whj@oWMWr z9~fER#(;b+n@JlbVF~{K>xY}Wr9X#Mi66H=`L9r?XHW!e6Okc&qfR12hC)z`L3cFRI2nkTKnb6{l{si1^bV-?GX^=#dpE)66X}u#8 zMqL&4;U!&tt%TR$3(zYfL6Jov_r$p0GaZ?yB9WAkmN^YY>Nl!z8PGdLn#Au~o}V6= zJ^IIQK`=O_fBbpcSpFZU^0E9|o%k=+41$06PXJg>06Mw<-!B8kKh296S>E;}alGpF zibM$@f&Npe`5>6bcL3d|=g4!KKYPOMS=vS`8yL-eD42%j5=_&e`TEhaT9!{HQ+3>E zrCRwWs2H02!=j)JiZS1YM#N4i9BkNDdDI^uoe6RYaFOkoIUNm&;hf$kw= zLwa}?PRw&TWRe!Bb*Z$k<5Cdt3({pM@VAF<&4?RZF`JmVT8`^69lmlXHYH2V1>dA)tQaN^ z3o8%fPL&|{R-e}Ck~9{llarCSnP5~`p3>VA-L`2xVU3u({_++7t%CTU6Y}q|llh;Q z3ZRTi%MLIxVq*MVw*$_}KT@d{(Es|o`9Ht^^AF5_|KxxF#6VyUZ47Pnw`29DG?tU~ z-v?e~WQPHy_IIt!;4n!PdkQxu-|+UH=R$gN$XEG*hLXSR&Y*^kmI+D?JjS5x)>$D% zgDZ7NY?w|rtr*h|e=)s4$?46KOXK(y^0l8Mln=xEBCr=!^f!@x*$bcWFDvsVjN&zZ z$jrv7!tjZKQDuUajY)}tjYV;Sm5K3_IO8@*uy<0UhV>-QJLDXuK$tvo$TFrtYG3Mb z7$Aoc1oOZA_irkM85v)db|1o}-~kW`fJg5GV^2guv0KTU>~HsSbSiQ4EB=&b1{Qm< z$IMX#cSW1s8v*Ot%fbooeMs1mNE*yN$#PVIFh;!nsTw#o-Vx=RH$8*%8p*N%*L;7= zqHlJ&pssePxB#vc$<3Ex+Pg`+_SJ?nZ@x)w3a-C=_BW+BjLfeM07PguC{MQ}6|;Yl8wh7eKGDk9pZjs;lurUq>F~bo`Jmm~H;U62m&^)`>xM>URJ{`m6eQ z4uhT}`y)Y;ypGLCtd@h@G&4x~d|UOxSCgeLJM?F@B7S+lx@*Is&=LXMn`>kyNp6x9uS-d4>3bM$bPb64!jp|v_6zwf4%+zw0N-A;(ae!pUU7fK< zF#ZCjY0oK%5f$N#(mYFaoJoa+qMaF?B_0fA^7rhM7&tAsa>WrwuW?N%04zpgCGt~>t zB-o(DA8{q&TP%|@+Z9#`WVGwk*`3fE_W7J*{cq?s!gLpq^51t4k~hhqUaU|w+MqWm zU|jgYY6kR!E6@1*O%^q$HrAZF<#y+UjmcxiGsX*3Nyd(-?wjdf+mTF*JkNbH6w5c3 zYfG5tkw6*JvJXtjoa(*_a?U;=up;YhSj$Xj`&mSh0I>#>SIsFotGSGWw$7JPIY_bd z1wyR9&FUL2Ez2ml+GkjUstRS@n9pfCg055o-pKf?c(y)fC4}}YhKsxp_wV{Noo9xW zAwp>LOm?MCKYIOerhJ5SVINGD6Nq3v8l@#iymx!{@6O@vN1*Oc`m-^|_%?bBGux}V zEu|Q_2tX|?{9*@9_kIwA!8*N6`APibr5SYfm`#4Rg+m{fd4~}KZYqbFgwj0<+x<+p za!-S6uXfU4%3)vty9kQGVZ|CIp&zao15C(j&#na=|8uLx!#ct;2;5yaO9sRO#VLvY zOc>%NhdtMO&x!CwA_2XXcNxkwNLwPPlmOP8J6AW@@M2>Zd$ia2`YrLbX2;cLOEteJ$QgGySI{bJ zV30qQG4)Y_1sLXUeJb;jLX)9Gjv;)Yo~xZJ;mNMTPbniiqw~Y$MI`jfp>YgpLv_zY z`^DsQ_G~F_tP?>6O4E2b*yoy?Dv#vYg;1&Eq(P}EZJd9u`r)H7K>gQFQb{=CXHRkv zS2P~av8$Wuezstm0QEs|4C6zv@uW&LNsYLQ(Upd_Q9`75g6PLN4~A6NM|A~WcYMAn zo;1imf(A3oza>NecVgooK8-7;egH+zlM58P#@5eSKQxu!cjAKq6gdI4W$Yx}3`vjE z#uB?|v%eNe>c$BBAf_6d60tw{y(Nm-WETMmJ4bOZgCCw4p#%mn`UqZp`@)QgAntNm zb#Gy`FOdl}KVK@hdUY4&Zc#tE;2NwL@%Fp?@+t?1X5*)DWJws{L8f(%1_}B!k0Ua$ zUzK*&$lv@$e7MK z7pKRD;u18 zx(u$P5!}?@P}>h*97C9c^vV0nV*Xq0@qb@TW|mjUvr>!{-~zx3{U-Ik@3>bzcV@z{ zpIr6ij$4sV5t*D*BotX(cFmXVvnN6LCPWeM(U2?4rAO7OMq&+=&5g_J3jxWWHpZst zO~ituz?LS;KN55HWrq1{Ue9hp@B(s`oaZw)&r)_J++&nqn%dg!@<0^Gm~(d$ZW8-u zL1MxTx@DnQY{#{}B9Xw1|9JSfCqWz1!qm*!5HL0eayV#0unq{X>R|nO2KAz>x=g>Z z$my!my%PDl0{9IHTmVv7Q2;L!)(0J6I}svyql2bKe|q}!CV_HP6*NRi3wzYebDaB! zH^_oz1LV*-wgYQ3MBBt65&1Adln8kt2u-xk1eXnYKdTRUlh1V0_Pc-pkXGEPGQpKt zQ#n_M>UO(Y_2wc?b*l%)$F4nx8i%L6_2da*X00@7^9WQj+2n_&W-*Hdx`SJyk`ZLB zlh3>PjYVhmPrw!KQGZT8GQX_}$MU+g(~KJ~1?WYK+$ex!GZ1)?$X`jHM)@o7HzCk- zUe7P!if^N~Zvr9|Q@+?YDM^%(5|@~nW;AQ z_Id`TD$#D~4UY#t+5R>uuMqb4@L{4#Sl$WxetwFh&+}wvi|BP%OK1_fEBl|pwRig_ zy}yYETI!XLEaoz~x(bEp@0x{mmB?M1BYh9Hy!MCD1;=ZWK&5ahmP3qnQHB-llf^Rm zV%7=*tmSR|K{eS!2ODhhtZSww4xt7#*dMBgn04|{I5!IJeNhLHb1*OHhdyv+WoCN! zF1zhinx4%EAEiWBPz9MQA5I_&V-9vvnvOh*i;k3(jf%87#d%_2U?pnk-3gwhm7w-C z`zyO3C&dn8{(?=kUMXSi3>-4?7d5Rb5PMG-pVc$Uu;*Vg)KgNf+4$1-GQp3 z64s2^21z;Q3}0>c_+YK=4%>Lfu&NP+L){w9J<6aDr{I|A=#Bd#p=!~b|pUd zZK6$%$XHncGMz0wB)y@Wv6y6YM&?7$+cjhcRCl_mjgr1ICfBx;Bf?TYTfof_ay=qY zv<;)XJ3>z{w)qqVZ+#lr451&5m8^WolzlIfFG@jrzi;8s4e$PmxiP;D17Kl&or@?) zL;!jYfG*QLKX6@bJGpNkPRxsTAWi=CheWSRl8`J#voT5qjh|FXCNP5ud}akr8k4l; zmBl|Lg;mJ;14_bmMoA;({K?InBT$j8trproh19G7>qtLLeCS`xbZTmeTh3_3xnj?y zZ_oYAZ93)U7_|tMHltGmE%zwk5`CW%KI8vrCa`e8KiYeL{-T3DaeW_dA46F9gibPh z5g1P!*2Lza)je{%ngtwsopr0O(4bSHhNS+h?vfGKW@Qrwlx)XumVI<9F#591hs^f_ zY=Eh_Oklix1sCc*TtY47FvpJspqE*yu%$TqQ3`21!MxbH0)tNEZe*St8s znnT02nECP7Io=FU@Kspxgqg8NvAAjo>TJ~Phq@mvAY7x-5|?QhmTpuW(z`%lBhoQAd+wdsLJF{y{T?H-kxr|>MXTHb!L5Meuz>Cl)PGHu!$pBtvsqHlN z!(~fR=T{UajiF;QIE8*L@|wEgnoU7*mX|7iDr}NaOb9Y&(UvvU!N*l2+Mt6mYBGVP zDb1G8oH-|>=+7b)G=?y2hV0nt+birc7%jLHF0A1mr_K|p&W;`6A3L%azU{sgV+NdI zSDpDCdcmZ7iCtvH4}~7rFy&(ailoM*F3Pk)yb5sa?~ueMWpEE&((qlo>P4B7p9s3X7Au0erZSR@f`p z>nenTZ-`iIU{JAy;9O;|AFe4JUJ95*beAf_-16LX16Inr7z{Uf9UoS2^WqK5JFgWu zfO)_QmuGin9Tf|1r=LL~ta``)atz)COfbD3D^Q9Cz{LPi?DsJ+hC$YLdO53i-?t0d4ahYkji9Ax*>OtReL#2j z3=6y|$MsxEJJtiCkr>&+eoko81sN8gpTzvJ!s`kQD>AlJKquDm# z-6sRVzbx6C5cdDtVwCx9FgRe=^WWh*C3z`Z8pd}^HXft zsHGV1;06TQ)8New_JWkrs)nMHEs-QmdK6fE4-|^(Jk8Z5Y;7D#ni5J3H>FYXX=O z$74Dx!IDt6X$YPz+YO%+!xEVjMhg6ZWrRSJc4;vgSg;!oI$EcJ{@SgWgw#vfn^P8^ z1sjq=7kqnKh-7WuLqk>>f`}&WLxfbWXtmhi47y}duhI;P%*#{0jn$@WYiK5chDwxh z>Uqg@t!riZ07bm-Do{^|Td{x)US>aP1Jx~ngfn6as`E~YOenJ1QH6`df3BD*PJentQdAyGb;g1u zWQE~J^&H8&cqyazph>R!^CYsr zDTXs~yh5}zqh+joe>>6Nq4GKghK!e%`bAMuAO*S`oAY^*<%O~cqI7wC@{#MN)d)@K zKek022`j1BOR5E}j`VQXFo=`Fj!o-vbfH?wSCW7eHm(r8{M0X372dH-qm3xVB2z{I zn&dY8Vx~Nw)@$DjiPnncEn0+q$Xgt-X*qe1EvAU3r<_1w4d|b>dhCn&4J=)kX0+5C zr2p=pDG}%J$_lc(A#og}XYbF#sUr51qR1#PDQ;>XzsH&L_Ph#+W2KxXE0j_u;XKoK zmhqjf;*9$Pb?t#Pt2D2Z8}a&9Is$)K*{raRN;S09{eY_bjlDK zrkk|{dnOs98v?mFk%n2dTuDE3PU$?AK`Opdd$B?NfrlPTIx&-9+TxuyW|38ijGqvW zFmkB(KeIf1`IVOdtU-*x^W_?;aDK^eq@{7%rsUab;Aozlr9NOk+OzTq=0_O|B6mXPscv>zGgP`+m84k;6pm3qDKVl)eG zO~x2tY=#u{@bGZEgC(SOdl*bcOn$-&CS6~Oke7vHW&FZ+1P$pH9$`x96t~dg!)DW& zs57Ts>IT&YdN35*p8NASC#CfvLN3ET-k^xNhw?CY@UN$$igqzkbqz3Qj4zC=17_M{ z^j-ec9R%R(Zy7!0eASIo8vREMM`UtUp#?n392Vm`I18o16Pp*2VkO$C?H#i(A(eGr zhB`))T?}Gp4Y;sh7jd^a|~l`Cr@cbxcr*!<+3L zvfiDSBMDhLiF{2GOt9Y+wBxBc*agfgMUR^JJo{>1qWNdww4MVDw@!T;_nT;27jI*o>9VM&Oa!w46lH&5@#ej1VBy z1m4$)OyY1U%Js3KH_JIyc(tc3K-;0jtLJq)=qXV6Ot~jg@HUTgrP!~) zdZ}a6IajetSklagQhMt0j*G+-v$OdoTGC>M3u#Pv)f$?~B~w^J=p-3_q!LRD?UZ0R zGhFAai^8V;h@)&B77U@Ijsv$kf_Sj*z%Y_Yo;nB75V3X*ncw4P@aHzLzb(o5k4HL6 z03I+2@DC@H#kNmv39r^9 zbGqD`W)swAB=0D$nm{ccYlI2kC!z%VATNU}IwG*|2ME|kllm}yt*^$`3uQV@kS{T} zh$*+b*uz^Luk-|hf$t&bFjOCuKsps0-hnAp){72j8^YO497rO3YNx;Tva{EIxlOOMy65Ko3GwC6 zE;uvW+b974t*kU=wl@_ljIXt7l>iq55Rn0_v|bMaq`J=ao17wB@n_E?q@0=$j2v5r zsI<8m8JKl=0VN@Fr}8F)(eVAG(XupfLZIH0xUKq$l+7D)lgQZgt*jxn#AHdBx#YWX zLd&}vv6+2AGAo(k!#t{;5a>jm1=~`nMPJi2N1$gmWZC1p%voZz(+85R@aBEGNI$r3 zG)|mA*Pr@IaR>{|AvB;hjolTzaQI&wjP=&L0U=)VEd6;8*xuBBW%>`~6`)zt%?}uT zafhaxkiQ7LFhDT`jOSw;f9Xs1|4FWZg3?!uM)N)ZGc}5A9h#3L6_>2A+c}et1A^02 zAu&?jIc%;YjE$o{V_ja)!`^fK^Lq+*X)-!cWof;g>yBPP6z4F#bbXHY|Y5=3bvN{eOi8V7+ZW0 zJ~QcH|1XEJV9)|=xQnP(xy;;G%J}rKi}#Kcr2zeE{UmtQDcYZpa_K;s?mjB`3{SGN zjC8NT-t!dhm>tDT9o`pGtF9)_;r5P=jMe$|RVR#(21d-nENt(kCoy|e_4Px@gA6%U!#4|QkEUR)g5@j(Sv%%=Tpg*X8m1XECO@F0U}DU z3_7|-dRPMeESZO@kAyPB`#~F*?%8Tnrkl@QNF}A3N5#o9TqF?C^f-7yb6zroo^WhR zgNw7XRJaH*BE>K(uxCkDuxL8xPFoXV6_t))lAas1)|2e#Xyz@D*a=UOhPJi5TLS*d ztb_5D?|+5ckZ2s6=bZ+&I3sNmlAvB|xpH1o~n#EyJ}|LFlWxv$egRV|71^Z;>>rmaDc$Oga8w6{1?YajyL6cOs|`? z|4~gv*404zDSnRTI26)<0*=B!Gx4MF1AXz3)d5sfS^eh^Ty@AOvv#>T{_87YEut`K zie2k0V*$i9^HRN87=GK1p^u}1qSam_S4^rnRI}kUGQd6vL$W_;Dw;zod&$vSFagyR zp5skcUPF5Ab02WLf0QBSyTgJhsch{OV8YWncTx)aqbl<8@0)g$?$TStykKQ%vcDy0QIlG1Z^HC-=LU@*)o2_~RV1 zyiJ&q@hNYc(=EV2Z-Dd!sz_@|GXK)L+lPdwzVF4%nCofoBdU21CKt_ol;g9BEI%inZP` z!FrEaP#HXbjuh(Pw~EgjgKdlc?FDChy+iSg?^_$?1@`6$Ok)Ta1)-pGX{g%!9{O)# zUE~Zn+2Hg@o6UQI0fF}1B6zia3Jn-laQB6`&1*=M?A$w;6g_&n)O0DNz|buCRSj5N zTyWC*Bfa5D4MD1ova9$pqYdZ@gO4eNyeI_5U*ReD0XAL zO5OR|kBsQ(e83WcTC>X&zpd9%X;ad&8jFWHh09#C`IJ3cdIBS=G@<_G9K0#3V`hH^ zKFI(Y>BIoM@rBc$egdfuxZAl3>qzVx$nL>;c9M)(By*8XM9KSRwRGvw@d(Ee$l)-u z{=CNQsLHdHt3q#nF$}e~c9ZqR_~PAt)fe@$>#Q`84?vJHxsB{=)lU|f=4!PBky|5E zVV}Le?Qj{2eTnUNo=qQ>I+{mo>>UgseNW_h5zND~ZxahM_DK_-&v*nF8uJ1C!#Q7x zMMSJw&YjMvdW5-a=KJ{W$DCY+NZHbC>7$wrwf;Qjdoa3s9#F5R<Xnp*NZ9N(RTFLzwF(ondpc?LOrjr?b z$(>r=%gy3zNKWlbjh9TOE^N`C>qIgIXG_#F6lnHbG#UG+G>)|Pyyl#`p`>w8$%W9x z)aJ_RlwiFjRE}RtIx>gAFV`9Kj-5|fn8sjzHBlATA--r|+esIypiRc(G%os^{zCksij-=a8EShLo20uGXTtU2E* zCSSL;X_Gj6{}B}EqDsC zeFmq;Q6;0DoNG;tdwR;jk)i5{pG#4}3QFNzh+^i9>quL~nCVia7Ug_P({b8-m87Mi z&uA!xt3C^jNmWH>kgPgjhCr1YCxj-hcR(;V3+DT&%Y-62$X0b zQf>^2iV>1uw8iFI4P@oafnzEdm>I7G`cd-2WQq617ULuW#|7F;cjr$RtqVZuy5KCk zsz*^$$yG8V;L71NYv)B8I%S;L^gj`S`E!BnmgHy%bxADOcU42p8DfO=Ab;{f;fk;( zbI^b&8nbFQExW~Qbm_;!CpBG`yE!Lfe(8K9I3WQ}hnm5_r6MIWWf-)dB9SPi7|)vs z@}#AU?c5;La7!sbp{Sb#b|HtkM4RX2Ba*V_N*xZd5x5FruSjK2HO?UD>8b4$ox$+U zsLtIEm+aUAv$P81Vu2iw}7!9}#x;X?lJQ~%#gEPbCZ?&gLT_9174;p*l z{RyO(Y`Q?79q_VhfG`eG=V}SS2C&=lh-A~n4Z!s2!kCE$3is9FAN=AgtpaiXuqBZ_ z5}$X0t#5d5>}l>De)5+~_9pC+`E^2~87ok=^$)Tqh;EIFB<^!z@M})n>9{@35~E+1 z?JRVe7R$T#2bEIOFr(UleIo2#cJ3^tnDEe=9_RMJH$63AMiJcjOc^ba@}&fNY~h9uAvcYg`2*FYR~nO6TP6RVyA1rSk)}(O=H=8DlWl_ z=i<*wCdh?I<^0ygSj=#26;TOr>zZl=6-N07o}xQP!_%(N1pkUN_g|W~;C{HRylrF&=3I zLy*RqSIu+JT=T(pHuDz0?V&Z^f>EiaZLpzVwrT&~AVk-R96$ev+y&zfzb5L5C zfFtvx5)FP(2LgL7Kfb`N*-!}H$b0H{kmJeDS{zu|vtc%DTIm$3!)D@OK2Eqr3u<}=i(1xikSxaxGQNc`003|3w^;urnF(v^%eakC8`@! zob{dn2b(@MFQPe^a#OG1;jX2FY$yC_;yoYS@j$F&(>boy#GukCqD)csqOwgpmbMTQoZ)=yVDBeOxEBLDg5>%`XtWsjGhrfz1 zddb6x_Y``(VjDO6(&`Wnu5Tjajz85Ead}~?O(4*F?-Nq6@UBXgXI!b{8hUG5dNzXt z15ca2o2^_^#!##B`x ztP;PYoadbHEpszq&Sg!*2;=n? z=-?e5(?VVvrqw0mf>+D*EL17ERwA3;hZ#!MtT;T4xZo?Ka6zi9WTwy`xq6@};MhUG z%*tWH;IspNn#>p2R_5RyKocee*uy>bHF@C1#)Czq{v_%P2xi*|OY+5~`;IVkM-(r} zMQEsiktf>EJ)PsnY(I|_p8?JpsKaM_o=N=;hJq#Z7!@h3i9uT2R({K+_6grjw4d`C zr`=7l@XuZy3;UaD_y5|SJQMrdZuNg^ro8ekSgOf|(0ykD%X=BvUHAq0sAN1Tn0c65>&fv%6$|{vYc8GOX(L-2#Q_ zZVBn`o^*GIbc3YQC0)|p-6bvE-5}kel%$k2NXwbH_TKMevG%*U&Zqym{NQvlnf{)- zpF74qhW6+b3jt6r4s0v~AODf9O57Q?w(GEH+1tJUyA&xlPuJn?jKp%q%3E7;+-!Y0 zaGWokyQ()FT#rH^-1wfa>P3u!LLg}pe}q8dryE_0qw_L=LLjDswN^b7dmr^2$paPd zB@Nei@!~E-+^v&c%BOFuN?Dv`@?dw9F3ru!L(5KS>@!q)HCkg)2o!I~21%J_oWn+I52dk>cMD7FWJh#!C1wn>m>43N!-c~W7#Ub7*FvGHf(S93R zT|bu>lAk`ESc(cz@;aAPYl8E*ti5>~^f21EkJ`p`{ZcR1DWl%*k7ezk%I1 zAu2zP2lL{{-?)Ea3pqxAFI9#4bLHgq61T*wkX6XtbKZD}Hllua3ay#G$r0iQ!)MHyALLkW&in?>n4nnAni6AK~Lyv*es(L28O&G2+R*g?GH zYbD0m{7fmx-E2cnyv+j+UhCUuR}R8H?m2f^g)#8zG$6JSn>R|z;%B~5abm}x3nIGBc(Iady@r}|CgKU@q|MOKOk<&a)Zq3rdVUkhZf7!=S9^Vd)6l!2 zFaDg0^^duvceF_QJ$ID5pFR+IxYRF6);UJE{lRMfYPTF2iC?0F+6 zPDiE#{lr@-gJehScH{+)<>asHgzWqv$~Vdg2aNdmue>I_k>=UlZtb>L~4u*r<#qZ{!I2g`z*Ji zi~KgEr5ywJ^lqh6XPuPrO^VLZ^omUnw4nrO%sF_K)R5%wPRG8_noxBvQ0gB}x@#1e zd4L4eFKNX@BhJg}t=u5X4?_FCOlXaSRgu#fngfTrQ zY6WS$TZ{eSR+Jw3rH+!82N%GwpK(RpOY;R()|{l}qGq#+!2B#Q-z!j`@7P zUbeNLDHaJK1w3wTAYx+z!Zc{^%+%|*@KHyd(#Bx`HbHWU@FbWClS0B*u%M7#o@O!; zO8F|Lc>Y%vk;0LXj#N%k4vxlQ2Qg6ZkBbV<(J#$T9rM4g`qpI($Qu{W2Ojz9{yvSv z^@Aad|Ci@|(arx4zCyN0W+V}27!harE=Uq=v|#(px2pIHw-t_S&RvWeoa`WQb=chL zM)LfX7Y2q^@B-_*&5A2b547j8{UTA!7_0m8&AnAP^vGQk`dnu0S|vt%oMSzzLoI?f zBwEu&HR;AE0tWDx=J@+qPU@b+GMT54=t30F+Zb8?KYk0dywGiY8eq}`Cm(1BA>8$< z2rK;$=vFVuxOHQ0Ke{93;eMSJR9B_4M5Q;?;H^YZPtuSQa8(muLi><&&_zEH80m{0 zs*E-$n5Z*6V`v)`MRU;5Xmjp5BgPFc9sAX9V2-I(ApJBU>JD^^nkeYmW?_99I0wM; z#A|rUX`1dIjp^Uzh<2QVy!Q*-*z5q#T&i@-@1Z>wPiaTUFvyjurPX>Yf(`VFhilf* zdqqQzvnd5#ILNQcvH{vkr7`F3v!Yx7rzYJ3ZzCi3Fa98_gfSUl^p(Z6`^P>f98;40 zNR`(mi@}TEZVB-wp{O)8ef#+-+9V%nBp@=a7R4o2{7rEAK8B9>k^W>^DFd1VPFJ8g zzz2GXR6;rx`5*^4~If8a=fnjeoil1F}fMt$$MA-qvxxnbwO7m>=y zBGld3KlbDRb8uYKG1e-~)G6)8l4STS;a(D2RvwlJdYxz;Yf8}KNqm!(Oqc<1&1Ym4 z3r1sW&E6#gAMQBSu&?78U`|b12Dt!w2dTdrWfq{V%>+mh_*A#azp?XYYDDm?5%R$` zO542d7sO~;lW!#RGQ0$EI+co1XlT$$VyP6vpIiJIK%esU>Y?Z_s_DbGe1$NW+yx^; zE=3ehyGo)p(B<1Hn;HkvFvNiFQ4}NX?mNHsS#X%EbU&RpjAFWUb{vRl0WAcO%g{)S zIUa!Xp=?|3)-EJ^Y3H5i6zq#lhUs@57(}@(F0Xuy6417>w*HrCeUSsp!tw-r3Pcer z0aY#+JCv`$Z2G^G@xQ?i6l;3Gr1k;hxtNV5=PD@41;`vG5aUy@Y>qPEDjzBmXU)S2 z9J}f_f!3FQwB?32zw4In)KWq!&KHs1D0S7rhT92kl2uwDYqIxEkck@D*t?4%<=(Ha z6FAnm^`=lVp0?l1)I)HoH0&uVEXf&*ybPWewY>;@8Ob z&ZzbZgh#&@m+UR164462)CU8oVDroF-tlD)LSZ_MDy72u~0;0lb%~D|3(PEEn5Rqf77)n z`qRcM(cny6O&(YeB)PErtO^(tRwI&}q~tpN4&uJ>WweE!OatDm__9xa*{fbM z)-G!8-AvzZFCZtr`Og2#db}vr{2v<-vAzro3V14)tQtLN1rF?AJ1X%-gh6pGCV&n^ zmVcP{kgnfo8sSAjf9N(sz=@ajOr4C)cDPyVCzv5k_FAm91GaydfMI=sREFHiA*_WA zC&KD-Brv9p94SlTRDk-0;Fmc(@Jo9~;|G_$#o34QodGM0w=Si8S}8}|L)H7dR~|WY zPVq(ZB07?(EGE=kJn_|fEx5m8Y4ek~6g#p{+JlTG11l&FL`;VynOS1Fic5+uy7OEh=R;#_?7tp^o#lxZ%21gvk{iU7AZp&u zJO7mX(sOtOAGIve(jc&D_x`yL!TLg!%YQ1Si}huSzW~;!DBBpB*ghcGal70XF;7~7 zznoIH0#JD=U}gO?X`GB;a0{#(C_#cQt<74HBlP3ECtoU%F5C;t2|hL8A_8SZn`gLc z{by>3jP5n9D-p!m97$C~Yh%4^_{UVrLDfTwa-`2E{Rtn?!>cquXlz~fHlZkwtOMdZq2`Im&2TEuQ&D#)DuNUI) zZ0Pb)>|-bXv8A;LQbUL+;VTqs0$2sz)>S;u!A}WWf!l#Ip6q2e(9Ygv91iy8p*OL9 zm}zRZ0$L8)R0g^0+B^cKt5aONEX)CF`_xbyl~UU~&1>J%&$(4cGI~(zP$;`>CsF!b zf`?3?+O34RXAs(?>9LQOYI81fGo(1sqxyCm!^es%>kX`kjp(FEHr5HOa%*J}V3a2y zrr9lo`bM>WRtU$kIZ7KMzam~jlZyn=`zfqRGsz}M6dIL_m@i9*(A^V357|rp2|N#0 zv3wp}okA+qG4IBk%2bSYo}Ds?BtfAYkq*f@roB9Jk|FApJN)})#Ib(+A|Y3?-*ZSi z>kC^lo)XRI#z@)sK8ha!Rg!HnaD2`<6HdE5AFSFHDDA3+kk83kZI3dzH4BYOv$x{< z^N_83{31IqW<}N4bUAI8$X)bd%bOc_ob}gvn40g4K2|}fr`<5D&vND-Gt^2h`9deI znp?|5w~*RKa;yZ9AOPPffwMK4exvhEW`Jo`voGS}iD*rw%|2iky zi4*d|RN_HNo-I!hq+m)S(V{nyBW}r$lQlUEDOG;$t5o@BFB$h#w5=M^1hXL*%U*lz zH3=d5L|3}i8n*W@^xfzIie0^vuEgK>EmMN@W~2^_ugcCSvdl8fyJ_KTvOwP+)OdpW zCRpY?zs_D3S^T3f?a|W(DyJ{sV$`(i>Wq9El?FSY_o2JVHWTRFd5n5PG&hev|FDPG zrTV~$Jca4RT0<)QuHIQ9YKB*Zcxbo6>0q=Ks=ynoR0133Hm!GmvCgFd>?56plraJZP0`~mYYF0&OH;xyCq5e9}^o3lua~BmUJtzMT9*$&U`I0@_>P_yXNzI=$sQTq(S`B+fQ|+Vx5rlAAMKUFNfF7W zc?$ifahnNG+>ea6ZS8a0H=xNr(Q5y)<6i`n`H%H^*#Ix{*#TTnW2k7kNFcLTz@ywl z^6@9%?cKpVEY-{JV&Btt5D**&rrr3?KgtTLT*GpC@vc@;cLK(cP7NiNXDvEkV$a7mwDZ`HC$+} z_NkH?;!JNjm9x`?7XAq~~3*+Q`ndDX^=+waHNO0yW zCL-%u=9Wm;;&4$^1vw2{=9+?Qao%wEKt1(Ch;=0W=@p5;ZwZxZn&Dv)C`f=LO-jx2M;5%q%-m;;*A;gX`KBN^&L-W% zYRqKJx-djKZh3zvAUJLFXLQd>)z?XmK4T%bKag;GAkKig`)wC?N0Rl2eS)=uRC2btDAqoxskOw{VK!trtGS> zM9;JkV4OTtw@anBMO~+JB9(xQJ0NQu)A3d{(>mL8DaC$$aa0-{`GK*6Cny11t$^A~ z0ZS+huTBG6w^U(!Tqr56vxRHkdF*}&9Mgm`rjpWEkbWqbxRogUYhQ05n#7E&Wj5!8 z7#DeNK6)}$uwuWOS}#?IqP2*j=MkloV2AX+%ZP$rM$bt=MnKbKZ>`T4tpn3Rv2jLW zvxL6q6aO;LgcJPcyb=C03FK)jpTr6awyFY z^RsIM4cu-*+i9*ZnNm1!Xck3igZAGlMR~_J83xHQVqDHjtDE~E*=%sCg10N?9u{)A zmVaO@<7cH7vH%cc2Di%@i77|ECWk%$c)r&J#K6uo1pmtzUgU~0vp(rM5&Q49S$-f$ z$(V&b>nty{ndtI6rmccHZ|4XvTzY`2zcOT_WZGg>tdlLx$`!FGES~X%;66LCw)gfB zmKCeye7!4dkn9a&cU-(Se|ECfc-Hqu`NKFxWC^ZY(Rl8;7u*^cvEYTgIe;w zc_Vk*_6-n zLv41QlmuRdOEij*Fhw_J$ieGmv8N~P?R&#zEqQ@(+1gw>?98v z-k|_u@;JT)LpX2vetsj_6~+t2KI;+(4`gv6(9tqc=KByc#7mZG_yI&7$2E+b!5Xf( z^Btw&WDZuT`5qenF5UxW!I+al%=t|iQq1>a-7&(X5dO0FJ~laGjA&o_$R^}T+ECRo z`1$cx?z@E@+jg8(?1%;CzZ>_QND=mx@;=W>09aq-05Sg~Q8X@u1mt~&oZu^51*7Q3 znmPN*s#^;@k0~hyHB1lW-k|4W33VS%%n+dAuZZ)4`17VYKunC=9Q6F(fo^aRzlZ*0 zo>z%v%%D_8of0S0Dr*;|RDHd4HfmEFsLy_9$B3nJN9D%$6B1!#<|JXp?$cGHX_eIe zZNXW;7^B-1*5C>N>iOC+y=(_QZD?bQtDX&BQN`4y4n&K%P}HA? ztA|V9FdNL`+MvTuWlTq)&&lIpJ7r!~fkpJCp&3z;#(CDFv4`mOIw1_#xDm+`+ZR-r zPg9oB-%Jiw=cS|0`|eTRd^iNKT96pT1)~2bjFxVEM>Iz>d(G&7CnsRg2Oxbu4Ca?@ z!KdXDvB*D!z<;2v`rQ(u(%;Ed@JswB34L)1n@QcTA#kmMG%tcV>Wk;&0Q}7`%9>cecQ7UTdq+0l4|6Ls6VoG) zGz$^)pML@=ryt*8BC>+}>kZ34fB*Re@a2Dh_^+4$E9*3X^<|d~#}l0~z9=a;AgQX@ zWo9=#jNOoJrg^Gf-eHH891SEWAI85Q8TM_&tT#WwW=YLi)ZQ->+W zAQa<_A9wD)dC}PIhh5JeNSy=N5zj?coG(;n=*C9IVrKNikmlq<60iNM`;yI(rdU=y z0x0hU?dkhDB)^5>5!dp|MN^o?BxiQJ3NaS-u^X?txEY9Gc4G@tP{wQAHnV`O1M2Wy zb1NpUx(P)%g<77^_sc{%n4fAz(Ldg-f8Y(ki)h{EmbW;UVG5`MO+iZ#t`FrbAxw%l zO~I{tX}~mm<9C>){AEc>`ZQK_T-5wqj5@V1RuL|eqC{APND^D4QYbX(YsXP`jHp0( z&f1vb$k+_y9G<$2*zGa!Qmvlq5tx`vL&m%&@lWMiCf2sax6l!M{jTF~{%8-U;F~C-EwPSMh4qL3EKqicJt>r?a z4z$pZOO&$Jb%&x89^2sr$v(H!-xu!i$9`8b5@Zat2U9iEO{}B~WOt83@O=Cday!yH z6uyfvYdkTmBiDCIj<5>61nI|7CMKRt%!9ws4*WtVRET2C0`QI9X7?rnj1-M&K3kSR z1;9Fg@=$y)UcfLFu@kVrT5W$aLtqKp*-h0=@A=EAp<{vA9wO1y9NJ>9o`7>5-ePp9 z|JR_Bx4|v{PFjsfitj7U0n5X)&4)QUQ26d+_YM4?B#s05#$T;wb(6ZjJCITFXPdQOM`(tHDke#B$yM8QE=y$USR+@hyS6oQVswNi)I8 zu0G3Ze{d2FRWycb^N<4k?8HhACJ5^q-dL@fpV@1{kO*!;#q<7Q#xA)#hiu#IAU`74 zE;Xa7qTssV136_+)mI zfb3fwo(RlqEjM>BG#hneeT9?R4AoJX36zk>O0po}X-{H-j-qr(ze zJNBj}=Ka;pb+TrDiAn>5o}9}HzfLmRShsu)LBN-yw1MQWso>P*)@Q2V^bsybk|fj$ zrPk)ulJk^5m?7o7=Z>zYNWAgEP$6j`@E{yubTS`j^T9&=D&yL{2$Z02#xG>l17%VCB z6=te_Q*{NyD+-u~fQuxiggIR$@dWaoj&AG&%GOt6WEsyN`DLV`%ul81=p%qAHR8WK zWKoeBB*);7n(!b6$J`^8z#qfX@SN-J7-O~4s3lUO z8O3xQ44Z`4;5~)R|1$A_7jCL2Cywo}%kz&4gD5~?&}_(_|EOiI2IJRGFVY(5N}{r_ro6bO zQa^ume`fm3=t72cF%meN?#ho8k(P{s%UmG6v)qi!PlV1vI?ILY$Jvc(RTy?)Fi9gsPNvq5$pII;gu9do%)t?29C`YD7C2I!SfNnOhJm7?TK;ci{wB8 z7eWAcZxbfe5VY%YALDG~eCS}~_?jT@gKp%2Iky?RhPOP~7SDw8JGvy7Kaa1mh%Gw= z{BvarSYS`47#@C9t>B$vT_+<05t?@ONc$x-(TZ`k`IO`F5~rrr;kv zaX4PPLmERjj)P$1+HGHy*5UgMus50ZbI$#GC^RbAf&Z}OHZAwIfRtVG`RJHmw4VP^ zR%HWX*MRJt5RdGfuVEiL)8FS(g#qcu9KdZ@;t@pZy(Ao9G%68TpuZu2R0UFO_e&d~djCeXsX6;0Jy3 z>kMi%5;p-`5=%Tz%XkC?Uth!>f%&eTb5s0**D9}!4D{nZ!FGNb1aVsMe>+cr-b~l4 z)>6rRA&MK``_X_&jn{0|B0I1ubyG*Tl5 z**Na5-0abyehVt)B7XRM+)OWumH$B#I41Q+(H)q)xWZyWMGZQuHEXT}CNHX_HbS8d zlvG7)0~N%g-D`guR}1%w&=L}e&{GUn4+cWz-zZaX`DzPM>2`)7M%Yalp7Jm6(%wfP zpZ%1>YKway@cfr2e32{1{M1vH8~d{|5Wq*=f!7Ei;{E^>*3wJ{CT&UOt52!3=0-YE z#IZ}56g&86XU(Yq2!ydB3bF`s@w4A(Rlv5r>qDnJPlXmNCvO*2*^4rf4q$)m!1wQ6 z%cPta42%s>cy_$Sv-tc#jQxHZex#h#3Dnx6_o(R3P0TXy{L z#!TQ~7<(#AS}lYPmpBrg`RnhQL^%bnd>na2%-1-(9&r&TK?&;=3D-RX6a^};`0Okl z-h>bADq?q*-TH`Cx=xtG$s()dis9DDLD7hK_LirZ_fpKBPc98AE7mMfBvi7lw7a65 zaSvTehUuN>A;(ej$v+?Q%S0lWpNd?v0rN0GQ81B9E-?mgQ7?!wmf51PU%wZ*nRK_- zAQssvo%M$3NxrFl*(Zm{IZHCe`SE`IUAs3;SXxW4eOBo-c-L~>Z9~80Fv{)othaJ zhN4T?2JUK*KEM{PCGU>J7fH3;(DxUW3W@WH>3QP*uKM}e6D0Op@;T=Mfca%MpYw^6 zCl)322qpwtNniLpI0(`4xZ<}TW11eEaHIgVnGsG6J$}jlDUk~K#Q0wb&5D`s*;RX5 zQ_DhttSx!(unKFeRI+(^S>rA9s$UP|;zN}S2T4UkAAXAmbM9%2F#54rL_$-uYH8E7 zZ|zuT6PIth>l=#uMN-$5*E9p39y5C!tRb@v%}UU(-74O_>)Pi2hd&?l9uL$o?x_DYo7EG$!ot=I6*vkl?IWDR`1c?sUicNtmuSS*>F_a zj2H3{<4IPxy*Hx7W{FDWsltE~igqbm;3}MKug2RFDA4yo4{l6*AAbHGp8q(IkUoWG z;rWEJy)5C(_QZ$ai{g50&=GZ)XU4ih`~1hJjsYf|HLj`Y1QM}{R60?5Fsxzp6h83! z`){oV#h*n-di!^OUGoh(3G=&j_@gwA zwjHUrya3j@=Obi(QCRf!z_4&sKkB0WPkw|20R8v;NWUOAwCp}kS~6%#L4U!3Y&4xH zu0K>7xN1NzD>J|k+ppK3%3C`NypH3)Wb^KF@&Co+VR_M$F|$1>yU9g8`fmu}&Oq;; zNq;cWxPww`BIo`=OPV2+VU3(ZPQ0h_Lt316ul~UhH?)9%AXb~yv1}}x=6VtB+xQ6t zO2&naC|eDhW*0}y@1<(?F-h!-R8yhO!$(bmj-+2#RpYa!jzYsS$-sp;hNYO1f2{nV zqJ~MaC172%-+HSG08P8)eC;KhpCB{zc_=pN0j}o006EToG_5p%{ zv{Bu&ObY&Qx)nJ&ILXG1>hjE;SBV=TLZsK3;nZs|#LlLtQAXp4DS}dK2BKr|dIoO= zqQ=VKxHkxJH_|aa9|hBkGPeMxCl;4JdN|^dDEp{f81XgJMcw|OVP(*_-xai)O})tI zB(VS%t=^z_rqP)qC^udD^SK?w+rn}M+8vzo06_7#7t?hRn|PArk-4EiK*?#GS(tgE&H z$FT`S|H<#{9_&%iP6|H^Mv4Q)b5eY5fGTSu-z0D4fUMG*52I$5DNDA2X^sNFXN-P(CRAeq{L2-?`m!6AvJBd%evy=H zYrj|14VTKfCHrnKNAG2uTJETbp`D|Uw!?WRABT;FN+i~es4@BA@S#0*Fqn{FWe6pgIWGPYKj(a9T7AWbxK_ETc!%j&j@Lx`99V#PTg&fKc=E zB?Y`_Nx7a>zUAZx5j&X>ZrtG*Q3lo1jk8MjNS7b9w_|U>z{MN6&;Y0fxuMo*+kH&v z-B^ug`dP`Mb z!lHk9%ohbq%>Ss5MhHDt=>O!n?nFgV9(UgKt=$&>Y))KClMq zm}R<6J=oUl&9dT_(?>(QmZ)BqfZ^d6+_4MoF${PvxCeNdNCop#_z@d0M+)rB1b-xM zRq2+WB0m}|*(1Jxa3tQ%MKNi+quZMG}{geMj2xCaq6Y>8BMd5NAo!9>T+WmkGoTI;Y^gDI8 z;{RCm9NnsM zP~I5GA#5n1pG%T`RAuH?`OtyM%EwGLLPRoP3O<-j+;r=NK|{Kl&;50qWDK#`3A~1c zt;#cXhMU3)!E=(3JCDE_?oxjitv);PCtt((C#gq$W3DzFljqL}EUq&V{h!PCkKB-I zR0|@|QxbKT>w<&`-rVK*%P6OjZlRlvP!6}c6U^mFITwFG-enilCD5{@@C@w%^ROv? z2S%{(tph1I)#AM$!BYQ`Wy57_1Nk=9N1^zuyaT_5Go}L+u%Td%+ZMyb!|)39{ep@f zTwHt@n*c(kSq$FJIUpZH?UfCu?Mc$*eIz1Ayri=RD_Kc} z!+TIG{K8Xpe4O!9$Za;k&gbK1eNngrV0wDdMg!w_VEguOHH>Y$S2UCwx3cv)(k{4_kq)`9-}3}{91 zs=CokH4j~81dNa9`;=T(wCu_u--C45v-tnZ@LrZ@13UrD^8t?{5Qg`M&Rf=(B=}K@ z+VA#Zzn(M2FUK_Jc!y3$^lGo z|H6*QMera2skr|zJwy+2tnsVP61P1pMAIly3WQs>z!N0<&HyIL%HxP-2v_yE6VcM- z@YL) zlX{9O@ZJ@EEK2{O&v?CXI<9P_vvc2&SOTwphW6Se102q&R*EE7 z_DLK(`6P(XpZaCW-v1!|5CcB-ADZ`DIDY-XmOwJEHzh^Tmk;yNy;jJgio3{-3(-`u&TOR)a;Zo1O0cgr zaaVsMv1j3W{5i0EM9%?)Ts`t!08RhnHv!*zd}Rd(2>yNnnzTmSLn$$UBGy;u2Z5Kcr2sLuT z%KSzrGc@XJxVUvi+Ln(b9W?^m3a(!J58dQP)kgvgZ8>z9 zd>g;depr@8d~@xdM57)gz##dFc{plEcHXuLPhQ59^)GYyqU^#y;#Rh3sYqaT?Z0xr z6kyvq7Z+H|m*4BbRdHPmZ7n4roFlvF`M5+i!aw?#!Z#$}Ni570!){YVLR&96VB5q7 zsI&WHWTlO6atl-r7U(%3df!0yRqtl&SGD@B_@uROTG-rw4St6CBrY5s1VI(*!oHgS(I(Xf9vQlVPB2w!Q;k!Cr~Lx?505BulqURm1jI+ zP=v;qd7B6PBD^W_MlQS?-h^F+gT0oE-*1wOpx>Z)4pO<#riArn1!MsG69cOoJ#OvC zgwTKF3P;!?0$Ho8N$xLd2IRnx62Al?W~Q5hQG|hB@scm%HVYCJ82)YfF>>fe$zqG> zrt*{Ngiv8^EoVdx1`Pc#=^A5bC0OUEZbm3;4bk;?DR@YAhvJDQAd{3Pl<%>=qT5@Z zgoquf<*GIZjjDfBSQ_cSTlHQL8ac%ybDG&rNaNrq5*4a1Bi~BUuFt#v+(-{)fVFPC zEFO+V*#oIn?ryA!w;ipjI;JrEvB^QTHsk6?B8_qhuTI5n`c>^I%SqL-4t`{BAHS`Z zYdKg)ddN6!7H`tvP!iMG%JQ2_EVr*{HFcX*>C74@6!HCE@<&ZuhdSO;{r3D966crp zc0DnqVv2uCw~HS_bwEN;PI=yZE(vqJ{66=i_`pycD!tdqp^RLnewgl#TeW&iSt4x+ z!PzxpFFs{;7Rj4x5QNI{`gJj`bCIifu1kTBvj#4R8A#IQ{1Nu|p7Yl2wtjv&>ku4o z3mtk1TsAd93wUlhc&y5TjNY(nAJs7K5~N_$_rLwHWkBV^&V&)Pvgdk3 z4HNBFD;Pp8zi529w>T&EPk9f~))a#_KgA9!J=O-ozK>CMH-pRHlYwd$s%$Cf4Sjy~ zj=|}G{Wb-4WjE8GqfEiL2wEBEdyIWD97S_#i#bH&nKcsYjm;OQ8CAEQNGQ&1d3vqV zg232rGxp{f;jR#U%5!m{gZ_FyB>APSd+{!v_I~7aZgZRGd-i1w6aOfZtH$sEs~-p= z?peZEuRCvsx4-Gf7}`Iu8?%2UnjNT?6tHtRqStn4(ec!hPYE9mD(9t8FBzI2GWkkHMEuLV?4w(n>r>ChHgO-6?~UQ=TS#+*<= zt@6PI^h>s!<{&~Ux8TttodDpknbSqW%kPIS^bXR8<7ssE3G80)8u%x028$@cAnzmg z!4m3YejkeI-V-D>*?6lH2QVeQ<{~nDz)Jo(eu3EEtx5JT^Y=2J@o9bak4DO)qE2f! zpejUV}2q~YfNts|8?(P6HWGiyI zhe2Mq2I};MC|DxoOMABU(R;CV)pn;c`Rsq0h8OvkEKl?Nk8*#H5!53GtiB-n!?u*7 z1CSDLF(={cm^AXb?K$@8Yd{y9hl{wQFg?PL6FBf3iqVY<q53(Gg{>=K)Gl9tjiV?`Rke6MbT@AZo)ZH}e>MsZ^1(JQ; zhpXI9$gvjSr5d=$U*3?eBE1KqI+_6)k^iz%fAgOH_jsJ;sRn_Zl9V+t-~30x8l+4Q zs0@}Ya`Rvz|r82 zmCj8(ZQ?MDhvLVE0LeX+58#qm!w|{FsFAVI%KV+Pd@#yfaW~*!t+R z29P&ZJXDx6KNEfRP`liHm@ZX{`#=>$8P~ei_)$O0+k`onj9sVPK!^RH#WUwg61xLWT4nQC_0Jrd_)ZMdZe60 zi%E)E4?MM|76GzQ$>-q)) ztwU7b(;2?wn(ej80yqZ5wZu~!TDBtX714h6#U<#f*_u%Ph|har@;g9z&#itnkov4+ z5HU)hqsc(p^Hq=T@(GN}J^Y&u`o=ZbijlWeTJJ8BfbXr;%w~5SAcGrukw2g4mvyhP zJS97jQ<8~%RQ%mW*CA563QT`5{>Em~^WoqtwVVaJDrT2HLi1cKdAmt{VY>M)`FHLT znRf@IM~XlNGi{|D5PT)`5sqsd?7Wg8i%lfnB+OPq(GS=XDkpk?$K z6%o3&^2B3sc_Ore>dCo9$e+8aE|URd0`zcT)k2KH;c`;`Et3N%58f#XAd)c&5;|Bj z)mh5n6v>3T=-;4~A>!L4-jW9&ML4x%k#&JKtQx2JCiP@eIY90dQ6&jCTuU0=kfIX($AH-(5Ct%~%L{g8NOHe_vI5A?UG+YTsS`k|%cq-MIp zZfb%t!`ODL#_WhAJ)#O*IqKe89-i2j{$Wt?M1ts_diyHuHiwW&leG#pCU2uc<9@A= zDP*Tf_*rGV&)^*%k8L{nxB>0)J@)kZBEGcs?ukSB7@7YiW!6nt)SH^8_fYsp_zp2T zx&+Ij79lLBL=N}PGiIRxyty73f`dS5Ei-{j<11;LFn{lG<4yp zPgQh`Ku#AM<(pYDz74X&Ij;4Yg|0_V7wD=F2(&*V7cQ&=v--}|@sP(xX_=UIo$(%V#C=i$eM(0vwUmFoji zTgRO zp>i#u6Xd3Ra;G z7{;ZU^_4^_h_zM>H2!u78#V;0;zxs}7P4pDqa!`9VCp5bPsJaq#_}O|fCu}-t*j6__ zaL!EZ4?Pq*Hr7})tevPcgL=^T1wU`!hDte$B0^5`-1{J{v$@O*XxxbUeko-PG@!jB z;u#lf>VIceSw)R-aLbb7zBHHUPx^g3dg9XpZoT6eC}k0B!&T8}>xF<9$8H(_7i0?* z&)R?4NH0p>{6oV@PLap@k-E_nPPfzhcjEXo$4f29kvwJXeH;yq3l~yNXZO14mD8F^rjP%KKo)bGYPbpp8)IV5nXP!j83snM8@ zMT_AIvn(^KhkRLD_<-vJZf0+TvidWa^H#eek7*w6AxG#J&PqWzWVyP#V)e@BIqMO{ z9FhWZ_ThH`h>U8mC|$C{P>&onF+>TqPlQJ%zZUYve5|g@Tah6Y%xoi;ufys^u6`>8 z(@@B3eG6W;qP{6L&kl;T5i~97D;(VOoJ#vn@4OLp0>9X87Wyx9{Gu`}3+of)%K!K_ z`~eKBH0O|GamB@S>9;n8xIFUj`b2~~#22*UDEN(!L`-ht^-e#fIVUZzdRSQ>m$Yc4 z{N(Dz@emD+sVfRPp2h=~U3M{=|g_v>qBBkQ+M)aK_glmwJ+xSbcP z@Z-?x`tRJK(JDFzygGibUavMqboUvO*c#Nqx;wSlp`#d~OCPAxsJ{d8fRwfYwT`#tu zPFTDgoDbt;4o>Qa+M_!R0{1Cd&X&f$Y(SrQ9XGk0Aq#foB%AT-v@gEwo1ADPC5MEZ z!BN5c&0(qkhrD+TuESs3g=5>cZ6}Rwr?Hd9w$-q)8{2AZ+i7e!Y1A~vS>5}2&$Ih) z&rCk?4K+{i=_tDUZiK425tdj;$ zkeM%FTf>iuFXJy`GGUrfx{kZ)xOCZPM*e7f2G$Uc9{J1cyotfU#_`)-%C92zEAInv z6g~L^J0Pdrl3|S#1Hy&X9Njj-628<(p1hYy4jx-KWU*8x-Sk|rZTa%vw>m1mZQ3MM zfhGcB{mSLIxjDQtS;q*c-&eP1BOc_3jm!#44bhg!gVS@@Ea*=JDr*`n&kpK1a*RkK z@L`TiqS`i> zs^-g6X2*0&3q;4}of;_$V7PH7z=qW5CF>W${f(yev}U$I{~f@ zX9bv<4YSavxF0dItHu>_t8^L$3|(!`@;NsQ$T&kx{@+J z8&4ymC^3rgZDJq$@t}2&T{=KHw?ySyT?Ri8==Of6WAMBu?>J-Y%d|;q3#wod&2q`S zEL$P{fvl08I&qD!n}B|7r27S`o@j;9(XhnQD--B;6{jjgih=F}@O-V`HY~9RjneKs zrL2psGa3APl0mpuY|e~NF2EyIIgk%U9vVlb`z4UCZ%x46bzzACV&6>2Kp&_SwPH6) z&&0U={xnZRS+W2q8&`5_x>+@as%39Ej|)2RQ4&Op8fV;Nj9#JblgBMMo$2n*ApVBY z-Q_1Nd0o6dxW(+&DRybcV^QSf5Hb~QgfnLiRUDCl(i9_~p^2huxwI%qh{_yOG;>ME z`Eoh1>OgT{A;^Lxgqk%V)biMlV1yFHA^*{f6dA_{-wb4KYAh&ee4y*rMY;K5VBNc9 z42{t>P2~L1UHOe3^dxvRyi?fk*ZOvrp3%kLo$~qLeFybNcQQKvGQDqVzOk_U*2UM2 z6|(9lLJB#5iQu+Hj9j*+=9kPVpxc|av0NcEaE^zWph9&T?y6p?2_ZnsI`?@HUv{0s zZ-Kgs?l@-dJsM_V@HGu$+S-%M{7^I5ubZ?!&I6UU<*Q9Hi65;;1x~b?&?dUEbz$=C z?YlfEuPv|!z9`)4fiAB9>aLr&5H4Yw{MXT@ow3G3fdlepQbcT-^Q z9VFZz0VYsIR}a8IKWzUDOlISH6SneSOJiZZot}^#8F!W8Yq^|Im z3`*JhWi#}e0U`q}h}a~J#PT>(rKmr?oUb5dgyDW(>8qn@`csrHvBq^GzY?sPR_*>3 z+&z{R&WGf9SY2-2S)t^CKFU-2PcyGu@8LDSagHZiod~G)sxHe#R`>>LdCqKfOn7Il`7sq*9gT9W|@qx%mTBC$QhkUc0}qn#QPqnsQ=D@+jwlHF+iA0YyvA~=G3fj;3M zgrI7o)pd$Z!CW#|pV17ZKUoAo>J*1bACKT!_LSJlKsrJ)F9Nsh6cGJTZl9Dt_2(#Z zpsm3EIhbyMuN)C`T$qDBCOGL8N3iR~70!>Zz3=@X7zs`SUvnIq>71?t6MhhRv@8H- zleooXDHcC6!bv#NHOL6Z74~Q6ko|2+(tqYz09-2jn2>_cJtO#w!ia_fgoU8exgZE1 zMAilT=_+-F=)=EwU#w~<3&ZeBTBP15&s;ezI!}sko$tAPLKZ)P+uqTbg#wlTS}Owo zZ=1?`fK6rdX7Wd;L-GHysU)$f@#669{vVslp0krR%JpjEr>!Uk;ei6MAmjAwyx#J3 zWcQw%&r+Sys{(+HIQ45I5?0wXa5jS##wBLNhL^R2OOF&6ic=&5wvx^gT8PBBqTVVh&o^xBqc&vA>ZB_upFe zvA<2U#?JH`Z&FuPrV1BOY)nx*1A~5@il0izJ0dxMS&h#c@ea&4Qq>>gtIi>TLKrrTkQU&SoaY9Ju;^Z?tmmvH{H-*yZOFU8suV^*rMmSjs=$HHfz;$LmbWT1bY;6S+V2ctjo_L zGmmfo%oji2L8|0_{wj7BUnO-Mdr2(?0`2k^bm*I{>y zpffN_A6~n6y_ORP#$m6|5v{?U9}x+J9oG=|K$K}NiDKL*DTx~ax6)&1 z0#o;kpcxF>wvYl=DLDc@>CpFj?$py|R*?j6fzNv+U>*#$wb21KBbiNfJTZ$`CRB}# zKpE$=ad!1Ss$T0IUpDFztbn9mz~Pz(4LMo2F4^G0^(=gFo*s_babF)FV4txkuK%(F z-c+u#{Ua(XLCBUI5E*^z1EZfq4ma5Cff8MJ_xiHxA?C(25`nU0+NR@9JrEJH%5Bw@ zWN5rpOc?#>bXRw)R1adDJ_W34xUqu%>OdC~U9-52+}&95(7@_Z!Vjzk<#nVtw5Y^; zJj2XP5A0RAHA>#Z2d3 zv;`^qs~$GE-DQjVo^R9hJvlCmz90K>7=S+nxC}IJorF4p;Htcau0L{GuUD%1FBbT| zhn*oM+Fdve4>(Huex=42MvJTP_V^Q*AVk`VH$6;#)zgHafUPqWz z!)wfIaaT|AA1j0HZNim*bbfVX<$m2IA-6mObaP^{-&csijU`dx^Z==O{Qh*&_(F8h zT6%Xk_+!K&3}l^#2OS=8?>JKikAR-$w3m(i^>Ftc>grRV@DWyO*gy+Sn>8*|^6jG% zn*SAu;yE^o;_s*A2ICvBF13u1jrDo~)4>6H>N`ol@cncRUV;r6MO`hYhO(G*dt=~Z zcfR!|)wh$HQ>h=EmmOTebYG8?#ovb{prUjzf!47|(NLYV8d=PD>D5xV>gk1;n`X_K zT*ed7?CcIw?&QThWug$)MLX>*l3g)JZn&kmjCqDjcyoIxjO?};?Xg#I+%=cf+p1Nb zW10-Q<^E;--UL#x{4N&z1q2NMLg@Yt1jSGNh{zN1eEp)T-0qrB8c~2{XlCS?zpn1A zToNx};(@oaEWaruL*P#TJxAA5QUOFY*1=FMT2E$zFv)7fvZ5dk3j>dFXk6Yu84m0- zs6tRS6V*X<+*XTjdg3-gZvnzR+R*fOOuaF59N?JfVY;P$cHXTtfAfz;GpuyVP&Q$+ zTv6CpTNr6cs;!?`kXZ(bk|*f{9{ZEX&dBDb$wUR+2@4ItI7f$&O@?{Zn>bXc&``e+ zyWA&ohMr4T|NK&CCqKP~&C9o)ut z7DMdk;y`N}%`^YL6UN@Xd!2X0dPV^1m5GzHqp6|Iucyv0aFgwA`a{;=2bCYtY*_~k z>LXgKKkx}-cJV;Yuecdv)}SV1l88L26K;u^>m+^wN0IQ?Z{H-BKQp{)v>_9Cs5kg+ z*>odFi8<}k64wl=zEljqAbTfoHWl`FuP14!5`SLoR?+C@&I>onlZhPQqI!=K6TwS1 z`iaZ@D_4ZrSn!mQDdvHhQssN2EiS)IQKh9B87BHkr9wKM4?3yNsp^hvpg=xVJ)H~~5->%s1R~9{ea$_T+vd;OPTbpII|Lj9 z+~;QZ0pNay#Ox-6NdjOK+ykg!C_d_r`d!3mtD*jI#!bf=R34rZQL7(l0jZQ0>87Bq zd4^wWlpTwB5!qj0vlqA)If9oC)mW*QR&aD^;xL0{+=XRBpjaDoCN9RHZ+#>g&!tIV zuXo(tNwk%~6w(B{@g!3a>#!TbiOsOakx?G^cMiD5?WLZ!KsPoTuEG=VeJkyzup=%1 zGI4JL09gJJiU;740NTo;UY`RonYz15esDo4bKTmpHn`$j7eZQ6IfnL*_wNZwXw8mF zInAa-?aPNr&7Q+z&an&c3Ze4gu^U2Ats}j6j)_*AR;xf9pKn_csL9apGxpuWus8?; z&(txg@R$6C{Aou}0v3=e<>Ado2SY0z0%fwheZju(fkVJH0s!B3rm*VwCxW{vm z1Bw(RHf)q>&jc>&Fyst{fn;h1`=4jUu<Vo;Pf9)0SaB5BEP5=M68`O}%#L@0xpm zdMAf%_NR{*8}plZ6f7LS!Te%zLV!c%m#xu&PIo+T(4~j6nr^}ErmKC~lUPA97oQm( zwy^;b7(aVWu_1P6!9?m&El8IQjDu8nKQx~rY_GbGoNGsY|GG1JOt8{SAE-)F_sGd^ z+p0o+(h+Ndqe|YY|2K*~f3Cj%C33>G-A*nttr7&ehy#?=%eE1~H)&f|g;O*WCBTt6 zWU;}-Y+WmtRyk;7lqWSc7nIhvqn6Y@Jks)f9dJ)p{@P>rnIAD2^Ulc+uM8)Illf#x z@h2CP(o~#IrEU9>@5kjcjyZj{O1=y?y^blu_;h1F-6dc%^lwYC&mP>;yc)1>+_VIU zURPl+w1j-Ln=A{b0HD$$+EDN>Yw}Iy_&;2Df00rErf4F!PQS4FpH2UIJ-56z?#Z$W zxdoH+O9#6E-p-Drnpt%=090z0^g^IcM=z{89yxg@jYUUJM~MyA15X`3jou8Qw)jZd z)dqu-d}E0>PlfKOS3m$^YWEO|6FUT6Pr?9g_Co$ln?o@gSzFMBzSc&^b2f~0jnHSb zlY@E33+JX3_KM5>AY^P+d*(42ST-@@3S($huRT0JosUsO7CBH3Z#=qz!S5_F54eJ1 zur%bBCII)zX^epa7HQ`qp0-I4AET^*D+cE~O2U~;V4<1v1QrKJRDWHBs>n>f1y5MR zF^2fwhj6161Qa}pWi4;W@dnu1D14|#)g;&{+J|h>XAd_=nsAF%tbEz$@=c@Et}wfO z_#Qi#NYu-x>5nf0zQFR19@T#t_%}T||7&p&_BY-_%)fCfbmRXghvZ-V2QZ5*zR%L8 z+iQNf@Jn0P>5H?kIX#-v0U#CjqexiMf>@mw-3<1QK_Be@l3~=XqJj88ugWtBoNqnEo>Y#>rX#?xv?Snu&KPu zN5XShmszi1P(P<)?=z)e)*J{@85ytqWQPi@>0Gxy!{~ZiBZ@$R?N{i zc>T7;c%7bEz+N~z2SpAP1G4j2Zpe+FcsTI8_E@LPNmg1{{~`|Zw>-oy8`&Bz37gmk zLZyFUrPa}bcCWwu@(-${N{lB)=Hdb}*X3E0D80Ti!y1?cPYfjOE~GMstCE+R>lgQe%$HBaZ{&Utixek6izw6VU@)oBd(AnQ!= zuVM7O-5hj}RGEg*n)4S{Q-lBJSPCBRbETelGV#eQ7vV6`+e=Pxvg%)m@=0pi|02r2 zVg&$*GAK}qEz)0x=}kq(f9**MFcs_z>2cQ)^PBw-fJO?8NqLYG57*l2Ofw+hxguDi#T-73uhy_Npz|*l36+akn!s^fD z@BV99ob17;{cPrUgd)vWPsyA*0YWojGX2#7g?038?Tk;J8je^fA?Wpg>Mo(E#D8(z`|?3O0C#X z6(h}-5UoT|St$S3uaHYGG?fk*PV%g*B4I7I zM^-y8EmMBk;+l6(V^S18&OMRpNiZcVnwu+%2VbJ+GLX;7^Z7!bGT>8poqZibxP3r0 zF|EIt|5L2dlFE++g_L^Q8r;2zgp`>iq+?!Bz%c-?%UW{E7ZM(~xSN&kLKeu|iyp5c zI+NmT{57}%m6i-1ugh@15)BK)ZqHgUG#ZpB6tv^;r!2VwzHR@WqGigXEgK{11TM!0 zo2doeltSm`2vgC!-FHI%K7T43nK|B6R{ZxKBX5iDW&f@H$jZh9@K{k~V%C^uXJ%Hd zVFPE0il#>gc=H$-wHRPXGKIl1Aesj5Ic?E6{o83adJFL{W~v--YKk#4{if;xPzPZE z%0sa8&R#^YdC9z2>O#oJS1aQ=6h~ZFbHlWcu{GSuRS^s^bnZ+w4cP0b89Wf0o6I4a zw%y>TQDTJ$Otlfw?QJ%x!gQQr_dO=#E04rmysX6Kcc14K+=0aR$;AJ%>)zC*W#;@3 zshfMI9Kgv6V73Fu7ud1wMltwt>G@s^yZJF2LvQwaB4*1G4#Nzh51e$N7SoueGsIDC zg#1Ee1h!8Td5*b=n~yTIbvv@RMG-zsnTFGp)YzB~_EZ@Gwt8*I?MN!2@UUYK=f<&2 zvuh{z3PIy6*KswAopfbXQqolqGqD~|h4yCV%W6L1tg?RM;)jkt{Bl2w()H5wcWft5 zym~$W()+4&669}$h6UcB1G=MhS=@5tVjGQdH+fp8yl(3AMZ2nR`7-6zCEP_aLn>wI3{Zy z&De*M)+)1KIHm{rpwtW0R2fO}NFJ%bvq-D=NS5Tg%!EnY+3&`)a%oStCeAUdo1|kC zUeW+1tI?qU%GPtlWUJ)BEvyTh%b(VJtZ#Ht{$0JI8#e|}tRacrzQ8cfiGhW(Awm-? zp^{^fhHQ7(nmHfOtizsn14ccM-!k$}h>iGYWnl#G#lZw5XM zTqTW~tW+A@rm>BoVka4RV5^HKTS;K9jFw1|y`-C|dt4O%14x0)qY0&AR-^TP2mkB( zL@HsbAa8nnT>*-?_wg4_yJs*q=tdjb+Um7dv8n8xI-DG>60J<}aTJU>*qV+`5bD{6 z0HmuRtS1iK}E~iaTzLGA236^6pp*L^L_V7ZND0^84?nsW{1vR zXr`q_yWRhQy)%wV`D2x`zE$-38*A#nhk?xcwz7u(cTZ`4RhgI*05W@s)+z{eVwYVU z)T2GV=JzOB_*o2@IGH-aq|Az5Ylr&whQ3(0bx)?6Z6*522AbZVb+PhBNZo#9qW zY1MHN`Q6+P&&`LH7u~pERiZs$;R5H-)G;%yqjj%$6F%>4-KaTp2%w*Ae+o`PhJ4gY zwM+7+V@%wb4Rr!nY|4|Qth%xXkF%;jm$b33(N%`E(}~u3=MFmgsJ7;QRI}%kd}J#U zR|q7mPjin5-8t5hLsirP@f0L+@i}$F;Rw- zr_15lCG9gM;Ss59AE#RHDXBS@VjKl9YXH1kCVy!Jt3X~#=8UTZ-ID*I^&+1Gdc&@k z5fs*J-Eh@0`ax;E{Uo1rH6=gWyoqf8%eMFItEy)f2q6-vrh1fQ$2rxway=#SMt6M< z+J+nu&FEc@3rzNN5>}|0XtvgE|0NHZbnLw_*9tdrtu>W#pc)8;;Py<;9fEehp*>Qp ziKmsr=YntHmmU-blKv_m8>fhg^SSUMxs8uH2XB1Ypd&r*&^cHhHM0xSfB>7%(H(2kF1Bc=}EC>?~VtQN=4hcb%zh|C<+!ZY4 z?`;-$pYJ?AAoANT{u#&3`Zl&c`|l}EYN}GdfV;LS+Uo$|ih;(bEDSNkk=JT+c5Tma z=!`n5SyY=!sRYGkR-I&cZ0gO{W9vHY)^<)kbU$+dvNxh&)K6>9v2XEUA7I0XhQ z>|}(`&V)|vEX6gPEJAcml+dNA5QV-pP7*>oOWeU$d8!4^PCFuS?~fmyfx6FuF^Zsi zXA$lA6S2r)eXxN&e8EX`rfeI1duc8g_%i|Nkq=#2N?e#pMETu1;2oSXlg;mlpsT~i zdYQk|(7D%`_rG(mv15Ss;t&1xF>LwQM_W?~@_^<|%y}5ucf<%Wb-3L%&9*)UI<2<$ z1j(n6q1i#3TYPlTi0$gbGO3@cIWB!Z_#hw^yTlB~+K@1LOF?s`8X{0iK7|-)r8YWw zDVcuVMCoK<_{o1YAl7leikSYR{u%ft`pEgu^Y@KH*MB^Y;(330B8mQrzR?^pc;Z!1 zFGm}BUd8X0*SUudogz|^rY_Q?_FchpfReDhlnJmBryAgG7#B~O1Jb+#9{Zd%QCSr~ zZb|JLyyf}jy@kVvIvDigU`h4u7>ZQXG#(iGDlYQ1(Qmc+(33>&@8n=$WXy-gYB9u6 zt&aj(O|S{NK;hq`h@_+%h+t;sCO1&rG#UC0r5g0H*B0j$cj5>CG-25jgG08E3A8E& z5mY#4CotSP4NWmd?$FM?B+4(@(hI@O0j;ZwgIZXJ17VbSCcG$%=5P)$xP+{4Liv(A zA(oEFC!EjzencZ-O)rxoxR`$X_@O)Lhoemi?NQff#?bDfSAEE_@yBCoziq^stxp+$ z8QM2tIczMy!KG>ma`BZ+P$9n($TiU=d#60T7ZyOhUgz8-=Z^$W+8_`hd-s)L(92}o zG>R1|oF0ZUIJ2`~II5FeoyZxXSQ$);8p=6%>@5VrvNLFR*l0XV0x@8yk$O%vJr8f% zO23SAek{M4N1IJI5PDCR03y{PG%Q0@Y98T|F@zJ6$W2=uF2Oi}%d;Y;>`lZrDaW;u zICK~>-tdiS$%})prsrKAFXMQ151EDc`798#N=(wTWZE!&q2S)C@Du?L8lD`j(VjfF zx~ud^%}0-y90)fi1+cNI8D(7}Ed593}B!MIoD)-C*FYzK64 z+u|ui<;d-E`2}>IbZYm{seT)2fR*Dv{5ae*)s%%|014e~KO($=!pVZWysa^AuFtu*j_wyP~Y6%keHdew^{21_aS z=1`?C=iqrWC7?f-!EU~|B>Zv(a&cYEMyq3Jc6?qYAgni7?=JjsWuE&+? zoDSznlEadZcp!_ByuWBb$yyMWIYPweT@Ov~vacX3H8TFRrC|Nfl&SxBeZWog?8Ojnpae^uJjrbuVb`*va^na%9Goq_=zL|UHnbYq z-`^3~hiSh@X!*+F0mqqGl))EPe#PF8^Tn!AlL928+meYJmTO(sE@_VI7GpK!elCD@ z%nN-Br@D~73`*UuVyF{b(*f8?YkWLIkmwmJ;6RCbM7M)H0B*NT4DRcKr7S(OaZRcU z1wLuwXS{c#1t;PtcXkqPQ2eE&V5|f3bhJh0x&(64HyERIxtR~`7%I2rjL5Qy2xt$Y&rY#({BB1gj zvKW|mNo2=p@k`mE+uE1Su;w`$^835RBQuc*HklaskEvtiww%fC@#e=ZK)Q8}{RRAZ zRJv%n$2lKYd4Q+%1Io5QX4p3HAzUoKy!Nu+qdQN#bE#qmEzLgK@U`}yHGRi}oPFBa z(qULYvkchDO}kLNnp`*xecFQw9_TQmd zIlvM;~4U5R-n^Ng*Z@**>=`z}6umD;vHLgG-xce(lf zBxJjMX_hh6z^>WBp|YgEyREzVvw->d2CgEEac^mGkqT7HqRk`ZG5ho`e!(S@PO(Nr zl1xs3P7R3Q-qfjEt`SB-JEysN%HmYzR6k4I9wsROgN8e=K|{UKQ%+VzP3MjOKF@wB z&?GoEj1B8aLWSgZHYxpWO2)*g5VtiPk+^2(=SQW$aU@Vvyr6vcr4Fh9f}$yujG69( zNJYfb^dG}#DiS3)dF|4!W4RSje{Ce-EB~b^UO#&f9aWe7Ui(m}VB4&eosB7?* zp}n}G2QqC99JkcX{RO~JS0Q*MZ&vOX>d4x6Y{r5C6 zZdc`r50-kPm##V^P7RJR;6bRey&X^Vg4{o`BzQ%a52LN?SqDE>q5gIFWyFBN|CPJ}@NXF`+T5cq z7ay47nEr+TCOf7u9z#hb=zD$%TXSvn)~%GVU5tlG;#DPYGe{ggkv3UJ*51${d5E!z z579X%|B{Lw(#*uQ4&o5!U72hg8tk-3hBArJ|K-uRvunca*y-z#EL*e65LhBFvda<^ zE;?eS=|pIB(@NxWgs>JYJno>l$a(R`$(366>?iJyd|%mKC^T0pCokJe%>uE9m+9VB zMX^BUxtUuRY~ni@t_&jr2Qg?Tm>smq?lG%5DC**R=*~cB3pH+NYBe^X=bx2R@cgB*W^Td$oso^UV1*?<6lwm+8_G#ftUPgo|u-AVvqn$-vnXMTWG}Iwb5K z66HZj_o?8YU1&qLnJ(a{YY?b9O6j_U8i28Ila7=c6hvuA;_|(v5)Gl;wQ1_LrV!F? zU_47s^JcQCpHQ<@QYC+;1Y_4xcT z-_AjLp9=2tx%)1y&E#C_ZXn^W-ZfoF$Pl(zfh{bl{VscXi@^qYQAEq<0LG>>?l9A|%@GyHupef7Rh-2P7V1{ZM_WB~lPH8exQS|tRfS_5u0A9{W_d!vuw zCuWhKqXkvgYJ27s%`57uu3P!i=~pDPe9UvQd~||44#bh0VB=_<9U6DCRf6C(!dR|J zxBEU2O)23eHEK%&?{#bnJUI24w8VuK?*1#)^L9BD=&Jc|NA+GZ-_+#Ylsb2H#gH8u#evx(M z114Wb8t%>mBio}WHE0A)K85QomoM(u=ic2*%&$9pBbW`aDZm_xJpG?ux*diMv}Xpp zUB;g=wsxi2tS8+GJz>Rw}e!_fDI3b(^NXIHn!*1_#*f=rOq;odg)o|CSbpGmV1k@gE@ zXsbSjIww|q3u-59pZamAghy`$+KkThT*9?deMDaioKUZ{SF29adgftQ{^EP0&`cQecpxp&lVk-MV~ zfe6h?s~8VBAYPkjop;kQsxlnv%Fe&n>)6fkUHu_RrnZuGLL^YEk@{#Z;k4i!nb5FW z3n&8*vZpS*~L_R zXPq!~O!tX2RnW?1In0f`6fipc36*!HB zgbD`0&_lw`^7n)sFfj%qIGB#?S>cA_EsJBO(*mhvypPgD*dNUBF#O3t*q^vv$*{X| zi4vir3U^GS`e_WAjVZc0^7?!N1;dlMak{534hZ5j$lD#oiEa`vI^waUWlS|79hAiV z=<^67g~g=7g@MR<7cgH;8>T=4DJVQFqX9?Dac5{3FGi>J69e1coYISnkDl;gAU1{P`iFN&On>Ul!n-8rrOEzrnb2%Gxmi7~ydWaJ3Zx5fdLS zFMJT-xqa2;J?1Nj`xa=^jsFXp5-2EA&_WK}tj3sNSWw>AvJO@yl*w!mP-)FWDIZa| z6tvMCR$Ch?ZRHVkW^SLK2G3H)o#?4=1ab78U1}F z@0n>QKS&-DJ{JhqkPHMG`?B~dCP*!7eNTnV_AMKcshrqjfw8^i;KhJZ#D+&g=ao+) zsl!jnAzjq^vB4*OK2s-}R~RT8Xl55UKLWxosJJKjr-IBJ<6=xYxAo@heR6Z2UKk1O zJsID5z9#v}D92L#Wp3WoKNX4*L@{L#_>W;yYEVFhmMzKb)Dh082o<-t424q=grR z?c4gLW4za-rlMCm*4hC^I>H16tJmB{^{|W~aWh5p$OkGii~yS!&T`!2j`}{tJ2k7+ zrlL~{`AMU`Mq*{%8Pj|yRWUq}`tgEi_ABuQ3vxLBC*oR27nV9%qQWpn!%s}gjN))G zkRk#DnQ?u^892;U5O7ZBDoEU|`tVQd>LYpNtikkj9M8R25X(%(Cwg^94xe%SNFqYl zAt+7M1j;qZbUx;8)PDSN}H_xn{INEtzlz67114ZFaFFF)KN990)g6l4`obnq-sYPO9y5WRPB zZZB=F;x=s$RT2FYyY#~>Z_jTKi3&T={<1*cLt+3F^IjDD zSAakaD}US75goJX9SHyVFUfS5^!1lcqvSD9GeT^AG2YSjI5ona_-Umyt7t&s)wNUc zTEjTpQ8=DfNzqm8n_LCLI-%~!Pa>F42U`EWl*wN-w*tVh4*?8XPO^C^mmh{ z3tWL3WCkOq&LEPG;Bn+GHB$zL4 zngs0uskCYarWoWcni@x29q$WXoZiBP(Cfpf(1W3{h97V9GKP|qYf#H0j=q_QTod=|3w?T*O}Pt68q%)p8<=Y z>(Q9UFA&+mflhXcEmt-Gw$w2m)+=n*66+;lYle5sr%Oz4{$le#=9-P^O@{%1B=DbI zVKrqLM?mQ2suPU9KlUs9p;U3gz}RzBl2k$wZWh6C9UYPx1qE#SSf(pk(o726s&qZu z5p#vBNTHRecV53EeB{s2NjA`FQ43ENOK!RHf>p(NIYeTq`B04TEvCj@rb<|BoV;m! z)#2W(N;39qPK;?2A(6&hH2B~jT!;foY+k4^#Z;AI3r}G1b!BZ$oW~$tueN#Jkf zg3ZI~^^fC~O$O&UzC7eS=>F+(mQ6d2Hfl_?89HT<_E#}EcWmxr?$M7&Cgy=ZvBrG2 ze+J_}v6qqF`6~o2K0x;Eirx7?XoxLDgEcLo_KEe-tC;Z!;~!}s>8XCT0;)_n9e|Y~fdZN5E|$F{*U%oliI={gpP}6w#lP}X<;`iCmu>-h zWr69I6A(`aPL{FmR8AO%-a<`bmSWM?Bekw~l}3}AW^x5R@@P^#A#%_F+B70_FovYn z`w+=aWzAR{eZwd2B?hTa0q>)cW5785wbZ(yjfP{z4Z{$`tU_PYTakDfNi8*p0<3}H zgS?CiQRfD^e7dMPY}DuSlJiWVFq@hI4u^PA0KJ<6e+dP4hn2~%EBg8F#~pj;V4avg zUTC#cWOva99n3OS5gSsS7LBxfa#@}O9QamqXX!IVeQ!M|{jz8R5*u1;g~F*7OTZx4 z2RLbJ)pDUQY7B8cxbklk+Rpt&ufWY{?>-a6_Sv%xg64&fq+S+Y>@C%*1sXPIkzw~} zp=atxUuB^Mr22K|4u2D*R@KzG^s(LXu^OpfQz!Zx5%VOQR?w zvop2@0UY6r*rsaU9HzH=TW&}$Xg|~T8GnDEj@D5vu=a`+u z_7yI3;{Ao{!@RN?YtTM4+Dss(_V+qlVgWI<=b#_ZId#S+_dNYYK5=Ewt!K{~v{4tWD4vuV3INY~=aj=OVQnN-R&txX`00jE zn$#7mO1ru+HV#xIy~tWOIPT*@P}dtT88pzClnViG1zh$ znQxGNnjz=FS0cJ=|MckZ_GCph+Hy*lm>X(6;1EJChJwG08yx4DD_*4?F*(`ST4jQs z2Mz408but0`bi%E5fd4b-tl96CiC8yPN+c@*!q0Ij-l4_Q@l4?IaU~)Fc$iP>?Q03 z9E75OZ%d)}DV&inuC$BCB(~NJMJR8hgFI^B#BZ^hOF8J=&SiuI z?<7tIS*+>lsSQg!j;vf~yaV$N!L=8;h6jQ^OYA7MTPlWR?1tr8mymD+K|2kYkXQMN zpe6H_8oGok$qcSS*RY12ig4c{Px9t&K{TK=Y~pFqo_$MINAl3%`i}gZRCPwHp{DD^ zIe3_xDXjh$_|`W!7`K@?N358?8CC^UmogePwwWS>1*KydFI}_}C}gZ&4MwB|i?Lyd zn=HXvY(^)f7q+)7JK)DMMoHIk1S>T=XX_**0H` zxp&MdebezN=~agm$1@^5A&8$p{$X_rPZGF-VyC|S_wd$7-vF{q%9Q9c=s0W(=VHeY z9h+~6{)?+erI>t}doSio?-}hUUP5MMtmVOK(!=FGZk4yNp~wbPjw#mX1xL`{A|i;j zD-Gl#WA-bmPl&9*wI}b~z!n7RNedatR3f!jZl%>s$4|q}qnHuJkC|RVQB$fVq-ffY zXI@O$-1$UjR}xIy+2E<1<2V=(QrSx+6rnM<8*^(&-Yc`r%cL ziG7S#MSwgwlN+vb_3-Nv(Dl0ZvZ22aKpxx}nF7Thvx1}^ILoqD_B1BNC7j=^edw=Z z1tG%)nL}913)$6sR%ZPPF}TwsL@xu`Ro?~k#Ma>ql9CM=Mp-S#{-Zo&Z$|`lfZ1}V zT5WY->!_wpfF)9 zcDEhh%rF`E$<%C+B%4!!tg~i(h{S7CXExb6+{?SgoiO3hX@8iyg2TP5q@JO4_7U94 z!L8$uUB&vg0LMQ}bN+uOaR9i)1iih(SyV;6W#$L$c7r?c^BW0LI(~;oSCUKETFepLzu6^g?F1fE%wLf5iH5 z_#Bw=d2{DJ>6*`Cu5YM-o0TJ2wc++7$G`(n4aEUIQTo#sa{KTgNWN`NGH}@s2+rJM zKO&dfc$_*ORfiAipv$Ph$;9)fOlr7gTAX~;A-EI;^}ui`2&S|zkR6lo#Dzi)>C(0N z1j_q)TdGACDKG^Cm9&UDBH&$yR57Bl53L+ULcPiycJbCi+j4cO5GUf>a=fb%0pW^v z97|z0@$%?eRw^u$pJ%XS$2!^sBd3&gbE?;@BpB^cotNOheefiI; zo-FVJJ+sHRfRU(INt|UPNbbnM|ofu_bAQ<87Y5 zh2eZj6%#OLg%vp}IKYMtP+QjoG_MU^lc6G|JoJH z_O{M18`JMEP8Atf0Eq)YXhC zSXYHZ)-sdh)bAvsFxxrsn1LeggEB7GGS2Q(B=4kUCpaGoZ9!1XMNlWwN?NzS5Z71B zHTTH56P$q_%EeifxI9>JF)k%MdwBO&-~xU+?}rbwf^RF_kN;g6y;BGgCubC44NNYx zs=mVI$Qut|dVGv&8s3>bmOeuj7#CPw$VY>{U-lw8gt1qkmciCDVh40vc^=9-HT5Wst|~MGcU+|iy!NKK27Yeko4X)~z0k!_ zvxYn<&LbfW%=V5x3o>`#Ub*2$fgFb$e4a~-f*_yXkDl*&mi1-vu*n8`Q{f6Ulf)Hz zaSi#6#WZ;v7819nRUKBWU=gtGF&nn^x!ux63c@XADsH^fg`iCM{*M}iMaQt(Ct zC#15~ReJ^uEuZzx%`>M+Oe&PdO4fI=W^3_M9Oez-=TAWoOJxQP`CD|L~d9cSd z)!#(Lq?8xD|071fjqew1kU7mu5-o9xPx;QyB=Npb-S0pc`o}rs#?hs|+`DrYF zbj>55TV5Oapj~DxifWl<_cjq{N4h&JY9PZ>r_0V`!&%6^jCTd{w&wMAQ#3rnp#@!C zF0z`g8vOjCRetQ+J3G>c9$)O_J*jxcsgyF4ra9UD5dxRfUOKtayFy{#HBd9Fe; zD|~6lT*!y%aRUnkmujjc3w%n`1RjD*tZ9p_xXBHnL5-|B^V0zG>v#*$tXVkzQQ!2} znRsmm4`3Hn)s&2-u)I8;HS;H#oJ^|7qmdP_&`82ZP`e<;Ke2SSw<$aS*hT+q z33*0cPt#b)a3ZI6+RHQRHiK`|GI5av2}ZOi#R&33+NJ^?p&jAXf2s1_7tCCHix! z-xz=XkA}m4kL^7Bn}`&wzXwF>{zu4!B)agsUm+9ifRG7%AK}yS(Wz;A9O%;y5l9tx zSz%4S9*QRe+=vTBV|R3f_x2nnFTF^aDL2*<`L$by6}C}jLgusIR$Y+GxQq5f_qo$^ zUf~e$KJe6D(9Ltv-7=Pa&j+j6Yt%vXmNBW)-3}#p#|=Al$CVJ5E+E(T=|jPzU->`O zol|rrO1rLO+qP|VY}@MCw(XAXq+{E*ZQD*K9VeZW{`Y^z-fORQ#^}rc+{`hO8gpJ$ zeO2|HHUi@?8P90f3=C7!c#ZC;q{m7mg zqIMGRS@lIFIP*b=#vR1gVFx5;$ z8@mSbTaskJ#^&TueJ$gCFgBsd5*J%*0&JIq&5&8TFDJ_IZme4HrGtKdZKr;l@M%q! zm+bI*I`8-8!9cE#`}mRKqw%d%{d_!W?Kq--^iHMa?NScj_o;Zi+9{?T3)^D)66)nC zifs}5rSO<}0O9*MOQ!W@UJza>bjcRp)d__!U+i{Gma$l;)Tqaiy@K)B)VZVu&Ekt#p&x z8LNrKd8x5WmKhIYXc%SNmt@izn1cm2tuw4x2C%5;pK`B4a0#Fw#de zNmgJRWq0@3eLP&JPBEya8>ueMV=sqAEU;JZa(x@*9hO8~^P8yC9D^StE08+n}Vp%6R5tEfFO?ZkfQR6ukD_K#5++$4GAZWT|R=VIciNn&D>DfZs z;)t0hID8;-v>^3JaKwgyloCc9Wb zp6L5e!?=DrI15;Wv>V18JkQSRi6c0AW4 zVY|nN`x>CdpHf6)AqqPzhGrhSaRUI#; zPDtj;$nhBX9f}6Vmc%V;>g2W@UO(k1ew`#Zw9Ir_=r>(cfh@qMu_ThXLK}k>?dbb>Hz>{z%cYOIs^^nS{8_0IKd7i>)@WHh4duA06k`ZEJ0FD z7cKo(OYKWl<9HB#YBV$LOMc>}bZSvoRx1G@e7s*-2$0zN9W%b>smsz#dOvGORY?RK zzvK=;lFCxp3x*?0X3FmcA(1D_Q~dZ_LtwqCh2C zo4S-o1bu&F5$)E+s$eKSI-V|0Ju3f3zl61RF`iFyQ3rEeHWpMg#Rw}ICK${{LIlc? z@vJYcT#C2;?t3vt4ihM~57aA|ix0~b!Z|Y0>D}I_3bvFY2{m)>1HVfHO?J|-gI<1b z#uv2!&(+yjY-IPfq1Q3FE1}YYk|}#(Qys-yF(M`Ut@<+Rw6JXH2{JDna3OciijamPyt55(W2|D# zkO@XLv8;oB4)_B>l6|-k?q&Cb`e&-65Gy(A-d(4*{3k>4V3)774mV0DR{C!l5;6Q zc;-mNt)BT*aqEuZf?@Tw#UNd&J$1$Uu+Q5eF2w`~_PozdWu2*pcvuE7a@IMo75tlm zHfWJ_C7L&_maLwyYBkfjeh{?j2pWz~H@@+nBn*nsNp?@m6m4Xy+N9yi8)<{(6vgm7 zUw8FmJ97>6SL@@MlK0*sX}RpH8mX0E)}}=4XLi19Q~Qf9Y*B0YUumWB88&ylez&mw zt0fV?_rIECzvBFEa{PDG&HInB@W!9*H!P!33*|9hB3%i&oF6VY@rqWL5Zy%>RJ4t6 zA!cN&eLLUg5P^t6yr`29s5ko?q;FatWCR$LU~-MZI?8n=3*)Xe6+1IJ97|P@!HR;6 zT1bo8(ta>e7L6v}Ax0svzbjEi#TPDI9W6{SgppA-=65qkDFI)_^{};)XTx$z2NdSc z5d~MWIXK9*hRhk4Vq{&Bb(=$Mrc354#Eu)Jlk;IyMd{T}c~Ln7eHqRHkH( zrp0I3O%OHer!!ZIeS71f)Ta^&3%(}n76a_ul(F*)bbR!Pq2!&!%#ahFt2siW1Xcl>c1pw8GLq^J z^>$XQ1jEBwBp1#)~k`71e_)~}CHi!m>esx*ExWZsV^lrjxQqMyAis=3eR zMno#BNRbid1&O6SPqb<{;-nWWN=0>fo;#4nDHFyC{;tUp5Jq2Y_L!8y$9V&}Q-_8i z4C;r}${Q2B(#9Te`H^YV5JupIXE2IthY>b4B|Fzuw)cdg&7rha8AAMZm6q1>E4RiX zG}X8#8o_QY!C?H%4?fN|`{h%Ivgf{wFvjVW0ngWK7nV>Kq*FAO7inFW97!uKxfoo` zt_Pch=~*i{k;+V@gfIW3i; zo-L_(hP+OHHzk&Dh=Y$>h|Nnc&lPjV2~5-s3}J4>g7vh}#UNNjVofZobg04IZK?c9 zg9@XxV1r&GX&-XQY?Y(`3bSsy!rT9V*>p{1)m?oKvaY$*graJx!3ynrH{K5~ryT&3 zqWepF)ML|2vR~g-1nMhw{O3PjZVaEEi^u6ddZX^laLVd+42nE`o}0&Gq;O<56p)WK z6COXFhjo45euNIg`+nr``Me#d=-&Kl zd4TWVrsYEO`7d4q;~u|FHG~utVwh?Jau~BV;4wu0@8;QK%s!|=25m}r<^ldiuY3+_ zP#)5*i7+{!_-TM3mq8#hj@_jwegP&==E9~$?LS!p1?D?_2bG+GMV*;)Kd{VZAh1}7 z7u5X%i-rq8XN%2esgp1f)A3Fmz{Jf&g`GH#@wj!e`EyV0lapjPSAiWUM((4bQ&<3n z=KH-M{9t5;fhh@oUeELvLSmKWP4Af8qx89P)n04|xM)DhwG$O4WscowaL7jx678HU|ULze~@!}5R z!=)OK$U+HHHUbdVHAV|EH>MVLLInu&K}FRAL8a<}R0a^i`%d!>PoNToSC*>e32{LM zkc6U%Xk-)uMKGY3f**KZk%m1jw~v=WV=z>20|q||K%yQf{*3(lFdzvJZ)bZJ+_6!? zSssd10J9PUCnv8+!VU?lYyg)EH)rct(8Qf0fvU3^74VtI@;0+X`OZ1BJg6{xF=rLx zM5;znrbXXKcMB>k+{Gf6Z)ML>b{XX2l=d35pW~yJ>_2tlEBe9wk~8}e`OEYtU;f7< z+B;usx=}$8(ISaQS@j~xRY1AKkIj1L?-*Ms6`M3-B5CCCjTv_8d+r%x#$$M_61#(Y zi|fY`YD&GQcjeL(YF%1)BqLavl>o&v5J1Bq z!Ey>XxN0S13C$A!8sgd>1Q{+ZNF#e33gt3_vhJL`_@ea4b>%SU z2)iZ(6&v6aJRm#qyzc^aQLBL&{U}>8Pk3&oYEg529k!3@GldelC=z=$a^M zS*EvK<=Tl*f@2fIG{SnFV`_XPl>I1==?J4>f}75 zts}3rhR6j|U99pz2*$HFF4MZ1rzGNKqJkN9Fy&eX5SCY!AU zvRR8?1YY9uNWM^N&A35niO|uabr&hSiC!=peru#( z13ms)!c}!@Awr~md02unVRpB|gAG`fzN+%OMw>9H zyEvbGAAmE}+|719VuQD(u6zdSYLC>}wx;#7u^}X8$I7rQVS%G-np;6#$neB4D8p<| z^K99B+FGK~E^O?ak%sR0qIAtxcivtZ)X+X$b=_oyL{-^K5q;2foz~3r#%8vuBLF{N zng{Fx`gZZ6Dbg8OWuSs&jlK>Q+sf}-ONV;j`jdQkE>6UgDJD)hVGT$*gK&CK6)QrA zOlDrnS*F~YWlD5tv9u~-kOgBZK*E}@=^W-dPr~^=%2h4`B;i~TT!DPM zIz7*+P~333mH}M)%nq^p*<#|>w=)OWfqg3@~-$0OOx1cWV&^i+b z-%7EDJ~#4qzVrvXpgY_?cZCKI?f}=i;(}8W$C_ZLa}ie|(g)J^+@r#+?SM9C1B9w3 z<85_R6U_6ct!Nc47A7*ao8X6$V%|tnPe$!*&s#80eB*{L47#L0j6iw#N-xzgz^^41pvE?5*j36`AQP??@(CYxB!bP zf(TSi15_+P5SC^PNPx2qB+7Z1g32NZNdS>1I?dV*6u%U$k0KvT8~F0yF)ydhd_`ZG z*L>k;f6X^rTf3Cs9Jq5Kgx1b%0XY@grb7m^Pqx&G6kkWqb?Ua_A!3Q%8(%yI6kBcK zd4+OWJ%l7kU<&RsDd9&sdt)oY0X7jn%j&Ff%&$Nltg#UpRt?3qv*ov9Ps)6K!dQ0a z_@zk`T%1Xl(`lbKx~2jN2bxfG+rprChp;vg=yOM17<3rIRzu8%(t)$BZw0M0yA09n}rQ2uvk@c2~QdV#Akd#GA*dS$@CVX3P)6iyNgMeebn>m=TkgBGbv z(@QAlc?hlbH)9L;edW~VI8~I%my$83$lr~qhJh*ynJe+DC}jteYCW+w;g!^&t9@4K zI+!Y}fdh^WEp!=C@K4b-G*EQM8a{tnX&Jg&T8qAe$-4btKWAB3iT3rKN#3Zli~?y* zf;-?BiA`?;VP7u>s6d}Km|u_tun))sgbxTClov<{um{L2gqJcTmAt$HZ~;Ie#tN{L z7y*w>TtG$ zUu5eg&#;PW5o->oz|e-@R>Lvj^+nVO5Z0Yv)Qqft{zGw%LQZ6j!f;8A!f{@Wf@xHZ z!gIc-bYfH+I%&-NkNGN8)Tk?41;jI63{*CoRE5f!O4c%-Hc+v97&~IK0-JM%$;C^) zvi%kX@k)Val+wkMCE`Z&YlJ&F&Rrh`+cOB!C$Q@Gn6H`P5z`_SY-*di(ZRUHl2X-*$UfI z+m~sUhY-gomKH3+VhgJIk#4${6%1|9_6-@;v4wa`3GItCl)QcDMo$MK9teUmqcaa7 z-uWf$TS^~C00Y}_V{>g9-b4dBvH8^AWv0pd$M;2Q z<|Gda2V7|fSLFVn5NHwf$GBm zRs9T@iqC+l_zake&w#1;448_~fT;jMgh~g{2fhMm!~g(o5JRt4o(5105IyrqwW!jg zn6c;A(t`~c@38>s_V)&y1C~OOhGG3ttmK3TBldi zwz($WTuXgaImDnPd4wgz3Q&)9e#HF9{gFp$`STlD6Vq_&r(AIBaI1?06TDTknkFmnmq!wx~u;dx9pfPML~AyEWZz(W&k{%!mahi$Y@mCaso@i@qOC=T7u7=uad85< zi2d%tXw}|+dH4Ils6MpaO+hLQ4macwD7oA>%)ZeCgR1+3QQjq!HMfTXtgeURDuEpC z%n`4j2X^de(b>w)1!8h}!1MX!i;JhT3H_vC93FLC(=1(Zo1cyBEK{8_xPGU zm#q7CI6r&L#mwQtlESk53RLge?|Yk>^kM61dqC+~zO~LID>AnKo$lArwod}bmiB^a zWyZ=Zv@f-N_oxSX+c5bDwQlb2#Aj;msYA?HvS4;(Ile!{?ulKZ*TnDii-O4nqb zP)eXsud*kI3QINw=qnF49{-07GtbcLjLC^W>2!I?;}1 z{J}?F>c;7lCVBx)>wq#?Sa5}Z3^ug)rf|gU}xJ_tDmzxQO2{rZFqXWyL zZP8Q+v!h@>rQ5fkcNn{Uz$r^|mRThAk|0d^I^_j?4R6gtq|eGBz?=B^iid$n4;f){ z%%Sj-*GpdOY>c|8_IqPk`lHs3?oF~6&8LAcnfzHB`X z`Sg6A1i!^CZA#d_`40qVN=`BLOdc$=KaAqHEA&%Kl?Kn)Zlf1^eFrhvvf)$&V$aLr zVVP(KHd+yiMZDD{89wsHF~Q&T5FCa(Kg8_(b;k%E4bR7d3lDA$2K-LwO5R zANDHK7Tj{q_^|EQA(II@)lDAG4$_kB_ETohnD_@h-F1z=H`raY!PXD{E&T(!`*Ubd z+H5?r2(KBUXRVXSL)?*ju29!Xrlo1B{%-Oldlxxl2TplR-8Xc#^txSdkV1RgY|wiz zKb++76ynK%Z&w0pqy^*`V>nLtSCDgo4k)EQbj|WYrd^P%POP3yLnUh}JRp)KnHto2 zjGOM9ivt*Yi$3<-Dr~i5N>eN?U%%dd*(K{4U}nG4-RO193DH;zmIC2Zc#*%0uX5(A z7H3yJy^SN(RqYWQ7aZitn|*B*e+rJHi_Dz8=|>dCHMimX=I{e~zJIaj$x!*Rnwk}( zHs+dutsb0#M`$-ne}3A!56R(II^;MU69lmIkl#2%xCtJVgfZRRp`~=8Fr^?)Y~h9_ zni2)~wE5j}8Pv5W#Ozq?wUWw{(C#^isTdbQKjPt&CgzlEU2Wny6XSYRV?-Ykd>%wT zij@)(7h0oz)pT3Fj{g*fxcDLu;`VS6W?Ji`y@yt8w&3to2^qf~xiXR+7Q% z<%U_SCQrdAQW7?)P9I%s$KRR|Ci3(SuCy95$q!_*Yrr816fpYUzl8V6#wQy_RbSPA zdXBuFxX%7-X%{8)*H=Z??Pw?V;$iO1J%5BpQ zy*=42M>6(tBu5VK2^4A!sp0OuXTO;~zFPZiE@=dzuFSDbBE0X|@``$;bNh8+N;ANv ze8N$Tknj%0dtu_v(z1XoJ0zv1J7L0c;*gg$RB2knnd5Oo0e6H)t?Vus^_b!w$LrT^ z>#?`g%1dJq=j%osgHcX>kmbX3QdS^YPT;zj-r*0jzNCx0uHf-ga%k5i-z$B@5x!72 zv0u+3#@J0sZ8LTzIDSX_dQ-0U|42ZsQ=9Gg1O zxV%v$eXGY(^a@1xEX+%DpaRi62-j8$_NRB915wvXE>`xj^9?gOcLGjL%IQv;30PU* z;ER(gW9|C8^V@{BK3)c8B!GAgV%eiF-HSMznH9Rz+9*$l(~Jt`8O%ph?XtFk)8vkJWs7$EaA_HIATe}j{CFa)9vvXx z@*91_*El@+yNNz4$Dh5*`rn9*|5n(2LYF1fDL^3;tw zuL#0JO+WH_=X1Nt{S$O~0ao2~uWHQ3n-=jnT9iH!DE4|(hsf5>t-+^0<_Db@|)fj`O#> zoq6$RiVtC#FTRLlID)|Z$+c3Y3y@`v+4z$GH1N23{8D#p1C@aPei=GI08cX$&q;`*q@GKwAO{<`j9O$wW9)Hs{0Wln zoLmBi%hM;*1wsg!yq`Y{n;ny?iJ{k1@su_Cep+hw9@}G9!SdCA%}GwkME>>4n>|@z z4(fpL5M?V!rHx_;hD<;~1&AYGhCZMd7(D6LdJ+6gRZsDlo@3qzsf%DL?B@~o?9IA6 zDcGgWMiM3T&1%M^x4*~MNhlUtfB{yb(>Fz?1`lo98@3ub<{zLjIOO-hF;3ll&>xvw=RGycgY$hn z4T-mGyYlgdHs}saw$?Tx5bso_gj?xihrRhPm%~TC)gRyslMsK?VY0ISk*e-LR?W=D z{70@ce}775(@*e8%kdh-OArc55WfV~us{~MB{WxQ#`n{|BpQU)+zZQ3|$i)7XtaEwJ8w72|8E3vtfaUi0#;xG@d_h+GWD1=T7zL~wf8$_V@cd*7y@_9; zxcg5=+~e8=dl^PtnE6dEm&&wd3AOBpeX4DpVbNZl=2b#7@ILwLE>WNS^>Mo2*k@7# zoNrqnO`mF8l;3LG@A4`tfo<9rzty(Xv-iK%w!_PbULLalrseRQ{SR8s)6>8C>%UrU z{*K3HWB&h}JI2QRXL4JP|7D~r72p4x{`UnG-7YEi>6Dw9HA%$b<8r1?Hghw=?E9ia z%cE?T@F@hECND*%Pb(+<7c0=twJ_wIU|xSMyM83@v(OOjsGj=Skj_PXn%?|D9OJ#k zmAo5`65RUcoljA11L4zbEy93?XVd9+3z>GNq|@d6X|{FnJpCZMv~x)Hb_3>|cVYhgZ{`O^OPcKIsV0 zFssN)PSOHQxsh-BitgU}rOut$Dt^dSEY(@c!_(HlwIGI#~>IETS1`n2Nnqy7QW z-*GC^z8%?vp+by?#4@IVA6nsueTm^=&K6`$vYI(dLk+2bkteUz9`5+y17CLkGPX4m z39o^I>+`UP2rl)lb)QS4;ntIj4EviJ%E)2$J20hZ4d&lg8a9?cdN;w$_SYd)l!)$U zfN4KQec=bRY<$m#19LR{@Wq|8$@qyPm`m|3xoN2&+_^OhCXLl7@$E$4#-ZHmmfNIj z$FTn^l)8%`X(kybxKjm*m{sp9;$emJOT?Jl-CB>b zmTFcTBxWKbR`#NlXr9HFQkwCub?5<_Uw6}ZzGAQmbn8sY6Iz{WB2A*=4Jkze8_;>@#cc;B`Qtizmd)Uo%Z}G|Jg*Vwxo; zzRI$J7u*DlEUnXl3WAnO8LdY>Dg_1vx@%P@4G|m=ls|y7ub1=AK-gneRB4dSCbAPF zZY0QEWX0$jAnQ7%2IT(KV=Ig(gjza=z(IMQGK2_%iVC83PAoTMPl~Sh+ZpJE&+cDH zq)CfoTH5W$9t&($7taYBRBD@pbACB+Ya$0MjyIed;T2#=+TO>P@X7nT9R(Z9AI-S` z+>L?dk2VGthQA_Tls;W3$3amHE#@Q42y@8p zrv-j$Y!rKn;{Y277yU3{4U~EW^zLeut^6g7acWzB^#$N9!Npt{Ah-g`En1%1tv%MT z`uY&mR1!!}sndh)DD#6AiI9Wsm59pV^$r3?RD{CEid}045=Y-hDs(oHXqDqjfwX2U z6bx&;)r*^C%dsX^pL=|$9lk}`Pq0u85Y4YR?sN}wgRCPZyo>OH3m&ZBYPEK{4!%Mts%4nS&bM3>T4M`KKcO2>trX{CTvhx zbwBXy-oabLzVOO}qC6(Jw*r-oRIto9vgB?>F!l^yX_o5iT(?6J6#}yWDiIy0g=J41 zpA#r9jB{D%Hgz=qusN!qU_a^4$?EJ)(EBykSc!0BbT=Els zl>QHE$sbu5G5yt{S10x_2Y^)?S`=aRI@p66Yx6aHJ*Rl6sIdW@+w1bHx?nsM{A=%i zN4NPbE>q$g*W0#Xhe)#r&{1`iVfv$6ZKoZqw_GCMr95o_ z3F`dZT@&>Tl#<7iXoXBGp@Ph_CKWRM<$j-pA^Kh!7H*gkA49J~oW}8K;c;4O*DRbJ z>+4=!q?Wf(R*|_?YDeFj?i~Wy)!$1ySC$?jJ2>?Tft>zi>!JV znL?TAkSQ~9A3r+7=DVT>ve7!3rT>0}Yf!2K{35*_X$UZw$C1k{Pzl8B(A(GEv6wQ? zj?gP2N5Q;9pB>p78$Et#jH9SO6NR>>)~i>Z4T`Y zQJiPL$1wNIk|&dWfa()`+BgUh-6qYA)Zju6>PdETzlc(qG?h%Py#%1|eXvQE_@o&K z$P^FfvAv^kmdk139nd$NJzUDL%fhi+!nqo%Nq>H`jp4D^z4 z6ti1Crk%CDm-zba6Gh&j=aexyOc{Jg+$@OKC?|l(GCfnG6JT${Z4ARR{mY9JV^~<( z@dI5niEp1iia*WxA4c>4^OgAz-^X$MWn~so;QS55zPN|->G7lZw(QBKUSRiY+eB29 zZF7a_IPbUPI$f)U-06nmCjieQMLUj`FTe3{3{^23ptIn}=SY`$@kh1xRa~zra6eEO zfZa_9*%7bT;}ahAof_uoG7yZ}S-QjX(!TNaP&6ijPr@=ciGY6jO&%058iTB+WyP{a zK53ufh{+r96GdMq9)7Z(+=&M9*U8|?82a>!?_M%&HMQ3eJ~0rWPIV#u!u(8LyuE=o zW8#Mwem8hFUPH~;))i>m-(9#c*`E^~kI1DQK!L)#AhChJAqxwZ20!TCv6f{uTPO!h zcWe|^Risx^Z=ffb1Cvb96n+K$nDmH-9AqluC^o_iJ5ZKIN4cz?m&3F=;_(4o%d`Bu z<0IQ2Qbd{ma`spGpVV;zACc@~f!MxQ-;CTwI~QsmyC+OV?&AW9juUa_GK8`3^msC% zM8Dc+l~1rD_!w1Ll7S*9mkSJk6wHB?%yG_PcKVMXM{1-Uthw__bOP==nwbqpI%${+ zNQ)g>DeM{FU^z@z64=Z~U%jWRJ@zOkxH1ZC%D%P?U{i!5Q=)ZH`2i2jE4p?o{02g$q#G}lkqghvvDACPPG^?Wgg(5@KQUhEfQL{q#Z-)S{w!FG+0oOn08ueohL@q zo_!WCJpoPqq2={iPSqiOd)n2Gy|eHKHfhx3&)j;6O!j!Q^?Ek1+fP7p9{#HTFcN?C z5SWSOuP}{RiRe#@LgB~EK6L&*w*zkT#=56ZKKXd;RL!1#$~fuWCmB_yI6J+8n=-+t zMMkIirx|iQ9&wmPX~uA}B~2SEEJDGPlSCnCX=-jijSAL)VtU*_bdh8fs-SmccrUtB z4m8CCKSwwT8g>E))hKd8wYFM2`#2O)bSyUclFo>cu6n?EWu<`b$N(b7hFKkYyAPq^ z{`@{Nqf005Sk=@LFd@E-6&jrfTemI_A9Ru7Vx(VG zMuNr=F>^5i19A2f4FXpb$4CK2inbI}$#&-IwrY048dG?>n|Xs`@dp z{$;b*kstrf5AHapen`a&z;Bd*9*QkMe3}7wz5}dlZ~<*3F*@AozLtcf{7Jw#K5+q; zfZLujbpo&&+FUmbkk2-@Z$ST*2!_MF{~JLLOJ0r2tXwxOik1rKkw{MhP zs-f~ltt~}ys=IqZ!t@hC6{B}(SW{XdqVM}><%SrC%{K)badls^@U)gtxb=Mqv{exA zn8-UkWm~EsuMIZ1)+IMQ9cR`Z!%W?y^1h_1R!|5JH6)8f+xK__W* z;tNFDj*k}66mHa43Q&UWgm&Srog1TfKUcx7-!=%nyY-jz_6Vke@aP>GJ>LRR5O^LKcSTU7<$Fu%jez!=v-))xQYL zXQ@g5O<;cgcTEZ4&Iaipy6KOW%m3IDA}i+~Ei%k3e{s7|QRK7%VT3tSsoHi;f=K^a->;mWNW_lcgzP1aWeTe1F^tpF7K41xsis ztYfqW(jT5#eKBCoh5H#`cs|frc>YBk)Fw7o*cTd?k^^n7G|0>eP2~!|ZrX%USv1IZ~b!{j{0Bl=q%*jvaqqmYlw>CQ|C&Akgq?=LcAZ zTZ|YJyUe#i#n%I?qzq!i%R}fr+h8Fm)yYUu)qqhAdLj zrwf5aA0lz3fqbp?D}#CPa5D9AD#qq<#_UzlBMIvr+vGr!!&C|$D}8eufkk)1%#U40 zJjZX>_>nwWKqJU$JzmuRuq5LcV)Ri*S{pFDNo4687->ki=CWm|?$)PR1Ef!?Lhm7f zu5`qxBcFvAg2Die(95|R%t)Qakm1jBK$A>ZCx398?aBV=^Y-3NwULqY0RKZRXz?Ec z>W^kS6Wd>Bd%ToQ2m?&eBWEzZ-+`C`*Kux{`pvfQy1k+T72zT9&;x^LYFcW;e4GJG zASJoC1hn%PZZhw551S755XMgqO$+F97v?)9%^R&#ve|#Z?cf z+b){6bZ36V?FQLxuIv7t81Xl#;{qg@(-A~u4D8bO%T26BtfP?yUJLMoIJjLLpt09x;3 zkUEQ&f`q!xkFJ-gAUoqK;_Th80K&8!d=jK^=tHi9igtd9bbHL?^u5Z8>e(JW2PBqW!t7hLEkG2_tTc269y)VVIb4c>iX?YiSq_uBCYufd*ufvw zA-=TpVDTB?8rmKq&|vRBJ!c}}vHCO$3ZN4lEC2~qO8=SHSFVZR);rZH(G~T|`TN#| zhv4%9Rt)etoyG7+l}IL*zZ@(6nvhu)!$S$ieqsEb zkiGsZA*&@Zdfw@-CJ9CHh)vaZ30W<4_OytC7cMG4{FM*|`me&lS z9`DW!B4$Z%cZTC=G^q(<1bD$*!iTGc+%KG+H^YX*c8 zh4if2Kj_~*?SbU#Hqur@WFL-{Gwz!V!FSwROpBj?XdZL;!P_)RKE|pfV145vVyfd% z_y`>)=3M#@J@;q#{Oo`2xwu}NPr$g)^*huDKPf~|?DZ+j<;?qsGg;-5O*6Sgz-3t& z{|@kLDsVli!;TPp2Ck>{;A0dLM|06fY{1=Y_WClbYnrz9iu+D-M-9kvex(TV;Fg&m zI&0XR-crpuLn?VM?r>v43^+2e%RQgE`IPlqM#G@Y1V%#ku;fxVAa^E0!BN0>y38m zz3c?~MVyMm(mgucq;6t#;$pUebob7RsAjI7+s1bX=ZTm~EL`mx4O-SRisN2GDa?qv zW#Kpt%}O~XsmZUZL1$(H?}_{2DwurD_~;*wyZ_Lyf8>V7^4GPH=hK*x^s_d;{2SGA zLw0QHhRwWY-4zj*e{K)_^Aho<5IZfoe70YQNmJ&PMR{Cbw^dzBym)EF3 z_3WXphP+OwVc>!9%QO4LGq)~moEhjv{4w>$?aR1mw2A=`?+y%JttS+=iV%R29L=Cy z@r=cMNdTM&@Xctf(1my;QFV~Q6-5^y4|hRT9q2M7=#5+9Jp^_@IspSr9wBs)nIwBh z#dBskN`=%TeSPE$)9Vc>A$)&bR2ShTkcX15kfi<-mZ9#^BPNrH?N@KS?rL~htjuGN={n8*Eo#ncdqLuM6lWrsP&1(1 z8-=_h%2~FmfXI7!l7m!c_72oQ!vcxQRXcG8agd(Qh~TC7b^}rFUU2ryZF%?uj*Wb~ z1&5Jb^h)s*L)esKLKH1|s@WrxhEu56Hd)5dS1g^M5H$U1U_Mix>I6M9RsAjH8Q2o( z!!@Nu8t|QAMuErb9Ik`FAT-S-6H%BE<*9_cyfkp_J|w+vuc(>@r!7|S-r?s{?yNZP zvvvVkL|5DJ1K5MP^f(D2^El1czKCDh=hwEUeet>*O8y}z{^*LBh4C-$^CF5;RV2T$ z0N=E~lOWyhbF+GQL}b6(4i~j~vQZF`)kZmg7KtYg&g@o`=CppDoUA!4Nq)h9SSGOOK!GQ#Qyi_1h-i z*mBi#m(PCg==gx=M3$J$LWahYm)-DuZQh^}U?byr{)*&Ia-!3h zL0wDCL_n;QXEz^FoyE}>N*kf75`G?czNbA*_{h-ZeT2zsl0swcu~erzqXktj;TprR znQ(~&8$C)3#ah$guM~K1PAN$mZg^*a<_V>)9I;l!g09nGJg*uor$%wrvva~G>DHlM zh)=)7ZDL57t+SSsd1Gn@dkdtBm8VxBd3Iir6wKF-qM$B5ZyZ{M?E&=-uUCyswu|J$ zhRnK0n4xhnD#mhbH6+ZQVQzV0M?DQjG(q{sb$OIHz%WdYS)s0&=ce+FYn8E3cC0t3 z)W}0k;s<*zFMDY(*Fd>AoWUzdJ!6={y@cX+3!^9BK0cCH=HKZ8Yz%)?HfCo2OI_d- zP#WL=8&C@6OTdi5z;-=4B@4g$p{wSwHiyTg5NS0ErD>T&wRsqJR<}W#{AOnUE#4!g z8@majRnqnxnrdYE=vh5oaY#ko`Z?Y++D@96vfhcYAYDEBICO2V4yZ+-&L~CRS%{Bq*ZdjOz z+%aUx`UKn;z4$!>*|kKOTLp5lKkNcQ(FDJG-P#C79YXnrK!~aGSDjL(xP%09MyT~# zj9`^;%<;HFNFOx60pBFXPX5D;`=d(Df9@IQ&v+GotCLLr*4_kNa}VOp3k4yUerj*V zVu+q+@E1>k_0+kecADwsspC8V%u}EB(A+JiU|S(>6FSWq1+Pb#WPMBmXLfhQ zFCO%=!po`JF`W^ZdM}woaInuh<)Qd}NL{~m^c?AVhsp{1)O^-SdX8Qf$Tp`wv%vq> z-ekaCdkDvZuCskQ-O;TNa3d{~5?n-Vy*K{9v^PZ>CH;(~y4kwr@j7zMN#yOzjLeP} zibM3MxBJmIzl470fA`QJtv0y-FwB1>eE1I@=07^hva$Y!7bBA>@q1$sesqV@B_QSQ zcQ3nNj5vF>jc$vROpuuWAa9)rWaPE-H(H@ z)Z3Om`>HPo?jn?GN(Mi);UvILleizFA3J`16(!e2?&bMgAp_xalCsiPJiilp4RwzRXrU$k?3mXqb^A*q6VM>dmj ziPYbnyF&TtVNQ+`>JB&ftS3F*-*0@z4 zOH;?5pl>MvkD*|4hc3cpepE%~ZN%Mok9Vf}ZR9uRSw(BEI4WcVAf=uR%j+{ilh(tP z#2-d!znA6m`5aMjca!BVQ7t)jCk+L`$wkh?mLX(N|yk+A(DifroVcPRWtBS>K_P)J1t zBa_1tE~~|!@5;U-=r<8{v?SP1@w~zhPs~6WpZu6}Q_^BH-7N0J$aj+qxPREazk@Is zNWP9~nV_s*!2H+%`6-u&9L{N$+6^-tWx@2UjqJTzF)<`b9G4|RVO{7%cU`O10F;^S z8V8ET>VRir!&K6O{zs!RlcW#KR#SK-Nj1||o>?~~f_JdIh@exDxxsL7tDlH}zC$c7 z|G^2Z24r7;iynafgtlu%X$c)}$Kr=4!$#(HKGSRTj=wQirp>_p3<-_)C$0Xwjfu?d zo0hO`)~{?D=6P+cyg&F_Mqc(G5OSSizx=r!8Q*jcGX6gPNJm~qYJeWGb6;)To`>3^ zT@^)8pgb7&spkkmJkbJfkyv_8=(SVAMWa`!k9!^RV@UI}(nlGf7g+Xa4lCZ4$@FSFYlLFrr|@yPDDElo}!r(>X@**mI=Na zT)se}eFlaGZ~^TjBRm9~l3lr{>D!c9iO zC?19_9iaRkwvQ@^hzD~vcmV4fVjtvL5eF->)W((wOQ&g@a*D?tb-JsdJ31ly=R`)< zx0+u6p19)#Vn7+7z)pR@@zCGVLpZRTgr?)1<>Ocgghf5^KqzN!3F&eG+7#kc_MRB)Jx-TqrekI3ySomlApk)o}?4f+qvV~E)ni4skpu0|XSU6YA z#X1~D?qqLn7v2w&Sz9}&!7}`oE!B=AzkpZ*7i#N73UGYU^suM_8lkDiQ4X>PQt)+A zD2}hXWkb7xPXJ0{9js=;KScGLN*>1FnFuO?p5QOP;alEdT6#Z|0o=bV{X)bBv}`QkRizEYGUMFsS69g^Vn%o+P??ua7qHWK4(z?xOoc9dWZ)2n+;<$cRf;P=J_=m`5&C@iwN}~vIx>-4ANtnrIaC{4NNf>GUArL513>2z(CGf)g)`}I!@>6uauk+8zu=R_?! zlgx!uF6#|n;fo5d*VDwr_pI*9YA3#$$!H{0N$z}FaRb>#22r7d}ZCCW);Y&6NMC+{npuRU6;hd z;J{fV#d}R@qcKl3MP)T+$rR2FB^yrUd+V#+^`TYKU3;DSGzEQUG^U6s@$T`i-&1=d zl@qZ6YqOk`sunmiwS7aG8j}d~pdJT(rXLZHsmW-y57=JmPK3zGsUCRPz+Nmr_`)Z< zO=9muioy52UDa9QI9o>09rzn(2JD1t0$;2VOQa^WoE4w#|~7nLH9hE-2Bc=r^&$EM3Wh_ zB{L$lis2Hj(!PeHaYf0U2Lvw&4MqG2NN&z_YNAMx+kD4d)Tsy&nYzW~MU>%>(M13> z=a1|J6d8hbFl*;cDf9S+=x*T}bhpp_pH87S-9-O?oV8&*6MGVnhVxhccGjk1E|eZ8 zc$`KCtx`qz$M zxa>5wvZvID)rz*13*Urt&JT^D%JDJ@jBe%OSgyW(1aLgYotU=L$R=OG- z@Z~+pdy!HxGQHH@F`SuqWXCuf1G4Y1YIsdha;TA0!qJp)dL7OLbKCB}3u6S%m+grM z&40-#pTQ+Ot|h+#(+e%=x9$hWA&uoUUceVpoZ(57_4B_iniR%2@E0JNnSnR{GH273 zaR^j{xbIXvA%!@{h7m#W97r#YoM~*)6s10ZW~+({II zBjU%|RKG`r)B#KD3!;}9S2Lr!x|qxqNowH0VqqRt7_`SIUPZa_b#~EM##|v0 z%JgaX0k^N-WTkfl?S2m!Djofl>!vN387O zQfFBmKuFV_|>O+5ZPm`?p-Q&CEeiM4U{5H>(Q3zRNuz6s~(E}=U}eK*!Grdo9T!^ zPeiSbMITtnwmrQJpQ2$CoQbTvXmw`Skopj04+xc|CF$9VB-B3W&Ik3tG}*{p*l0J0 z1Lm$&1LxCvxLOr<_HvL%7p;a#D<^}^Fel_Qy>>i^UIo6W4h&f2CJbGkYcS4Wk3M>l zukyr`?db8A9|n^*QdW>VJG?(WtE<`+D!I4^?<%(Y^bgDRCS2w}HYc&LzwJKF^gC@Y zUdk3A@%g3FqSNO`dEJ+gciLL_UCGY^JC~e7VadvOpOi>sJ`}g7L~tl3Ly$-kJUk_A zEOJacgOee(WAieA0oM3<;N4AsBJYzJ3GBWLr*^Cc9Ar4t+xT2JW5f^sGMy&NDY3~m zOgz21u<{`%2k&+N4u|29H}1A#+Cqg)$+~X_vLwBoCol z4bTPwy;W9fR!GNn^<9crzb2g_S?;jG4tgaHej{d_o=dT2i2G|=VBn16QMAApIJ;bM zb)`pd`_lx*n!K|5sUfp>opHJ62n0QP=Kt`<-_(p?X8Wx~Q&AGA-ld0Hxkb^=QxwPV zabGuQj(qtAx;%G3RA|0K-)`X?j3c1hmCjVeO`!C>S|r+u+P!cNI>FLqbE^1gP7Y58 zLaeCy~RGqOcig}s&mSX;{BeQm*Ovxjg@a{EA$F!M?z*C3`A2?l8@ z4b)s?aM^p>uXw*aal}`f&yZ#&L~dPh zDH&!HY3$CnHY)_MW@_otTo@Ez<%2)kxq?{qfb+D;3TXX0>Myppyc_42>8Mp5HmK3JuyYuHZs!X=a+bJ;7G@F`@g`jouXs{w#xl|uH z+HPR#$e15Bk@r{LBN^Q z&@;Qyf^oYw24jlO(9+DX*lrzf`xfVQnCVeaOPjK4`EG_K6N7VAdwm)LZJo~57xEbh z1FOfO^Ecx?!)yZMst)w@{BGj#&c#VLc{>lsbN_a+pt8c#;%7(me)zvuRshDURAK^x+==(UW4yv5 z+p_(!Osq_ATBiTlEy>FCrka6?nf3pi@AgaJAPnGr?4xLJN&pM`U3Qco8ScHTEMv&< zRj5B%OFID&e(Nz6s^W%X9bTs*fYd=KhsYIllEy@d)-_qPv^m2e7GBIcm|K);7KQ~d zZM#K^*2z}7P4BV*%Na7^grVR8@9W`d0ACyKviKn`f z63RD2wiG6)4nc}Va`x4@pj9Yh*UrK9ZrCC%F&BY16O=+z6u1Y{y-M*sI7c0%qT8IV{8DbS8n^?|2?3nS z(fozlhDV|>kigQ|2{+B!UmO}avvsphV-1N?R8Gljt1S91pt;LL2$*^_%gfFI5oB{y z9kj)w==z?U{#4lycfvU)$K1Q~c5xl@OA!}5Q9wqS%{eT5sNj^1Odo?A8Oh6PKNkjJ^Kh_r-x_z)Htp( zQ~%cc@E75}n!PYmzODo~&?w`oye~83y<0DQHh@mJLI9u>*3jUG6~s2PE@Np2%!-f7 z3>&Mk;IA|p9E|hHt%ezV<%>x3LZZ;%Q~MM$(kAxF_$jc}QYhDcdr zq2L3gFI*O4Y^y#r2 zPU}Em>wf*y$E4Js#YAWVU3F}L<-*Yz{8D3$2$6*y{s8tZy``c)Qv;IVZ}Ds43`{Z5 zj;BNFFcx-B72cV^uv*h_3@N*p?qA~9k6H1A$^{lZ-_vZ{j_l@`0;m`38b)00xk&fu z&g;N~lxD6!Vr|pV3Sb$_AVUKhJf%%GUMxC&!JXJ_4$*}|+(xrKM{!9TcVcx@2yP=td~2@U0i7ES zXfM`|-nlbpUd3ax+AS;kICtmnUq9btJG4^;cCp%lchTo5gtE%J&s5KwAdF_qA_aw$$S764BeSV9 zDHyJ<1o4y{$1Nnfsadl8(x35#Lc?TpM$qBHR_&04RH70^D{pO@oh0SP5i#H<-xevJ z{+k98FR>@D1B@Es)(^D3+#wC1m^9J4(n;O?uw>=PoJ=>%=FGLSQ`w&TkKP2isoytV zA7@f`FCQT6PXqn|KW2H;?)%S;E0#Ak85o&Czho~xezs$$>0k6CM_yNo z4e`@xK#&WBC8Ow>7|Q0fO+I&)qCO9oPAj#A+;N^c>YDLh>#uqd zpqGnZ1gGsGWmH%*s*F03d#zfIQ^!c3hpO!i%tqmLfoRo=o`Doq6M#=MylG zhZfME>Go}-D*v1v{67tKfW^?Zlp}vixp0b?xYqm$q`rFl-!!Lg0L>}+7tP6?KC;85 zIYt}oesKK?-N4Bh1FgGW0Nu`kc#`Gcxs5gX^c2R`SjXeY*xhy9NZeXMZLkxGlnT%J zePLL0TG$eqf~wd5G)cPgPsdte9^@u*9j=RaJ6Mn_MgcR4M%sO&s0KYFiR{_E?wKws zu3VYq#vzY366~(b5CGJ{YwBl$TVQ`73@9(u{V4p>99XE_n%P$T82BNt zxrT5$Q_;8&TrRYayf#DQ0Mwx=%&z+3YGn{2REimOX*x)dMF!@`#R@#(@z*tai7%rNi(1O=etur6d`J54L$@lTY*0piT?lbGl}7CXA#nSJ8lBmG-NLCv`toLDFSk@M08uJ$&#|bp9V_j<6x_x91 z0o{X?2F=1}OJyP|=6Bx9DwPe@XHosc$gMI6Q|ypm$ST@Zk@wsHrwlx@ z*I7dY3LRW_+N{f!b;@U+_m`^L!4k)HmkaC+hkXq*k9WNR{6_t?>)<@iBsU>m!4sa3 zyhVk2aknDLShF?yX_BJ>2|ZJUt?<}i_;hSIH19*;GdMO8C6`!Axz$qxxPpvRm)zsf z96o^!gW|SH>|gD*3A0xerR2?r15w&*w(#2h6j(6GoxJ_7YM&Em(z2NEc^F3*_q#fRWF{ zwy8_oi)lWFD&TRQO3pX7{u3H9IJ~t#<|&+(VQcR@KBF|VS#{eBZ~Hg2K?L*2c%a^h zL_ujJ*Mc%dHGcY*_~jla2dTe(wl5@~FbVysmMPj;K!6>#Hj# zFH5|1P(#i|;zK&U81}?s@Onx!A*Qecz40j0igoaoTN6hNZmq1VnTZ`KOwKh3!pUZw9vCy51sF zG7;beuwa|svI=O3C8Rproqq~XN5~&RWi5O_hL+Mh> z`s%^+Im^$6$Z}nk@Mgod{I+S(kg*DIFIYAYB)aZ8mm{g{7Y1XBhAP%q<2h)VPJ_iJ z&48&(ZLQq|a-=WQc!3N&wtu8D7PdFF_ZWUJLS$kX-~|Psggs?@!C5uZ4D6>08BjMK zn**#2SYip>`Khxrw8V&$TjsCm%M6dSRtqm4_J9`A%K}lMGr@}p-8N~5pPaGaN|@>R zzt-;(rKASgMr(1{(-J-NOGH6-eo;_cTW+dM;l1sZvc6rYcpdXSavM?N4S=Ee(-V({ z?QPwh-y4)Hu>ejOKa|iflYua>ko#;hmHA%|Q3kV>d+%z8Y>Dz}duG}SoI#h)7#Sv` z^$ad$Y;!_k*56^V7gsm`NXX+o*kada^N_`0D#i(|^0T6)0Zd46-zLebbcXbtTtu;U z$;>jmU)y*HPlu-aLW*<+a)O>rt6k*hOzo}lmyTXB*hcdo>H zk%Gs7$P)VJTVj3VTl#J9tNh1|*=Bhg%KdxlVq#-aqnEE`R-R^IW00q3VgkKTgl+W$ zfq-t+79C9C=Y*6##>DbZD+wW&MueLI&+i@NS0P}Kk)}2n#AhIY)=$~zx1QJ<-IUx0 z0ZNj=e))%GeOsr7@i#H4NHhaH7y*>Xui%%)<{!9ZU$Wj>@74)onCns6t(;O+0L`~-Y{)>VL}=wjRy$msE%m+A)>a22L3l(JEh0mdZtJLH&;#pbcS@VZE8CjWeZw-uKR9KXqvdE#2(07#vP zr%W$6>>0|gJ2n_a*7M4lk_06${}begPl!rTIPtRi(%-M*@)PoIr%8YsiiA*?GMuDK ztQI*le{PKjy}SO1TXHW{BXhg@ez0!qC`#1dy+ytNvR~(`)UYaU!iPiCBIq!Q3@f2V zKf38WXJ(m-D|UnLjb^Ccxg|GA(;mxci9eXS7j(B-oK*P?dJoI7c7x!3=jiK}N~a4t zQuH8?h3yKJD?HO^%#YI@+n!}HMm?@0dAnSm4lpyT)|6RFf{|T%B0>ZT&`VAH-)UN{wu*y+j|;nE=6C#Fs%r< zXi_ADiiCF&QJ`2!J9(nv?9-qf^%4Yd{V0?b-QK3|{b+>-f_Q(vde%3lz2E9Tnpg%T zA%edXcNQ?%*UPl~L_&ZwkjUJDqkzi@IyLsB&8E0kRAcY zZi(Yrs36SRQUlP5_XObZdSOZIf%=Sl&|j{Oj)Q5fxvY=YSvwMcq8|n%9|liS|3m4V z$tc-d5T|}Ib&V&+8yK5X%itutY=bQz@dI?%He7aurNP5q}{L?_3hCql_lbUU| zlKSW!=p@}9p-17Q#+@elDCE4eTtmO5V?P2S4HNU9&%^enf}Mf=H;h;&w*A*${p+L! z3)?wliw(pNZt%s*`2kjThkxiMhcjJ{t~rsWdJs2U%DsAqeQk z$pU-)WDh<(T|K^_Bzj$}c%Q8hIgmD>$`Y5)n#cPbAXK>$d?j?t<4xT}R;3&z(7tjL zmnuAI=v>rRsB2CkALUDQ$NZCY5c)cW#5|u%f}ObbC({w|lC&p!B35hk4bRM_PS=`B zw?`ZIE~xODK+8Wo_}dWB-&N*3F~43Utk7c?AsT;1+!+@_#SE+Gt4pmx({~B(m9o~O z;`bSnFf=?B!9LQf*jI_#HHM1fo^Y!S+E=N|iXmEX8h)dGlcXE`xD*4opib z3zj!cGb!oT*N85_GoA{X3X}Bu5w~>=+#e(DO8m_WgI``r;ahfr86rh7(R3?J}RVIr$68chViwD%dED`}+b>90?4_|@u8px3OvMOYE=;kZu zUkz>?QS?ftpawm0qAPaIp&J(Tifx%>Ejdd1oK4$oBH1b|Ze$QYUsBhY&wYDKceu?_ z-H8JAwm}oOb$@a4HiQ1w%M1P8;0EaBU8(>L?&DuB#WgGdN14+ao6l_Qkj3#ySn=WI z3HSiV`{{IFU2l>Hfmd?L5mFL7TsgXg@V&T=&`%}*<5!6Gr(a=@i(TbEtk>Hjp7B5Q z*22p0wu*r9cj!A-;Mc+O7xBIpj1~SYw|uns{*gX*c+R<35>>1!CGiS0AxVG%v znAmgdNsWG{2@canc{k>A`$oM0n5IpRmW)htjFuUOSz4u!>H*soRs5OhTxPDU@#-1< zXCaj&>j5y(Xyq$#&RMX33P;Z}bMl#X*(THBs2BV-~VKM{e^0O!w*KB`-TpdO^9P6f*yyh~3 zM?INqx#X_zrHi&bU*|M>{^n(n4;Vj*=FgyKepAr=OJDY1P@N@f3KU`T_ILlr)AX*4 z%XLz8^K{2K_Pyva?ACX+StwB1Z*@X&08H5j?yDO`XvQ+)bUv`5XerCcFPY2wGPHlESyJ`4Y zV)WE{qa@;hO3kfgGOh^BGDe|OVegB@4w4*MlW#)`gSA7iuR(8EfhsnEy@5@d$(D0d zZ}IGuRC+-jsG$da?RIs}f?v=dgWG#fs;~V7GiAKq8%vfJm;`min0WVF^`~KD&e@u8 zM#;YuQ|hZf14D;fv$e?#rLdNu-XvN=1hPr&&|iEy`>+byxi*bziuJ8=0Ob-9<}4k~ zg)2<@+#W&%t_+AYX_H8O%0g;9At!$>T?3O(@j;z*{Tu7o{cdZ$jkKEWDFZ|oP8UzS z9Uh((X-at5+{N?pNu5C;h05@fUKFEJ*sO`eIg`q~2*sx@BKLjydGL#XH8(7gYd_G$ zYMnE`IV)6TPkyS>BR1@D7nYfk6Bc1_yNc3co4=l5RO^Y~LDcCmLrd38`rXSyK8}*Z zHxyD-ddwm3i|RYKj&jqLS$FIZlYoleYc$*B!*pT~SU7z#k^S?vholpP7PuY*p6RA? zUcS60pIbTw=owo2fO{*c!!xjZj;ePOAwqs$$7G{*rIv`qQvz${xTz5B5TRzTK~w&L zKgp>v=pVjrnyeC>I?mGEM3ZiuE!*|c_RPKnYl&tn2c+EE(0ZQ>lZp{#8T)ao52u?5 zp?M7IfyEWZQ8W!I`8%+3hQVF*!baq&s(xY(n7?brhdEuWdVx<$NHtOrRiQ{Qod+fq z<|SV2Y2TuQ5T@H1g*p?z*DTB--KDinLOD>ZF8wz4gf86dgXatEFbl)<54-A3XYaq< zRaD{yez~)P0z_kc`aKCGOCE9&A_#}CHBwwlO|5W(3I!MzRr$Se&YEKIU()Up7`5*t z$b2NDLO4D8SQPrnJRk(X#2AX__k-XtJCN&r?-Y#BpB)yY5N@`L=E3ARXU zFLJgm)1Ai{?yWxF_->u+F`T#jin|i;NDX3BCE9}|MUtVSsg@%EC1KLy$C_1jS?eyk z;Dp)c%&`}yZ(*I>Ut2y`+qAq?SqFht|MRZG!v3~$>Ob|a!ovQh?l8;mtqc`_7tApr z3+!W5re#EnAmT0F4Q!fyXnE#f+T$ki{m7t+xIn2islAKj6^b#|p zJUJc*4MH=5;UHSf9dqU7ZBczPP%GE7J}_dDwlxE6 z89)hJxvq%hL`LOsF-Fa;>f+;wVOztw=gxolJ1hF2 zh^$<4Dvy(XKjBEzMF=>}RKK_~@4$hyNI2bVq#&GV6>_1h0Iw$6#7;f!ReMCaIXhRP zvS|WJ*_HZ|N=po_PHo*Kl8LrgZ>Rhnnx@##leXIo3%}J*M(;%BI+gI*KO2!oY)Q?K zLofXFf|@Zz5UsK=IUPxT-%Qk$9B}dj(L6jP#tQ>*OUQ;@TY7I166dVXmK_y6=F-9d zu4aqzU7LW-IBj1p$!h-|ktSHj%qgSlxCs%w^NDT1&n9d?y`|_PhU4HSGkRQf43zQ} z9_x&F_VyYX6kQc8j)ygc&YIC9ox7!qfId;cXaJWDZzR&U3fJls6^obc^W=}p0EB~R zRnq~qRdC%6yTqyhgwmBI=XET2-)=o~oM<7s+KrM0vSs4qd(fZ$-9uC7ctAq?n|~w_ z7WOyw#+ccD^N|4rlWpYs01gJSjiEfnyMlNTo3P>j3 zLBWBY>2yVn5^Xzz3VTdk{32|QoFCg`P7BQmm<^gTKs`nd;DStRS<0kZzZN)5`>-4Z zMGYi+!Bg1D$$_5E#ZJK8sIv2gTCAKc$5q$Jxb?`~@qSKQaYCU~)Bya-V}X==la#+s zU_BvtP}{n^MX3hT@Tz$N3i_5{DYBBbaJSlPO=i(P+loFf%Ul?FB$Q~$IAPSS&ny2J zZ5NE%_$jD!A@j^nxgDSBwa*x-5Z_q73|~p8gf_<^MjN7Ey9C*-5{Da3s2{tisNiu!$3QKQvbaep7xc$Yb}is;|uRs!;cGSY6cMM@Ns01)ls}vi?_*EvZ>|5HDUUsyWY|N8dps<F^x3auaE(# zOO4<`B?k|``}TkLO8Lt;PR$VgI+lo`yXl(okXuIaP^dkV{bP&NVdk)Mm_eEbSsO9Vx~ z*rQ(Fsvs*K2)2e^ZmvqjPL$cR0zZf8HmBt^PYP!}VY2{mJ7?nta3klo{D)%&aKVOF zosuA=H2I6Yrb^rZL~RXbXnX4W@Rk_Jmx{eqZC{iG(lHJh3=>)h^)ZBYG{#$Xs_%FkvH zb;8+CM^VBVrMYf62^GYn?ZJ3mxGuU#={{xcLh(b2p&u_M1Q*5)heqW@{k)C~hqmY6 zCfHAT?BSCTz5P(Zx5I&0-aXsGCD@0aE7h0ohyjh=vmm)Ne89cGDd)zajXmGA$dB_# zvxk^VjZO?f-dMXR0Yutoyom}H6y?Qs#wn7m+r&N5_Du+vJ`kd7*B+!S%V!A%bi2f{ z4pX-@@8GPC!sEJVBKx+E1LweDC5}>}A?^B_P5k!Sc}XxO=y?MzH1B;mEtt$z*<`xn zI%}S3E%3=>S|n*_U*1tcGP?hQUR$>3#pKRF4Cm4MXrSaa#Vs*~wVy(O9+5Y77K=*i zC60Klg($u{$BeqYV>XT&G9yFna+4D`97YA0G13xSURhv){4A_S%*e^<(54qzq7hvr zf8e+!NH|@(-;BO!ms;MpRZBbeo-qlN2UaMC2><%VT%2+e#5L#VdVt;S-2U3vWbiU#ndN6;a@-AHi?Sa6Al9ZH}G|9Y^l z)r6fawlbU~nff%V^5G)P=0fuW1p-1cW6?c4g|>%!hF2Br{!+Yh76*GlT5xyGF3;(v zBlxK%X&;=O;Dz7Km4I#%u%`F{@FL|;c7>tZTIB|Q<~C)O5q%$QiVi;l z#L87}tizLWNejox@I`FhaegzN+rbnURI#liQ?tO18^aYE9;o_c1+cloqBNOdCit#iczNdBCFnkw{u=*W= zXsv^*HWuBgbTAWaO@7h~W=9Cw3e>Ce<>C0j@mY7@CH888^X!4Oin~Hmp=lv>4e}?- z5pQZAM^Uu=k{ITt1iSQOe*3CZ*73RKi@;Q5WrVQuFZ0p6v9a|;-7!ST+nnT8r#$8re>b_y2_S&i^ z%}ok8YHLWnMTuv0NsNKyTgcn^8xZY&BU8?oG9k364&S^TS~ z{|sfOH}yQ2*nSHI00HNhBj#TO97QN%|68XFmxCAI>};ns+A5JA^gzH2Es0#k{>&Xq zBpKe%Q7njz_q0sjg^&2BK~^9cH19wUc!^ELRZ#Ru#28VBrBwDX)HNbQi%FfMM!0W5 zPeJ#IVHfn$a0pXK4TPMcX&HcqQ6Iv(MgvOP0!Uz-hPTn-fK+l^xUi%9jp9J=M;Db@I*@U7nJzbsZyMVB8Es|t~P>o9!LSi?!6J`zzSeLwUSQf0F zbh;$v#_2u#Q6Gr4b&~ox@;pAh&!m?j^$0S?hhKFoE3l|_vO?lf&(zLbcqH9nm}F=)!_gy z;|3HxyGW4f*UX|5t~LW09&+xD$3raV6&}|ey_J7NDuJLr6J6U51uv5|BvTt<~QYPrr)6+ zl|+u1zkv1Z05p1hTg}OBfla{N6)tUSvFay$9&g2{fJW6)evp+ocqK^K06yw*P*#F~ zj|3z_my^QD2E!MFC6}nESJMr7XE2!$3}sX%%GPwlYh$vRT31G}Xy2*rO zL%f#4Lmr?+nX;gxbh}ygucb6jp4qky&bw`7*bo2+rSoa54OgVw}hdtx%-YB?5bXR<=gl}uosOCg)TKM!V zj$n=S9=CRLxD3t{R7>oXls;FT%sU@O)ovWE1Ybul4W#*@FXS2(HHqVAEx1xxA500N z3~gG#>!Ip+-_+VuLGA?tdPDv0A3KkY?cc|gsD*>06FxgT<9{Rm?DX_Zbh7vi^z?Mf z?sg`0a)y>lPB#CiChCW`#mCi_`UAbP*jpd*jLKjbeXs)=Cik>-wzTo~eGmcOD~X3I zhPXx0cF^(rTLhB$h-~%xueR5QR_e%!37Q3^<%Akk0l)#~gmHmk!17>~4Y=sN9)kJ^ z#vmXN`p56-1Jp$kAt#9fgwJ{j)Cr)>vDE|k&H2#{&p={&Fi+vwfvt2<&h+C0{NVK8 zjR0xZ{>TOvu9a2yBT~mx=;5f1&jv;VhKuwEGB0G)$B3(B(dWT$zu?Ye>ca<~K7Rk{ zIR-$A;vaMXGsd?f1SLT92|3Co{s-E6VpaZ|c zg%xx}D^P!PwE!4>A}DZDe3(AXEg(V$2t?5DBk$Qkk>a4R#ZgXjRY5rPK_?Z75kW#t z$PlrWU^mgT5Fzt`CJ+0+1YRoC0Hc9`hiw)JBZzOxC_kNT&J;pkZH^rF2%n8F`$9}T zoG}LkkhpH0Ct;V6_n3{MiKA=!ovU+2Ez-66ZY39#DanVSvJRq z0;~5J5X>tTLkwVNM#KjD6pMf>h);#c6NH`xe2TBx1mP7FrT{Ap8sDMtIe2&+EM5Q- zo&ZtUEE;kOk%vfddTdxT4Al^&X_H6YC|Vr~xKiL7Qv}Yypn#L+ zd|8LWa?E6cWEDn90FjMSM_GmBQkkT<3-C8HR8+!wRI(j<%QX$1RcI{o%SFYFbm@yW z8WbGL%T?XQRYXkkRFadvRZvn1D61&2Dyd{Eim6qDHp3! z5{FAwnxw5FbyQtmIo?tpagkYmloYC_QlqR3_zqKm@6ej60(mHDGH_ToN$FczUYgZZ zo&XTZj*iNdmy_Stl*_t%sHjXPlnZD$si?dts_+!e0nd&=G2~yJvMu0kR5hQHb<;(R zt0p6Ot z8CqdIm$S9w!R`6*!qU;6K|}lHSnoLVdVc8o#FJ@>8(}*2BbU~2sAbC~KRI1nN9)>= zc>u-ztTadNL6HT1eNP4Ac<9Brq4(qY-bKyHwM;8D#rw?%%g19&PsjUP&&y@>OgBRb zXb9bBw;%mGsVW{>sUz(*ud9}>pXHeEFCSiYbbLBqK0~n1pNw@KF_FHuJbiw?J@M?s z!0zT=gyXr(7hIgzQSh@dL^P>K- z%SU%jdfiqnmyS=ihBbFVpY*ipnC=zy+rY=dvlCG17d9ULw6;0%?tRM~^-UZ#))iU}yS?xgny!aXHXRW=YwxPnsB6o9bAM z00yVDIVR$qx)NevC5_??t_4Sys4Nf8c$Ik$u4<0^&1u?fFM@4;)?Q&>Td>nCwZSd~ zm$hQCao@CTb+LwT2R*=d>U3b>a`~tvw-_|2!z}8S z`dHPsA=u?mNZa*8_YIw|v4Qf-xVCYqQhA?+R`F@xliMJ%4Kso!RCA$q&g1ONdE#V_ z>%t#2A4wjm$G6>rCU8E8Dw0`jXz+OZ+pibXk$h?din!!=r}6t<^4BLgc@4O{AaK$G z2)RAPug^;$rzR`^_df#)2C^Tn&W}5Pw1VazIB9UlJEs@;F6iV)SSN)T6^heXUky{0 zI8t9vGsn!lG=C1H!)>4Xkig7?^qFZH-k}2h7-AZ>S)B=M%A4aw1C8z@_Jko9g{6N>(B-PDW8R5EH?rnZA9) zWyN|JH=4V%%QISZi}3k+&F#YWvm?gUV%`{1dnj|d!TEG3@2sI*+3SF zueO*eL!J!aHcc{d#(v&DSJMbaHa55@GKUvThCh1wL!XicG-(`Yjvq!EbEFQ%qz~#p zTWdn)jm_4l&p3A3itwWyeFK>`Y2U|~1Wx3OYl7y_WnpC^<&SOsfIh8cEAqT{e~)#* z&*L#M{y8`LHZxFD=@_j|>9pX`w(G;`Lc$YyURX=B))#jTTviOYi(`cZ3;(`rJJ9snNSiqy2Y$t$;zEy$ikE^DcU%O^$ z75f%`rFqtA0urkCn^~agWV{9E0Qv^PxkDjOlP5&sX9=9mn=ZYUS_YKfMt8|EZE;tB zc+jNh#|ij~`+FUjE3|B4D{93xdV8|oFV9P&>DfM|J_z6AsA4mmcwDI5M=M$G$OcG7;k8)oxfqG>2?TdejTncK@k_w#g!Yxpv7PoH9hl44?)J!3sG z2s4*aTBj`t<%DAphj+q<>ttEo2_2NcMoldaO2CZeM1JPg*b`4K6eh+%%;q1ba^9@q zd{q9VzGbAA&I3o+AZC=g)QY1@?zma}n276&v=TLmb5dqM^_}2`2}V0SRMt-|hQ7~U z;9WsYfHOZb&(d@A z*!~em-I%%hPs`;=36D*PuVGr2y0#HNtXh}uAjhTj&Duj2WDEna%s5X zKD5t)iM&>q_ZXA!xQTN;pf;ryV8y_+<1KB@aM_olofz3A8wr0`)RGt?BQ}}dzTCZi z;2rwe-vA~OonvaqSd^|F$yY5yDmSzpOc!)~wZpLl(u?X?d#>z6LlkAFs2^FK@gz1e zcUymiV!8ME+yrwcrnu^gS#!)_V0Z~Atv@WD2zVUuZw0Vlp9~~ga^jCp#_VRy9J9IA*8qR-oYf*Cn#W100;&Bl$Yp(=VM_yU{5fN)fDY%$A_`=Y? zJ9n^q8~UgYnaLRu0S${uE>L+uYHBffe>iJxet_LS(rj}@^?-g}+(vNeve<}=SsHc0g+b(kSjXHN z&P!WNewIwgVm>&&F=APv=6KIF*vVNl%f>HjBVUJtI68LRdX6vbTmh8d(UIf$*C!W9 zexkbWF&Flpfa7+iTz0&ipU>Fy#+>u@yHdw;X7kM(Ldm$4782&2?+)xk0fqD%*?7x| zMDz7uIk*rpgj}*A5B86wZs5M{dMb1%Nv&=XC*Yy6Af)EVMyI_?fdw{D^@(HQr)aNj z!j|t`%*(6lSjt zr#MbV=+OSh=^)b?zTnF#wOQmu$2>ya@jZSH`S)~tP)VR4&I@Y)`e6dQ1zPzEENcOh z*UrvIaS8Hj;?`%X_z+u^1|F{$pH(i?`r&>6*8_qp&dcwz$^VlNd{#3YHynsG*?Tvu zAT;oZFdH+W{g%ei>Bh{xpm6D-$T{|upC$;J_LJ3T#NR;hMnAk1@#}RSOS0RfTMXYF z(I~yHXN`o4jYC74RjfEK&FIm-wsvXQ(AA7-TO;E%T+e@+pI4n)?@E=_zRQ0BVHxat zxL>zR^R&cr^kvt?xvp10$`p)t^HVEH!nm>V@+12aCC11^)@BHVG=g0NL z#07C_g8Y6+#DrVoy~gnMR znOA z<4)VNm++_3|?2ba=`5% zjUWI2sC&zxx|=TT7k77ecXtR9+#$F-1lQp1?(PuW-7Pr53GVLhdUl?fntAWJ?=vSK z&WGo%qIT7$pla{+@9x!o^;*|Ym#BGTO}$b-6VKfBQf~??&#R_xUI90Id24 z9-2MrVey%L?M0iP37$Y(Xi_p=);k-U^uZSb?DVdmq+u2OJ9rg{&X&OQF-3fg_-OPr zPKOpBbnx6a52ytNZk`LG~J?cj1A5zjgwTTBHoi z^DFRiN0oO?PITW5?vG+sIeg0b@lx=Rr}e2=2cBxA$of1sEet6GzF?d9w!!NRcrsKO zfeY)!QyDtkC4GKvp@Ad{K_{n0jAyuSkzjk%IGa>#V8wQt`P&_Le z!#y)71DTY`jQ2nS>L+FMi8paBVZj-lGlIbRvdH#%P-HE44eZTW)7_f5F?9lkB_=Ge zPjQ| zYNA_}N8yb|k<+1}{C9dvYk%+zOm+!09fCs&AS;pP0X;n{KFI^|qfu;SvEG6TPH>RS`lOQkMM z=uGI>FPcd%v=eT2r#(poHAfHRD|RNYPV`+3j||luz?o-BZ>01M_~-;yKb83kn#68~ z)^m4UPX#^JZ&(dAP-&T({M9B?_d-Qy45*gm^|u#f zn5(3Yjc~Sv-j!XW@m0ckhKI29^<3`&Gr4Nakx7;JdtE21d**;2I@lm|`^txgAM-MP z^tNAz6ZRGCe$+afpDG!z9dU@j@2TM=P}oA)qUL5pK0OR0fu=ix>op|d0pZrr|GpRO z(?-jEefr|Wv59-xSsi2|nlfZ2e{NwabWKbvJLP8PfkZer=z`E`_!AtL2Zu!MZ4dWk z99od>h_fX^rZre5Gq7thpZM}G0jEmF*_~}}m5W6?7pT%s1g!XcmaLTMF{hy@H{jdxsI=SB>8PjgKR7w}ZN*DyDMxg@ zS$0W!8iRhZGsY+2<*({J-mY@bZC40`*wIhWY{Ru+n4#AKxlE4VKLq)DFBv@;_*|fv zJ!E7#E~jnnP!-sZw-bHS#Q0gPC1)zwg&KB;JTwPg5CN2Fa?jQXl4+zhok(}NG}ttw zhI=@n%o_-$HPp^njm1P(XAK+Xxf`k^@BR}NoPnP%kNKpJYC zEXicy3xX$5eH90+E55;Xjrq#G7K(bxMkTP-*xVS)- zl6O$%^;yqoQ~L)KK-Sr7NK^BUxVcHozW9~p@Qbw*To=IBP3+SzL(4Vz%>0;UzUG#s z-}Jw!m%DNQ1MxyeZbDrX^x^(V%M!BPQS zM9_I?Rj?Yl>TMuLIk9_R?l)FQ!BOuKWTv6KO=_aOKv7n~(a9`OQx9ofAX7_eU66T% z7;ycj1~kyrGr9o~Q(9@Eo>NL9u+%rOK;ZfuUnu>1R3u2iyM9p9PrzZm@y?aXJ$PK6 z(B?CH;JHVM1bIyZ7D`mAHJMg01J(l;1119o13Cj511bZG1F{2>1EK@Hkk}CKn`*vE zGpI&;8ou@IRp9Dhy1)}j@D%SES{&uSI@){|MHfXDg%^bu1s4T=yL}$HQ$C@bmoLxx z^69&`@SD@~$gT1b<&1nm&gV~}ZkAy@&-kqyv;&IRi_UfAh^SIpi4EZjvM{V4Uc}$= z2}ff!-9=MAXxVp~w<94b3Gl$}z6+~K!QEp486`!oB{k#?A@Py6#24X1OWYDQo&>r+ z=f!MeWx{`FOcqfNo}@%W65p$zmVW9MKo1c73^}1`H<+|=@_{ByZAyGGwjnXH%>_|; zx7fMx0;A1h*IC{39dtq)$ytH>MyN2iyZm5>338&NW;M%hKX~svkd|W6=UYDiXc9By zNkJ~*(W2Mk?8?+tT^BX3%W?(T3YQOAu}o1_*g>{3SxrGlKdB4tn)jNraJmtHJ|_X! zko#v_P&=1kkxz|1wN1_0tacS=m6%|7lOtQAdd?|&OJ)U~Zr-_6?k#5gR^yAFZ~2b? zDOMz*Ly{BYS6tcbSvDVZ6vPzc^-wgRH(}H)^lG9Py z>|nI{rDigu|}zh+V&!VtQgcxe{I9#-oaf0so zUid$TFu)gif)Ue!nxeM?IQ%P(9yh=AJj)I8iUi!Z?a`&TE z`z_CgS)s`iU0cSl&ZKc6SvJ|urxDwWh z%$tkkA>%3pHo3H}#mDoiKv!LSPtNPAvWt($@|aD)cyic@_Cdq0CnHBlO!|99w!x3L z*dw}Dw;5v3vJoNW#m10mPH8Le#34M-W$tCZhki)HmJNRJiz0+<1sT73H7M*IKiRA= zJtTJbaKy^tTe3E_;7ydZG3LNtoi=L6<)6Hx@S}tF#TBZ>55FCb&Rzo5S*{qeT83y# zJdpJaCU_kF%#I2!aam8p2HT!CHy1x7UPZwXK-Y+{i-^~om&UNMUuTQcBVrP8E}LGt zjq2dlXTw-Av<-j5GMTg=7w|vb?^%+JT?0wgOD1?j^Ihw}d#&nY;u8$-Z{p6B*Zbfj zdpVZ2T>6GVs-cgqoOln4-xQs=rQ-qQ>&LIJk*#(<#p~+r)u^LqZA<(#^3nG0)H;K_ zFh+KLLdD$1X8ackIAe9~Lw!Tnr}L>r6-MK|^X+KO1@NERGTtO5=6jSev7gUBxq;-I zSvo5)GEfBlno!A^(UiD?hB+aEHiJDOmNbRMB?>cv#U&mwhGmPL#{k!qm{|ltp6Spc z0#Lj#hGPS3z}+R3(m+7TAeTW%$u5@s;R+vt!8IfZ{K1(Eser-3C4hm#9Ud~v+S(*l z{CD^Cm_+JA=oW?2>tXL>O;7zn?YcAq`%_^30{0Dx=t*E}V?AGBg(Rxpf{={IC682e zRPYNaxxrGZoZzStjJEJvJpDonz3H?A3$5w+L|}+jUHuY;axW2-rb_xeB;t%=35kN@ z=sg3`el|nJMuUS=)0rXD6{=r~3QG8GMhM2{_h9-F2l+Dk3x+Sc~Z7uMxLm<3&nqnYK9(7ia9=9Mk$;M$|t{kD(UcfjpaSOUva~YV~X^B)Mzln zV+)S{N{y^bo7|###!)AJ{Co_JoFQW^g<5JA_U6q8EjlM>xArrL2XS}uE7>`m=WfQx zHWOMBs9V7U$i&0X~4a`xA< zSdGel{z%SVEtVtQg@vt>BST~IEmwvPdP2h^U~?(HKUj2{FU`LG!rnZn!$Wd|daSv^V%I_$@&jwkk%phr zf48pA9u1U>bCgsJYm0!&-qC3^HWDu+nB*v8l15n?-ZVTBh@~UeI#Z#?BS;K z9_mv4cZ2B`L||bn3_@v7@80bfp1}F1gh<~49v_ro7Rz_H?e4ChTiHQb^zN&dG{;kh zQzAp`zN;%n&*5&{I;>kXJH6N>cY?VEGf7$pa|H13GcSwVFBm=+K2?5j&(AA+9r>{7 ze&rxHkx(ANxr8;v&YsGdb#Gk7Y-X{JVJ?#~EeLwg>HPbdh=Y^8Dng@T4g^~zxxFad7)3%Gv z-rd(A^J4N;IaZQ_z$Ld<9G$KlRW!Wi+v>Pri+hkE`~`pqbv&?kI%f6z!QiTl!0SU9`-SWNXiBN~ z4`3jmj}Ju0@`S%#(sTToQ^nt~T>o;Z={TXiPbKg_EtF&wLt4f1{11~FOlsZp< zNzL~_03~_RfZ!)X^~%D0I@BvG*DnCILLJ}EMOp!hKYFmv0dl#-Rs2aU;Wjd%RqG&B z*%ET7493?7nRlqBZ@*9{Mn2L9EUI@And6hQc#Bp?_jVwMaBm<`6exM8v8#w^W<#7kq9yz9kyT>-6O9M9(JzSQLq`)4fZ+`d5#>eqCplw)il$1Ir!;xCu zna)B0?InFbg<>*9d7`CUS#$YOQJJ1t;fH6kHhmHc24Tw01f`mLcL1`({XYclk1AdN zeJdL|{;a2B;40SXF0f;j9I+e2M;v-F7Z|=o4Ryr3wKS#bXT~P4Mm8t!A3>W z;`oc5D6PwgxHN%1LS%Rc?td5%f7V3G{TDAH*?8%y-zIFGVm{H1x&zixPQpT1tNXc0!-qy=gc#|R-BopOf%5B{am=~n zbfbmcO!&LG=qFwV$8`#g*5vIl>K5;1BjfuOiRk8MKl0yi@YDy_P@az_9vfZ-R|iAA zk}fE80$8E~D7Z_|GE5d-{eKb2kVCQuaq8mgq?jy6MYFGIr`0Eh)7%VrVdK zOI2*e1wbSd3$A^OSHs=e)oOt)iwe-Jga=bu8!wyb5^Q^0HQCa{koS)LHGix@uvqKC z!Cw6B1=4IZl8#Fb!F8M03@O4+a## z8n>$nm)>%huvr76JgT3IEvmuzm{DE;StC}%&)DZzS9D8)C>fl+?PQ2wX2ifXT?Tpq zIg!64`{)~T=|SFT)f{VNSH_^|H>!xTqG`5az=lT+eANWk3!O|oggr`PNnD~GOMo%9 zz7CT}J6XIM+_mvz0oL%G9zuppC>Jdy+bmk+K^`ob)tCUun7Thmb#jJ6)?Rz8Uei-D2ZZ9Ho_ETQvNO4 zWFltoZg){wVs8bZVf%^kv8(%sX#G+3>%VQLV(0#&Ov}dc7sDhKWl5V|LAdq>+FM{y70vSXgkGYMiH~ZL zQG0m@b2bBMH0n`HfP4DsaHH2~Z?)8WMVx_yiS-jsD`jrdoTkITx>7oj;x+T}Eo;gG z)fYYPD;|&@k9-C^6xv_Keed8fv)?biv1k!y$f{MVQo* zY>83?WjohsWK@D89e{Tqee~|lLOpEp{n(z`%qTZbADw7s2yY+=d9U8Ot%l{Eoth!d z>tMi%h`Mh~m80xpQ5bZ;=*SUJ+p;c>0!Q#M=5P3yB<^-JT?Q|hK08hy98@%i<$=X>DqatLt4KP=Uc%f8N$-L zPU{qCiFmvK+ji#cTs%T@$@SU&!;t=?%?mrzUvsUpP&~k(`Cqm8DiCms7e|$)+{Pb1 zI?(bDr?O$SK$7#!!Ek9J=j^LdRXyUF={37K(pu)sVsf_@(9xe4ONM52uRzG-V7axLAHu>Af`?`DMWt3W zrnC$4kt1!58#uTj$bl88&2rQ2t?q6SB4`$?KGo&bxaM5Ox2{>__0^t=8e&KNw2zAg z{xYM9&IU>J`m2w)6g#}qFXs?jkFF=2Y`FbJ!eLSDpG4@UV9@A#P}j(29+4@;;r#nC{Fu@^B~vu)d{*ZZB>jrY0N@QvxpFR@?G zy=jjh2XQL3DxE8IIIa$=H#pW9yWd`KkF?faUvr8dRf;c9HoYnyii^89C-3_fYnk$# zg(iZgD+4k<_xdC@S$ucF`Dp4BuiZz4L`Jlg&ynjj*co4uUrZ>RTZ9b~=CJMN^Af=C zVzd2leZF1m?)td9Igp?H^!mPW@$q!O^WkkPkP}^uDgmpP&Zw9E;{;ZfTvRVfsj}zO zgkg}akFCH<%9ru0Nge7DG~WBltU^;MzHj8wwppi2B@iB*=mhOJK?`59rdm^F?<|15 zf*A7{cRXz8_7h=gOF!N=?aG@ukw0`hxh!b zKQeif#F-jU4r=0e;-arXD1X)$uq4wPl|&lxl20_>@kHjBjqNt^l?N*?TrAxPN|}0) z{7~ss(Z){lKw12%%@NoW9m4mEce^gpuTiy9LSp_hchg-rXv_ML52Fn6>lxI~vcA8R@JFqt{@ZwvO~0?0t7?6sPEfqIR=Nl>_4YQ!C7n zBf2cD)wUZajWh&)?@}3VT>rviZ@BEd+voT*VON3}+Mk0eL3yfMRW<9*VjnTkdKs6L z=5s&a*-5fX$X&;k>lh24M;$zoIbuF33!aD`8bk}D6=9`n&izc%HeL3f=fnd)UR$gK zpS_=}TC0$=6UkZ-sr*_%S|TbdCmqFS>a{s+N~XM>mhW<#dWW2gO$M*F>(qqLjXS78 zHs!Uu$gNx1(jEhjF;!F22RA}r2z;3OqtNfytu?F7TK-qe5ibt5Kmf)~%{6}RBa2`G+O zp;LWG*bFy1w+<})J0@una_zuHU8s3_ZBP~ThJPG!GP2IXWnMqd2IX$Ms~H;6^*8=s{$S>kpp2jU;R>Du0M|P+C-b@IZ$>4$Belmn2erpu zvUd|_Qg=+h{DqMv?(P*nSCt(Tiy&O2qEKosT*^RygP!KL6c}v{VaZ`)2K*3OTkZ!) z6xI`VBECQ?vzsd}#t4AE`#X>uA!Wv)Z)TU$2$ETesKl2ZyVCS>VUFqkz`-cp%A-?i zS1*r`r<)>Apv(5fWY73gWtf0rRnEaQ!W3aTh!TmsmC5R_q91vMAMJ+pDKY!TU5MPL*)CE>in%4Uz~@L&czwbZ?W;WFysyEG8Oda`zrW?z@%l{3k* zQBW;|;Sn&9cslBv=#aB_A4oxr<8eXddiL{|sglU`F&CagP^1PZ7CX&@MzEMQX$-Q}KV@bO+>THXG@pIs8`1doFoaUvAXUOI^ z=H@)=opd=cZrxH4*!r=B3`7fADkNoz0yr&RfoaH;K{-mjquNw0n@s2&piW85AuR#W zE~)U#x9Nxsx%G&}&%`r11bquG8b0z`Q5xP1xWv{kyjRT` zh~`MaeTVyASzu|WZcOPa1`TD{Hd2M-k)29*<_CtFm8c``{F5 zLq`cp2e@)L)>9Hd@Tl~tMrtg4B-|T*88ZM${M-hBj!1a%UT z24neWx5I4j+HS<+A}1@63d2-aO>g6GHlx{m&xEqR$U^l)x@gM`l|@^ocMoeQm%OF$ z<|u&tg-=$XQZ5YAps@zC-i+nhK6tQ%G`h}@2|^%oU~yCOr55i*`#URwa+cPHeJaz; z(^@0Hw6CDUUF;F!{wV&?85{(tGHVkeI|r8amjQj@<}EIk)bkGY)y?+$rJvUXu~hGI zcT@C0!Q#xHt+(GnSbBOdokm@;vIS{a#$0<$Q4baZ=$Bst5~RvR_)_c-zChN*HD1X8PO9ND$!d0p98NF& zC_1WmB_BH>EBp%1s+cX?BSY52R=1`7;-{tK8pUdp%z%8Fq-Z-RJ9a}mI(sRcD-=DK z-e~~78t`*pgP7z8kb7jy`lOu~y(?l*Hd`xjO|_^EuUz@#)UfrGDd_$+U!38thA4A+lLj+Y=%tAUO*aiEyYBg)vqUPK$L(@JoYHtK4z|rxq_+ErgnuT1 zUjs=PHm#?m$n)eKG*MEkKO3MHez@N6c!&3$;o)al!e!%j{PC!Jz zZ!D=+EHA~LbwtdN1tL)pi_?Tx*T^~s+1{K`MEw$jvb!m5SH$TW=yg& zBsUWH6h7Sl4o{_1$4-vQ4ob85*+7uj0M(S0qt*kSlEa|bD!*vUUoJNInYQ=q-Ldv0*3mVPF6lP&~m!IuSl;b#}@BeNiz;M=SW zgCf^EgHJ8uZqYrhp52wEj@^euNGWGK3nMzsmrO;-l<$#vi_qLPW4k?8?wWc2$(|>G zmcCueF<7IX$yx{%9cQ47BjCOvu6)3XYmNBD0!X~r=~!LanTqs0j#v#o!Q;lZL7cH& z@xg<0&^&k=k8-ZS&>Q@YNsBOBy@=qQHlN^ylZcTLBC$k#z!&D&pourER{^mb8&FFU zOnQf9$)y+*9t;cky#P`F^I7#Pq#7p}ot|$%MRIqE3CJvQ!4d{vZGh99d74 znYd8L7Ypj>@g_62Zz4L^JWYAzx;?*&tWX99UqnLBBiT2atG^eYu(HG6nzU}aAt9-~ zPET3N$-xDs+msJHD^Q2faU|fKeQE@f>30awj*Q2BVR)cDc#nlIiraa!R=a~yvof=O zR9m#TSoY2{8KnSmrLOr!8uoODf*FhljI=!xh2&88jVvxOv{VfM22WYg@%lyCjSY*(36;+2kS_JH1jXk1r39>HIIXbl4u=fzFTF>L*i>xb zU5@ra`!4K)K>J(a+4XUfv|C-@;xVF9z6nbM-#YV{PSk}#qw=q++Pt)aiX}%IxA2d6 zL|lO_ zZ6h1~C}$0ws?4kA#?c9b8B8$nma$^bvgL^~RnbP8A6`Sc&80^;mha=Y#(Ssaskeg) z?>y?cD;!I~Wc1TXdspb1C zMA7sE5=2o7@QmW0;U@0TV;E-}i6Xj90-FoCo_k6mzzaXLiAT*)^$fUAxiQ1b~jKOe;`i8lFMwwXp9M-k`PS1`xcocNvH6~c;*O~J8 zq@>mp0|)X2r5o|HfuS=u0(79>qvv8Aj%e(*|E9s*57$Ll!}6IUl1>FK zgoV(kFN@!*;5fqJ|54T}5*&w$TU6fsX%1BIL8+oQtn=O;e*61FIEe~>39H{je*Y%4 zG|qW5WQ38f21BWv;4({n?G6>0pP+N_}hED0}N~~ z`+!}Rv-6{A!n{3>k?B)gTB!wFr>0yK4Zcne!+U7wbEsC^hdWJ|10qagjW>Dn7ZxoeFRE|LmsIp6#y{#gDd{zMAX{_^Y6<@MWrcY|b> zyC18WLX?$Tr~Ng5YOh(svQ!zpmg<`cDoS|KM(M8ihPf^CQv7jb+L6jovR!_({SP9w49 zrlaW;zxG5j<`bo5_g;GPs2@1?A0ajDd=}PM7Fu)WbD{!cP#8Tp-u;R<%SD}94dL0u z+O)Z~^DzXA`a!6^tfwzv;F>$g^R1vDky>eB)Jog zu)rsr%16>>8fsIN4poAcw4v8?63mWy)7?}OID4{XvqYkx_-SVkeipc9(^0!?8V$|b z{&>6!@=`#k%S~W;3wlwB=FEYGUdfavlJZa)sqwv#wS<^^A}l2v7kpvhh*!l1AKxYf z3?vg3vaN(dqJwObG48bqArOfi9EVPuNx!)6c8am8VC<51`kmj`=NGzy6A;O}Tk-f| zLNJc8Pje=c5p1~;$E`u?G&*G*X|UxzK7VEp-+98R38;;erRP=LYyBGtQG6uA-_}A7 zu0OLE|La=vKb?b3EIeWbCI5e?_m2GkPVX&}9SM0ElK$W5y-<}lH2)B$KeFavVf~AD z&i{E~Hw)mnl^uZ-YdpnyN@)H%1O3f$W6xz5cszq8llo2|7-`z|tLAlzK+BBu^4oRW z52yg=V7q%*i$DVLlf^0sBj=8ChZ9NgLDbbs$Np0105f5r%b4AXIMqeA!H38GM_g>O z6R|~4{I%FpeOVuu{x8ZX{F$*SEBjwe+a;e3m(R~FN z3h~+Zl34|sO_G=vO6AR(b0-W5v3RI6K~C|O_Om+2HmQd~9yk3^dt%rxVXLfJ!Q<6D zY0!W4R~5MsM(}Yjd)0T+%MoIBW`V_@(v)UU6B9 z`VXV*fA?mQ`40vQJNsYY7Jz%zXgubB-K+XRRE)=O%>Ku{D)HI+z5-R>ys%-5<89tOwmhDoV!s0Uu^wD0*l?8K>B52o?-(Dy6cY+tO6!^GtUy{QOm zHDF?vry=qqo~jEqlGzF*W!Pb5C#28A6U|PatsgBA+m5MBq~{zykPEQ-G~G}2Hdi4h zDCgoFdfC|BA{4|^!?(*(l+o?l^@5kX0v%6c3pB4Yhttn0q18f3LGE<$usPL4R<*8& z?jC5q8VbEd>>Q^ng?3Xzjf3zy!!WG@6_71#l7|ZCX82>xrH#sHv-G0Dxa8D5$cM}_ zv_vkS^_YLn!=G>{`Y9H(N<+?L{picYCWxcYASRqaXR{z-nC1Q;Z*ia3n{8x0e5FWp z3ZKw78Ou!xbSO9M9Z{*kAY8zUvD3A=_2mR!i}Qu}j8DXrvaS@9%Q`z_cKZ&q0v`6J zdvntw02$q8(HJ8qf-tDJ!#V;eVHGFe_yVk?Hv6tdYxmQMwJT211ZL!$U1m`JBU7+c z4e_^BqYjKs>}qIEK9t?pp2B2H$(e10xY^s12&?l~sI#2Ap`V;i>5xl#?j8F&w>bEy ztA&QB+;;PC+RYc=hE2&05)hSEo9J`s4P4|=kaJvlT2YgyG(&}!wVm!=$SM3bRt{Ax z%$Lc!9to0oaa^*g5s?&c0nXw0ux7(uBzJ}dcPuX}-`KV$?+A^pFA)De)VTl1>G*%z zLMjVITLS3k-O6@;62!5B6SLC`dQRuv_!$khJQ<_zz(!VOfO;K68hU=?YHE++6y0-b z>z1(xlXYP6(HlWr*r{J1f}9?ho;}#0cDbjh*&sUhKdgNpu|cKwm9PcA)AI>15PEOk z^w^Or?!qVN6^!}bWAFl9refW-unjH2D=)_Ld=7A~{akAs$H%Z@%ahM4_i1yJV@#A6 z{a!XF{Xoppw?7ZFF2hp7Etf1yeQbv8(vSm;G~<_avWHG0?5tSja=bPHz9lTecSjYb zXQZYXrr@HH;E}iTA`vNnbm5g?Vyoh9k@TCSF?gJVA8HQe3EK$oZg1VLh>gn+evWm_ z?%l-J8iRw@K3mMJuhG=|`6o`jB`82?jclV@^>VS9us>*vOnxENiFFt`+!J*9n{BSX zU|w75v7pMbqHmI?6rHnl_u z^SEp+9rkg?Qw_@NW}lCSKNPgJn#8(XFfghzy1x~a9pr)^HURu5R zA_{laiMp`$Zq@&bn%-qE7OoK11`%P@b|e~-k&SHJ8=WQF6|uq$fXc+s69Ek6-kO-# zw^15|=GpQT0Ms~C1u8kjfOikqe(@_q2-G>T* ziRkbKg2S=l{M%#ZWd5Tt{o9_vIGO)w+se-J*9`eZ+UA4_>9_l*FVMI=X%?mE6~@_H za||ANDJU7o*^?vH7*;`)>CE%Bm4}p8yVuC~(#lEXvxhoxhrX#1zunN!r{ zA1)uhX(xMj0alx7rw}nB=v}=#3bN~)_My(=#i!T@5SE!fDexTJXhz4Q^G0s7t-$+M z$6#H{J4!)%L`od)FxrLj(mgFbx?pA)X}(xuT&Bb3EL-~$Z!Mp%CXAYQX}RK@hazKO zd)H!}h*vj>4@)wb-Aw92DNZMm%10lC3UD@ha|wXVwT-5{rnrzwu_UI%)wsdI*Yb&0 z!GrYA^08o94%?4KJB6i$Y$T_8kiT&E`6&gWhWACXdHHi_oqlgKbL8u7_5?3d1eI+N*~Dq%y2jri24aXGt}=Cu&&sD|4Mg(Uw!1Biaw9B(Zce z*j@mewQ95%D^d>XnO;bmiUeTLWE-Twurl537rp_yCNc0FfD33ELEBhP1b5Nh7u;!0 zD5a>Q7=f>VUOr#|nQU!c*zKS6yu^Ky^2!~99R!#uPa+;x*{T~jYum)G-5BrUW@m}P z_Ofg$8Scoz9s3&N(e`_3x2V4RcXkIL}=wr2GH7t0!O2FfCs0j-;( z2;UXSD6{$WFA^1I!yx2`m!D?o94G+O9H6mV%HO<8GW_kn2yg}>9piclf)|b{AXOyn z;X&n8abZ0oGWKtGj^=7)a|K|UUnS1*+=ABX@Aw6v+)N@)%>&mKO8*6-+6qL=Ly-l= z2yvP%N3eAljs;(7=6GVLdI1zI3M}~AQMJ8W8+8nDn+H@_e9kK?19om@0~vY0;m9Za z*=(A3%tM|-pchTvo@GiS?^11qu|HQBsYkOrgunInpD^o>uQva5qW&Xw@o!$8<6rxU z(1IQW26W^w10-`J{K10ZKs9bdioAddI7_Fr_Xg>%?^SS%rh@veGUX>#T;3WfF@?Hn zIYGrz@iYd1*;*lqW#Wgm0iVe5eOVgM4~T^(xM$yQ$HJArn_Zj*f%Fpv(ejIa5;Dc$!JPhUNxMp}`~DNL!o zonRZ@q->k8P(RkrNG?!D_9)yI7S!S&R_yBY zVC?;VOLx6WA5^xb748`+oAC5C{!qZz^zjK~8dvmiYg107x>n$>{>6Nmu$A7Qsjn*h>aVhmNU!ZTNDQxS*1+<0{4VC@aWac z6Nq|r1=im-2prshINASF+N%@$-)ka(&WCyzN+()H@-$TxK8x5>;}Ula4uJFd5E7{Z z;CwSoH~JV$4HxvSP}dQiM@)U2!z>ft1_4t$hZ1=5`dMKaH0^0lNG!c;JmQ&}I2{Tw zg6r|T;<^Ukn!1KMW7V35qs11zICW;$Q2H3zo7xe8VIK2)pODVxLYD6p(F1Fnz ze(G&^K?EvK51HZa&`${A8q1QxsHm`)jD5$DxX)=ue$)46gLU?%9Vw$;I%89It5d_T zXDX&Jc~v6*bPlEW2@O!at&0esYQy&rA^N|3rvF*>HZ${IPsJ0#+ad624#ni( zLeKeUEWy8J?Egk)P=pW-1qljar6>9#zUA2v3MS825$T3CdS0%mDapd{OE9HB6>5w~ zzpTbb5N#}FAdtdE)9svMasV3RqWfzhPGnXAxu_73i_Yh{x94Uyf9E37R>xg*7y0>z z7R>7?KrTXd(Mw@CvVq#*E}B{f1Y6~@biNJIA*AE4}@cOq-MR{h7WHLt9>!& z)(F}Fjq%i`huk$cZPg#L=!lMQ7nV`zhEhkB z_D#^5UJ;H;XdQWJzC$x=VkQpxyji!+YV}M#%rTXSW84noJTffQ(wK>?bsM|=2W=ov zmzaQ3I8KMObDws;+@LE4Yu{??_hFc&tB!e$$^B7KEH2xaOf?BoKU}Amp8D71=rsh4 zp+?MfledyLSY@V9%XC)ZZ}{S_j8<2Si+1L#dl@*O*J`%v7&kk~^VQdo4&A1s{}8c1 z%6|X0*_)H)kK~+xmCFy7pVz?E@aBZM4Pl-)FTejo;&JUOEsfDBb zKGCMygdrn1oI)wD@!YI#tlJ;5_xUzIj(&Nb_)UU3p9hKp8mKP0e2NC?!8~EDZ$jP> z5x3}_^qP?_>7C*--ryrH%?HJF(1dSidrv2g{|8rsdAu|J7-qG{OOG)z!S=^W>%^<-KHEK zIXkrSNHUagx^aent_a0fyO>h+l4^r%ltuQkq)fZX33qQU+dk_wD@Khw5U{iBs7jDd zc2u&esL_&v5`$HC>r?PkQPOy9)-zX6ShXs0E)XA(M0xex z?0;eV0?OK+)b#gB@@MFczuj>QMf@N_3c7d?=XOCHXqd_-Q_zIrKDDuM@$sFOR9%c@ zVGenHDTCKp4CuS*l;5D59RE&?DYU+rfkAo;SbTTQIH2$mqWf(S=hIrs>M|4|iBVS> zl>2M*)?vQ`?ee!O?}Bqsp7462UMBz+Uto@n1CApAe+N^%5Gtv}vSzV3W8L|2iqxNO zv8i_CoBa~SZ(b2tpx1Q!@6CbS@67?|zcvRajsMylpy=5C-W>20?$+`M)Svv8SgLtU zP5(<`>GJ-U#6kehY(w<-ApIGX;@@{B{uwWbgXu531C>OfXj*1K?(l+Pn2Ki}+`QSf zWQ)iKv>~I*&5TgI?E(dZR8+ECuoPu-r&pMxD8C;W%5@ShmX@e+m*g zGr9B=7=xe4X@Q@6jj9K(k0_dTkg)aTPUb@r0JO4-6o541+AFt6HUkfXt5cOAy3$JV z%y!raW!GvSw_Q@h6vJF|z2ZkVR4WI&8FEr!R0LV4lR*{CWESn)HV#(hXdSV^uV5Gp zFkl*>lSPB+)wMLv%;Wk*9o}Q-=64?N7-Y7Qemu1M&8NAmAhs48EuQ%&LCg;h&6t!C z$eGPH>oI07*@S4399Q&U{~=>9$xr3dKs>cogX;-i`?n z4E#{Jw(T9Is68l96#U*p@^tuIXw2r&?JppNEgmQl2|OTSL3dFL zgU6b0KC|yH0JA|^{Dg;ZkNsrwTr#I;+zD-VLd_~o`&XZMXCiFEpBN>3z z+zI&T60H1k3|wfi-wQZZ>S{V5@A7)g0t^!3Ofuj4Ao7N$;}18$<@LT+y~4P(RCaptQ2g3|Y7(%2*CgPrZFv3` zCJxR&s#p1&aw8-UpsWO4yoPgEg#f6w9sdt`ZyA;4w(bwp-AZ?-bhmU!gLHRyH`3kR zARrym-GX#?cY{dB`?%caoaNSW2JiW__V|BQKRnKP&ud=uS62*~+HyXmvi^5S+2r>q zT+x&~m#eUIr6G`Fc&DCc5c5tlxPZr8MC(37*WMRKS}(&7^lMvU>1O{MCa&}7f;U{&S*~5AdON7Ws$Vu&t-XSn0TVFd-5J zl8=SvZ&Wwl*!L$YP^xc>ii!?SwQjKt0ymR53^2d46c)!5yhc{2nvMl`SmhP@EKX}m zFXK2ra-~w_Ar7!vQrM3jclcil8U-P+uJyM7O`Ly;9n&m@M(bFKb{FM{))QOStz|%+ zgtNzM2W3A7qp5!U9tgcYiky7r>%#r&Bha^ZcRXY@XrG$+wHNlxkw&=BnxIk(a(HXT z>t$-9Jh=EZgLC)W<;v*?3r#)uP|`G4jQ8`W zgDX(_Qq6pqx8{Hp8T6tA2_7HjA?{@1%rr?sT0akCYqjt(uIli(ta$p1A&F_%=1KsH2L89>oGKlCZIaF8I)dV`Ue6A08O;Jup{O*ST|WC4B_`p}dOJfiwa-Bs zMb|GlP+pia7{_yvoWj9ExtRoWYb$zlld~pRaB&9=F8#-b?M0N*KX{v81V=Ic+sx&d zPQZ{Q0G#6i&W8j|kMY2xT6Puv^js^L=X4mC#T}<>qbQ`po*sqOYfiGeh5xajTmNFS z&t^AFZv>tk4qd4y@YedKYoz^)v6V~Ed@=kh6j_h%Mf&e)4=gjpY*UqZT$d5F%lvaV zM7z;r5vKdZ@?8G8Y;aT^tY^C>o|WX60APh|?qQ)Eg2u=1q-yeIbH!&&26k zust&`a`~zS3Wy)x&Rlm#upk+{vd>O&0zLMGe-=4c40cFv3a>X2RD;8VslvC=iO^T9 zy}=us^xB7(E>y?){U~$1P!!1W_qj#@RP)EERiV?nP#(ajRdW9;A~@3CHNiCbdVB&& zb7k3z9yQ*ZQ{qo#zBnWp!`!CtFP7SB0Zfm~zcD?w?0$}9R>em~6K}tOIUnNKnwg#n zPy*d1EOA`GG%Fvvd!Sr&q0Ns&HD}o;In?`~1^vK{rdWR9MyH$}djQjL?EAM~8A3g(uxck%1YhiTOhQob{8i#>HN`cNZfnj$;&(&B3$ciN_8wwR^G z6Ie{vNOP(f@sjwrP=B;KN6J!#0cAUD7!g?yEZqg1(jBbq~YElD<_ zJ^=bK!s~&@O(=P-r6-zo0U7?mb5ckl%>>_p1iQvEr@?NJLyUnkezI)_%q%@FZ?vfbLK%eq*x9=j`!f)MU=_$`= zWS2l+)5zUeQE?oPM{Q{n+0pM}fU^=)2uzw1y(Nivg6_e{F%&`Eif)P(lr>%L(81pxtQI9v5PiPv^-}tuC zRi|gZX;-S@IM;^IcAPuKvbo8 zsd7LDi~lvp57-}$^@f|r%`Gewbm+KnkmRvuZ-yKasvy+FTq;#1iOF*?RgiHj3XiuS zT~px+Z{=KZ@in%Tv=D<@A$R1sp*S2SrD-gvsFh&LfX)y-rmoV?dHD^uSJVo6W<}(M zk?IW?1iioz4n4e&GJ^J((`A^fQ;S49QF)W>DGYR8SYzfjgqseS8y=!d=_M6H`*OO{ zJ!P6#&X!Jo^9?Ifjq2ZzP8?yc~hCtjL0 z!inRlc5(+wO>pl)Jg5*M)Hrz_sE8)87)6|5JVv-k@GgV}7Eg4`lhyhR zSK3n#2{kY|f(Menw+sIB>ZX8WZK(0@Er4 z%~42=mf)juQu!^~$tPnE{nB&!n~27swxC;IRM{0*eJzk$x>6v^+lWOD)U!Ujl+@N} zqT!uf30Oz|!})$GDDd@X^E{qFK>9cqd z)AsAGyoJqu+N{N0iqG2Qv%cR1|3h7Pk?8NYy6|gT)XGc%N7}h2IPtSB0>n@M)fQ2I zA`8I#ueRv_0Hc%u1TfIIeSft@6+hdei2rGelyR+o7r^{)FiN>V=nJeWJa~75l$+E|HNuLBuSG&cX4X zbV1lwapNghpq)QqwsI?w)}mEpoDgOQB$Dw9XBM&=Dn@*}5b@HXtEm{Rs!2oyem}Tm zOJ63ENNk#ugXO$NESvDKt7?xuD9!!3Mq1&ipLXCg?*cSiJ~9e-?Q8U?Qfh)5IEuB) zG;clj_bqyT6Ahg4uKoDDvCr69A}C?EzaK{C7xjSu+)JAIMZFjs+b?LNl9IX=z~gbB zrEmiRsv`4sS6psO-`;1XEkAu($_K*GLN%AdjL3e3A?U<*_Hz|a|KPbOZ3Tw2OLztK zd)%9wz)4`Pj(YBO=o@aruQT6tPrk$50%M-J^k1w)+q(0BdAwh`SK5J>>DV=F>;U`R zPD>4%-istCLu=l%RXek%$o<5wT9!;Tej&5R04)ji4PKnF9<(W(B}D?*Uq*I)Q>|07 zTeZsWj>5DSE@}ExQuv^!nBut*NYdi2>sdqHNS@jHE`nyBpSVp33AbcK)wcTZaA%pk zR$XaY?CS#{J7)6(>mvW{bH6^tHTl6U-$5o-;W-q>RYk)XA)@1hGbvV8FFb-;dTCD@ z^20Lvak9e!l9MB_q^@-zU9>a}gACYiXjPf-f=AF%bewCD`I7iaWjEk5K!uO5IQRHg zuCkSxJKq|1Q~TwqJ4L{=f(Xh=4uDY)PNqUr!Un$C+eZ`H)B8LrRH0!hAi+;dpEChf z8|XWj@u{1lb76dhYtJ@1I_$A}BqaA>CI9qOb%}Oh#i< zb)Wbhck)52_>je1fuN*6^Sdypt>Z$Oe(@K93(0uTuwboX*AN}WTD78l2w~$6L~?We zzNMX$!iHMHOS6s8Uk!l`#AH4s{}v+=LQsTf+h7>E*J$x%MG(Rf3!Tn!Yb*G}k`}5; zd6GOEAIC>-885aNHB=vSI-X~6T?d}b3ee?13}vBXO@0vX*`h0sMj z$2mOYc8xc0=1$!xO;+>YY+o zH}RMR9axBC>EKa0MsU$BCO#&}X$)0_2jR77kh8mPZ<4;YddP=pA@{pBm5upDE&J~b z$B#Mke^JsWcxZ7Slfa?<-@tM>sHa{*{`VaD(-KyT9LRuO_pCNKt>)c7$^H+R02pWa zpq0@NjI;d>@@}Na4~+A4K$FPY#-t4YjADyg-9Ype4sV6$#3NQ0+Xw*T9B0cazZh1oJ3JGPoU!6`od}$8E?^E!LeQ6W1~}nGV*LDwill# znpATc9HESv;8@H^a|_&I&&I*`SbjmZoLz`!!g~OqA+mMR9 zB;mZRB}=hE8eZ4I?VIC?n4?I2jED`I-$cB9w*d=qce`d`XCROou4L zDH`62V$(po*vdfTu6?ECkR2f-3e~3*GTRq8TCRE4p?OC2M*sO)J+(~|?Ic#|#~=8y z<$3f6MegH-(qlcUDVT=$$FkyHp=)8^!<3cfc-uI@xa^=a9yYJ}&d&`|oOfuBZHhNf zb9(8t_h02(jvXvgSJ}oT#3nrJQwniVJNl2w@--@(7*yI)M2-rC zCzMPh;xsAX!lBT0QRlGQN;_?-`EVJK@uI*)n$ftCyz0-(mO9;-!~1NoL?&ym0YW!y zoWKHZ#7M&VhDG4y{ca&OsX$88MaE8QHc1_Fj?@xELzBnUAojZ!xFI!mkRjm0&jyl5 zCtZ=xgWg$PeO-U}1YUGd{<+sC!wcWGzgq9(ha(Q@;rvg_{ouino=J)`Y4EP1U!OH; zBVhIq^xjy=Z6b59MlqN~Q!WdzSuTENeLTxSbNKe=@?CmJn79-Q_uDsb15Sd%mv7kp zQNIdwRls*O3!fydY~Jv|-7CN6LDZhOF-dPjDOm$;Ub|MQ8i@$dWZb>!D)*Yz(>Lwj z`9^;}Sv6qQUoa6V_1$4feem3!EuVeujlB5#$vp9b%~}-g1|4c4Ug(G+sXA#z#e>v* z>S5KoVF>d4o3Fvs?l6uAt`mqyewDB++r#M~#*9)OwzfO&3mr8rV0lzhy~*&``p4+y zZcH6;^i_K^v>87{}+tf+U4SXyC$&PLuPv>;sHtPmB!4cH(J5?K56_dU%M z-FXLku@KdHC-Hioc^yXctH@Ai$6%DhovCPrrnHA2I%xM=H0Qt%Hes86QrfE~X28*% z7&+QYtc8HnT9Ln9SoWZf4FT0;U`7w`YV?|gzHN!lI^LRg2uEd59OcyohavuGpdT{M zIqY8ESS1UtYN*37LbBV>VSh&i<-$VHoqbYNx(Y@d^9d&f!7e`x4Tp$~a{yeSMq|Fr zt{v=9uv8nQtve)dS98mn7#n-vwbSJB1AY6&CuTOatik=$zVPG>BBTfB2Vex=U8_HQ z?=KR>F*5xd;{S_jAtgQ$A((y`=}Rsj^D!t!t9XFOPt$^NvH*H$kbT?N^NRv5=Mj;$ z(=Ep+WRXL-^$q0-C{XE{DnaQGcK{e8A0MS;>XTw}!iE zZ4h0WrgJ@gDSmAZ#mAl(Cd)wCxt2`UT69)y1g2H#X&h_4Sts*@{ep#Z91oJjK8B}# zYf7?BW{_J<5?q%6mvOs0jjo6By`G3H(o%vq<1{KZWVfIN9}m`9Y76={sou50vle{k6ZSCO+ zCcNRtI1Eqpy%Kt6q65{dCNXB;q5UZj81;b%8Q~)6)Vqc;jH|f2UyIJ4Ew@& z${fUJ7K_fD7i1Rqd$$T6R(Lss4K1~D(wiF}1!A29$U<`=Y+GmG%AWdhts-?5S7Vcl zXysg6Uhk%cbW@HRzS_Ow7#(IXUYe$SWBE|@>3!}TeHN**ALbT$WKxdh2b`Xo`@Y7#3%ZU; z2n+=FQq_+I74-)5O{`32XnR;p$Z~FM0}7@8REQ$6(E51dZLjCKM}zvvvxDL2L$=gO z5SW8(U4v?TVpQS>g8-$yJhVPcOa{tN$c{A0lLN_pqnTlH++Wb{Gag`4v1D z8LWf|;e_0?^k{wjE$Mf-LvmklJy}A`X+B!zvvFIPm!YDz=H#;tC7Ogt^vKpuml8&#MCdb5;?0f2^&<5y7 z%n8V~YkBE2S~I05eLGce4Mw;|=jKdX+9tUeWGYSx@okS7Qm>7h=B^QKP%pA~L!+S|0}K zlc%Ey94%hW#yc=b2@7WfLJ34Q(BlKlhn{MbMmYh!s&~sIe1nOoIi0ude&fe~_$G5i z)1b^}I^Q6WG3LVx%?MBJxyUpKvC1%7Z;Z6<0LMA4)CFN^-YsK!Yx}D^8EMOWWj| z@re=d;OCLgX%h#Mj@=NJbqerN3bSN$brWPD^R7%EKRVOG?b| zgRg&gAI4Gf5K78Ti19N2mpsGmFL?&!-{cvo_W%Fo8ESu*XDs}XXW-++5Gm%Ccj{$X zxlOJYzd)WroAh^i#w`n}c4kyitfmaWSLZ&(!1O;Fw)4Myb&ilQW>)mSomMucmldgh zlQ%@Z{Xy!2owju07xkp(Ydseh+lf7S!$(IKqnm$*3(F~%!hZ0KSttN)szU^0!;@dn zj9;O>={Ij1z&f8;H`j6QCL&k4fig{_?qlzo{?>_Er;q5;w=S{_#e_Yyv&?k?J4@e6 z#cAMLb0wE?vpl~=O>X51N74qiaQ^A>E5-b1{zTeGa(L zGZSLr+8?PNB`t|bM>y5*y!LC~Y$@4)$tnrNz46>u^JyeKzgFue%~J?kQr-fa63}?P zc@;l5;vbLme6XBUaXV$6Z0fUo2Ab(p@f99^hXPK|#qCy4tUI_D%Zg8Dzxuw7 zc>|Ig*xoBwq4@a`n1|EUCyAKq7Hpa#JuQw$E$#l5_1Z&+Ggn5gudYMz-NC8nC*03v ze7J=!qXNw4z^7T#Wl!3C+ zGs;%56wY|67CNBjxZ|MOD;B2o$&TJ`*AJS_XWw`#k?2q>zM_QA4X{HRBT332nlj=0 zzJRel#fH}GBjdAA4WHeLgiXoR1gl`gkXC@j1MAbLu+W`30bf`j_hlRKpQM8uvdm#- zmxoxshbz^I?M20Oj(Z)LE84D`OJDwpZ2pEf$9_oxIOnVmYYmGdjjM{ zL*xaADUF6|_0H5u_eu~Le2DNTFheJo(%thFze)K*t?o(B_icov^ez^5L8+4I>Pk^) zsh0_;gizeCn(2yWMZRLtB)%5G;kl2t6$>R&!JgwxMqS28udq2Mwb8xkxfh^PiXO&? z#p$GSgC4~`c7J1T%l!nD0}oSI@;{6S6XzxzCrQs`a62b>8{)F-x~R5m0|!$Jk5Q#iV|mQ2cH zfFp09I+|fS3$L#7b@4@gj#<*-*e$$x!^+a33(g8WKCCTvgxuDxUjeOgL8$AO`Q_dY z-k^d9oHmc{Lug~5tE&Jr_5LPZBAF{B%OO3j;|3`xqS1YolewxDL;m<%ugCy`?n2gB z2Jl+2vp^n!S>rf19p%|&e0SVXH#kCXY`3z}OFFTx?>mh2tG=ITz#>Q?^(EPCG?kv- zOmAXaeR@#DU11pisDz*kfrStBWt?l57q_@`1sYQZ4{tvXm^Q^e?4jkm(?GZ~p2aq~ zMeZjz#=s|cm)c>KB+vm zdWmofJk#X=mOV`p?4Ev;EJwKnyv%p^3(PfV!7*u8xGy`RlnWw68IB3;LT8D8fCbd# zNckZW)U|8RS1UFbs~HDA-6b)yg>P7-CnK&vFmjXBxVA0EKiCCUqsG-H4b1?l3$Pa8_%Z#EPMm)XDDP%>}SK)TxYmTLi8 zuEHN4Kwy9e5NqmI0~X)`R1Ya<<4Xz6_|92nC%1pdRV@&g6e=!#1ZUn z#+|x8Hnt#J%ZZ%?*i%caVM6f&FJZrZz}2E!fvHpnQ5BurG2CF3{RWK}E5xn`tJ8!* z?V^xVOOuC{?x%>}}S9eJ{bh zISDyfUdpJ^M4BNWPM?1GNy^usg8lO7?UMnH#+YlY}oc1eh=Vxn|NmsOydF9TZ5;ZQQ(u_{KZUsk0T~Z2E~Y`uGoTT z(-&DvJ^2AP_UyqXDxQcGvq7(Yj_01wr3QWZ&Q~!Fx2p=*lr)U2->80O1A{rpl8KXn zei1XQz*^+}WL)j2Y;_5F{*?#%1ONLQ7HO!Dcks-J6g%;%@*KQmsJE4hY+I>v#JLxnCL$~iadNRf4}A7r z=oj!wV^m^$jS{ALenhNA6W=mU(Ym{lMC z2=B!BpT`EGpg6NO_-~jDMbN8-Pjv{0@E!+~((2^oUtzp`^%jvaZy(yWDL>EGfh7bf zBE5&e7gnW4FzsX2^c=1rnFe1-8(R9}lcl%)Vea@J_UlF6^Y3%ze#strPZ=CN;y@7g zH1-)$=aLK+D*?Oa%c63IE{rAx-pDO&|5usEMrT$KZ}JMraC%i^C}jZJgkf73ISr3d zvMH6IPDe$bxu&a4Oxv2q{R+g#o5VTdb9WAtR}W<0>K6i4w(j*qW)dC?!iP0KT7lkt zun!8Um$_XfYDg}fk*(rw5%)i0okn>Gn1yF&Sr@Q1K1_%W4u26+5=Tl3GuRvAt7t^o z%x_2iXpj_ZxyU0vQ1ivBlwcD`#h^?+6TX-<5TxV@6G4(S_5(X6wh~& zjYsjToL7t~1(Izd*1{>2xatKJ#1W&HcDF1G=NQN?7AYat8GBT)-0wLh5M4!;uS z(49h$(c|x>MQ0-wZ8F?d+t&*b;M$fhmhXTS5F)cB_I>7C=Po7KZOpJ{KptfZAL2&p;*gjC&IhOj#`yZsEQLUH}j9rqm+FTg_|5K`sWJzFc&q%GL6 z9{w|=s^4KU457kJBpRH{5fD;kRrn*Ms{Y4h&A&pbNPmP>3H%7Dny&kA6JMEXkz`tI z)c5X>2G^7Cwg*lehX&JATKf z1K$)pRS3Ys=!pGp&w~xdVR6?U`1zYU!5k7^NN!fCJ{%^a=1Jxo>cr0jXj(2 zUw1h#Tn+LCMk>(8mRu|3ATr-IE(WWajDQ--rmk{F1m-S=hs z&R-Tv_Ku~%M3)Sbul$qSmc1miK=z^X5|ecHLtJGFsvQ^z4vbOychD_YPmKuXdgTw& z*cT&kp8}W!W9{C}XqiZ8=xCFDP z=!}6gqq^+*%`NVFm|Px4$mDnV@46Ti$*xQ4C^-%$NOU5Jp&jMCpgb}ay40^eLm14c zpT9A%C+>g`zdx8hgEr0Y-esAg)OI0!Dc*G99 z9;e1>^}3*;?)nfm?rTQUANKG?FS~zkMPq)^QT+%1{ui|mEDXOABY<#4>i>Fi-Kkx< zs=c<3S@FIXlVRM;jmXWRNZsjCR8q_}q@kNXo{(%ihS6l?EO^k0+}TUn=!pDCn|Rpg zt?9m@`o>i=G3^!EiO+CtZ;9+X$fF#0&1YJf%NoRby&^GjXjDlwD03>~v4Jv-&h{Al zP${%Ib1uW46@DHAgMvz!vxTlU#d9C054>4Ex9hc*7^J}p>9LE%H&7*+5a3cAFRtP-JM z%=IQNenq1}y~}O5(f%0$P8KVe;{&+_t?Dq|Ok0SYjE4DC2r(_pCjn3tc`m2Cq`ibBuODe|5%S69d$EDxYy4=& zL9MSk(3qF7PpS0RK9WQAbau!$`6lJkdz$FFEE)^GN`jgcIDmw%i?Kwh$K>qis!Eyl zL3n}*7qe1nIqA6WjWaB|T*`uvnq_|4y+f4g8wLLTAT$5puJ&J?r*UEcYQs`ql9##c zFXt(4{!eP-@6OXjNy)#Qr<~#R?A75l+H(Y#?3^e;!~j)R!Jrk{4^>wE2y$T}#J`-U z#1)n9)ouNde_icZy4Q{;u_uWD_s>ml!ttDS`aCye*u zM;I&4k1*EUzrt8k|DrZTE(1)>{mw$J*Zv z9A$RIhxzqkU?hjP^&nZP1R|Odf@XMb9InB2O;648g<~i1*p@jnj|&-lez_a*54SX={vV&VfuO{uM+Br4^n0n!o4t5h0l{y>^4uKy*yvJi08-g`I1Dmq0&rw zQ`HhzXZAv1Em}SGX4`FZUU-LVFdJJ2tIzwB9ksdL=8y*08(!_5W|;I(@6p&zDj)|* z7$0l!F?(8KeXD0Ky?7^@jofMr^uYCJiS>)_#ie_A^|L;HmTxQ!kSL17qWQ2=fY(mm zwqWdDXWd$&xATX+e-W$kTlf2`L*+lmxJyQ=Ej?}j)1k6_ko-Rm6_@+JJnT&%z#snT z+anSQVi3BfwPSZDs}O~Ly#^bDTMI+)4{rGm{b*xXzR2GtE-2G}x!k?#dZpmJkq zHKYyJsh&khMb8Q*MwcJuQm5~S<`0q1V+;LS^Z_O5rMJ(`;T1e>=KhsBFwSG-jUPCs zZlrMm|5C&7#?bs*`YUI)f+6@cw{9e~_!Bm^#l{>y>LvMFc!f&u>_}_^q?lCzaB>gSVkeT5=dq4j|s` z`(YJYVZ6ym7T0&C*HIbqb@dOT&gc42#R?KZcn@vF+sxjK%XEClUN?f*n4_|E378~N zSumKZVB{V$LNuCA57(osj+;T+UMrqAkxg08jhmtwU7LOGiTAeG+R0dPUe1PnxA0I94ySYub9LET% z3St6$xrXw{uCTbLR>xppJA4E5j`A$XKg91y?AfM{ETl;Fl6ez8tbT~xq&yhGHdmS| zM=1D1vTbfbJ>G}rP`CuBN#zupJR}TZv563Ftnu#)?l}eA zj#6lyFzc`CuWZG}{D<5QJ!6MOV2d*&_2D&R%Z~Z4TI;b=8!YYoQ%_J~+2-+06Gtwh zdEqH@{m|SbGlIAyB4=A6aT2Z;YuN6KVB&Ny)dXR`!Z6zBxfFp^tG=@z;kiwIB&ar2 zs;1eY#I;nf)1?*^XSG*v<-!8Iv@_fb6$ud9~BR?^v1rT>(3AtLMyYLCkQdU0u1$70Z1+owwW3Xbij z7lo~6$ql<+W0zO6Xc#or0|Qngk7RDzZc+khR1Ux@5GY*<5Tkw+Cn687GN!bP#0-4h zr*$Tf=R=|_AyP5CC-q%62L^igkPwr5FNs#COt*MASFOh(q5|hj0VW+}T&{GjN+fT! z$+$s`xCGMy0ySm!&h6tzpmX;kM%bP2m|DoY!eer9rm7Jfuv{#Tl8Es8x}U^yu7=+b zS{{nf7*o)2f2ct(5Tq}rn-$5=>2k5ppuc=MLCGfiICxWL+Q~X)FhHKLyFl9 z9Is)35uC31hxh?r*=hHDe!3J0U9B{Pb~_@d+!zS{i^*bTG9-*-D!0SW;Dr!bg<=X= zITe)z`D-pF5s5KtWwW@iiH*}Ih?S_(R^qNGn2hqF<8j82v{=F3i@HDQoqgWXhS(n# zBYm%2gJdj_|F#8U_*Hlm5J&`iLGl4L4Dw~QS0z#rMM_{TBGI|7R>roen`jI)M5W7A z_1l)dcW-Mgs19(jN2o=K;mMS;JA1Um`6hHcxsT>CwK#cD;LVTc%^?ni)X*n_W;5a# zJzY2H#uQB@NXWoGuhvBef-IU##t!PHV0=bxnv#*P_=wP!9<()FFzEK?*glxHA3cCE$#YOs zqN`YV;l2U1v6Q~irpb+0;3_F-@rX_k=H%n;1elFPK*@mvNw!@ijC~4`6xjGPB7sC# z5Gc8d=x+xdKIh_RiD? zbrGx~JVAS?wiu}0hH|JeUo;3&VFWL-{3z>Yq5~%D7+kUx1uRO)EEMVYHDd2vIfY@u zUa<*YeQl&wEBq2P;4i!pUNp=5v|Ztw&5N@^n=e~IC-&cb zLXd~d-_I3vV}mBehw{9)+0iE=HRdLjXQCGJ!RZM+Z$xU?PyPa7tIr&_>eLaW510Z; zj{FK0RT>$nKW#5tH4sLu!))yoYY@o1!)){|+a)Gdhc5~$LA1a3N8LvrYqQR4UmwtL zhA}vgubU!jI;Z3OpT*E#VYa>!B2;oymf&w7fNFgM5jzGKGEfgK~R4yH8WE} z@x(Nky3CGCZ(AnUH#Do2S%pP64yIXi>k9<@O!$a_AkW6*) z6q2p6j3*1TJq_mG+g>|Egq!9cI!xsdhwVh(fru?l2pJPKYkhm~6tx=Bp@H;qEp{U{fdlBwmb<` zm|6wE=`6hMRGH7!1CmvPqpm9Vz-=X&uVLd%iuLP-U2yV|OirWKh-s>~1gbvzqLFC~ zZO2shaF(8}3hEAcK9Jmzsc32X)gNMGHdS9;3`D|1H(tRgw}Gj@!JXWPMS)M8XNW3; z`L12c$2^1Y<;atAT=JR#?%X^2jS2F8*!;@=rqcEKf=Bfc@n*8K4$Qb2a$PM)(pA}H zZbeyryO>Q-Y9*3Hl7?MM_q2EEDum*<~2pn6N!oM=EUSf3Tg&Ya7pXULShQqc0)JS&mbJ5kVv@Dw{d6uEZ2-}>l% zukxN#?K<1uevmCe+%wxW^JJlLbD(Y@cOy_V@0v+WVmnjPWZ=Bt&i$in>DZQjfMrBq zDn+l&rL-L9(P9&nL!`m(&5bFq8yhPFguo4s8W|hHLD{Nb=rEMxx*EYZ*ZS3wPQkdV zl8Y1$1nCc{w>QN0ZcDm@x;H)_sum(Bm7C1%`90Q7aI$;M5Q6n&DBT>HT%t?^j8bW8 zcxFTzw(P6Qdj(8ui_%oPw(VP_D0gn}gsPF_;z4}hQhoz|nA%VhT~fbJyHe)2HB74a z^AlBI0PWT@clJclW%Y>JVM4jFJjOAqLA?)veWiUrS6uzQ2Ort*q00v9t+ydm0ptl^ zTAR%$s-DaOkcH2M;^3c$FFY2?%^h;P=8h#n{5Nx^nO%7bz@|7$hu-T?T z{g=A-%@f9U2dSN>)a%64mTZj}r5L>eNr#9u7rS-|E6uUyh_sm?=0gMLxT8KA>okw< z72OQ?M<>0o=9~d3wqUh4OLxclfuHJ-n;TN9JPmbQ3bQ?&M(@BYFj-BT*0hQRuH*|j z6@>jY_%A^Az5<*rh?+*GZustVJKND$L_GyN)tU-X`?(Ta8J`@QtCs2a6^#}Ti}m#w zhA%mfGuWDQqOl8%O5$ox_1|kLFO9f{@6#rB9iQZ>A{n!!>aEJX?uE~~E%lltqb>Z2oo^bXZH5`R!}TF811pK$mb2${_E{w<%PKp4R;$95L9}pRmy1 zuqg-PkI<$RYmsEeb{f8Fwx!;u(rGG)*H4^aHc)G0P9s|ZZ_G92JVY^1_0IOv@R>7G>*0`n3)QTMBFJUzg6~G{%;UK8 zKKvP&g-5^aw}%VcOCu})H%#n=HUN!8wvJ|N%+hoLU&kR9W|-oY{TG0$v@!tib>^w( zortSdmih(s7B=Lfu3u-IetLHo8X(y-4v_5Wn#QW+%#}i65ZLS}4VcLSmc!!XF?y2j z60jTx%d-M~JBTnp3DrDmpX6BIa|4K^03l6c*A)24y-V~{Q&sq4oe-Rmfh+w7@NM)i{d2?JJ+M_uV@Q|IOZ z7Y*bskFs!8vWAa9_j^`ycM3pf8I=)jWR@@Gd@GcCP=Lm3g>b>6G2P7fw0yTQ_ zCUWg--D2_vn=&#nq>NWFe`2Oc;oULeq(S$zc6h}p+F_&5NzZO74vaQgEH3Icrca}! zV|xfPQAbo)WF_3ZE#m_9jzCyq22BTGZ2tMM`{U({vx*<-}54{DuO8Fph zUCX;Dkk|1|Y5-D(8@yzTY#Y~?coZ2Z^zRNvj`~bKL}5M1q;mPV1vQ0$31|AT69^Qs zi88Cw^DeyO&7TKk!kY>{xV~?f@RdgpHBgC_FN%@lx7J)o@yJLxOHenVaOF(t4s^n~ zU~MMJk*zp{5NLdkuJc~_up|(IP(Dq%<3|EL418pWZ||77q}i#=gKx2J49NI)m^LPQ zZ?I(bZov&NG-Ayr`o8O1UkfYj_lQV$o^bR=wrsD8TIcUKd<*s-5u@j@qcoxK|M2C$ zNWl8f#b8)p#Qrd{{DQ#%KB-7RxE9c$K^-hqUP&ta6Wzt5<%c>BqstL?;0v_@q@o|2kaiq)UyeDp5kW6Gd9tgEF?1 zYlB*J4ug$kuv@`1nskPK3VxIBqU5eh7h0l4mqmXP-rNQT_AWA0R9y_@gs(2!E-P)L zt^EpdARwaQ_s@X!Kb!<){XcRy|DjQd|3}0X&=?WW6Ikn+!EkfaiI`eA7~0W^Sm-(! z3K{BK8yM34YgFrR{?fPq9Xw!#7$&YG35%jq4Zl_SU-wkRU=Pm4X^GLi0Ags=b=x{e z%RX%e3-ApW$F#oBxQbLmL&9r-ETgKllph<_ifYv?G4mYidJ)Cu~%aftzwNS3$- z5*!=re=$ss*RcqeJiAT<1`ggO_6WH~4itM@nUP6Hoj*Fb&Nr$PNr|<$C@WCQStKaO z9Oe`CZFs7$+zNgC2HV?Z)BcBJ@gjtm`Pb^A87KKe-Y*EqW~5uA3c(NImMJK3i)njy z0^*czGQQRmCxBwK4<{7#7)+`A_@q}zlNSR%R{Yme8ja}34c78nz*3KQa6%On1A-f%kQgw)>JFa-sW)m2r=f~{JP?{>*}V4tbBd_)PjqrQv2 zqPTe2ljG*tvxGjMq8+>oyP&hEfK33gwIr!d#y0+N!r@d7E#e=Ng*|yi%PCNP7IBTG zdhHtjlyCmdtervGm_N-mZrZK&R@S%|VrkLWL|a=>(c+A%&vzvnSPH{R+C$&~jb7 z{dG9}tk$*I2c9Qj*rwh;#1XLkhjV%?FCttR8Gnf*(2SO}f*^$Z@RxO#hz?{orT9S4 z?b$M8U0J)tgGgGBMjsCDMqsqIa+jZMCI1swmcd4iVcQum24`^88aiI5C@h=9G?qpq z!V2BeTW&vmhgDLj+Yj42R1UNhg*zuYbcWhB)TJJ zRLUxe_^4h&QiMmB`w3xWEOB|zcgaT) z{;OCr5U|q!I#ps@1=d1+)|GcxiL9iiO>yXFL|;{=I%3;~N;_M9yGieGu=B8YjKrDh;2rQc^qW#%~$W04>$=vW<$ z)M0Z!jIe>n-Pl-C7Qn26Lx>~12kxln^lyA4*U#4)MBzvW{8?|ALr>DedJwgqS1A3@ zkTH1VxoWD*d5hX$9`X5~xyY4SXRzUuL&mg0Ycse#*L#$$hfYO{9#@eLJS@K73^Lq( zUxXXF2H~rP0WH2immE{(U#)f9c>slM;<6&hPZbGn^SINn4B#-o0T-BZP5w5Rk^nhl z3ZLNH$Op19Ql8Fn(%oB+EFa#LUiaM|dl%c=mt?K=?F~Q1We!r+y5(nl$2=x6(rcuJ z4^aA`pL?tO&Y0W6HVohw9y_2s^PUh&RRD$V2IYH~^{}ftUT5fs=LMUGZ9CG!`uZTR1dX+(9R`w+iuk z^+vsRpZp*?2Vtiwu&HthXK>%%gjIL7=h6<~5hNmu=d*sPi&gWb6&&{CGszE71(C?% zor;n$fg8@-G(pV}Io#uQ0B#8~@WL=ud*Jx&Ck^t9(}eC>J#Nwx*+x+EEut^X&h^R4 zbl?2#)9QuEx5nU1VZ>aSoK-=@oS^YSV8f{F(VTv#p@Aa`1$_Co@Fxe+Tb8SJ_cQeK z(eu$ygl4r$cnM!uWl!Z!$KgDEo^T$?WxYO`C>T6N#l!cWQnyv)CunUmY%6UmCCIbn zaKdaKdDnOx2oAD&iEeW=woqi{W8soODSj5b7e6wqWzefCo-P22IIUk`PUZKWF{7>< zmID!aD65kYnZeOH=jGRjkLCh9)|ZtLe8z#vQ8mc|J2B-yZjA^_B116@(=aD=nL z4OnF!>jO(kHZf!qvQ#cb!*rxz3Dn_; z?~cJSPU)OaV}EB8{9csrHVena?Di^ZiZh%A(V?{9I)8~2G`8I-`&3WiHJh=36}3fR zUHWP2_kpM{NdEN?axI$Q0)2R?CXt@t#&okyv$ zNR*WHQH9beM}ur$=E?abq~3kgYg~oxJ(JJqd}B${!dhj|20BH2_qY%rVyU+AQ6B;ZgL&{ml;SC$-KED9h3f_MIFTs zLYrFyg0mwmjC`G9m&(OX4U7n}vz=&BT-=0LDHM3UpB3#13w43dz~km|894$yI1Yv9 z66ozlH~%lUwGwdwycYEX^skeKVIz8SKrPA6=BHFS#cqJLN#$kax>2kStladjJ6>vp z{o{b+MZj=V>)9}7;xyMrK^RxY#v{;^c@1BvFdRek>*KBCft*%R_s-R%}uVd4o$WG;yqY z9Xz$$s6|quD>%t4&;p=!_9`4*SV+ZUMpV;_p<5s8;ZMh`wF5qKFWAs5(i!Pjk(rqq z9NRX<{lgTTRFOy(8rTS<6@@K=7(bYtI1jHJo6gk4rJf>^EkVT!j)l)W98C=k`YglG zk0U&z#KhaiV%R7)V*Zc_f*XzKafwTikl~~ynOW}I!tE}dA&s*ZEr*f#0(fb zvQ!!IwH~7hbz3c@aB1Smtztck5o45?W?ksY+F>(EJhEz6Dci|YlbqQC-@*dhD{*C) zZ5#@X$G2=*_63(wJ(OR*qs%|%gp+bVI(5?)9yC3K@eTcV;w&P^xtyru&%t}I5{sN7 z!>;T5G6c2B13df-VIEA0rJjYSY)kpoCW7+JcqmUSIpnDWF`3nhavCE|j5?ti3#PsW z9o@4D7W{08WkFHao}u&V{>nfrJ|SwI{0MWyP%1IWWrBQ<8B)XvN6ZU;^k7q;T?kbE z`^zL&JLa)w)0z9$pY_n7#u11bL&@R|k_<1SFSN;AoDj6G)!%%HK>kLjd<&~{bJTQTV?A~hnpQVVTLE}I;td3q(m zt3m8!-S|pj7AG`MQD-P^cO2h21wb?>LTikmmmF0uv5b`af@Sw}3uo_L>Im?UO(W>3`%pT@xaJLtJl2kjTI+rCyecMeg4oIX>VX}v-$<9 zC6LV$55DesYgC$2%Vpg&10(|UqP zZhp1K5>Gl0)j5qal@X1KX0Ohq69g6A>@=+qm^EtYxQXv~y_2nKLzF!w)VSkCK4=AIJ8;&EWM$8o%c zD?N}9hIq-l>_d0%O$G`yOcWoO0}^I55cC-1MK8!&?QOXM;pC_G)UNK>`G=YgYnL`R z;fp6Z_vh(EwZHWThQELlR@7u%l013wh~*ZuTV(>ajE6`Fg~bHJ)l5AP!+W!xlIVqj zc1>GHg|sazL8Jm32Q=n8VUr(+))6zUAqv-`d9yLa3UZ|Tw-Lis3Z}B;rjo*$zwXg~ zi=3^Is&t0wmg^LMMF+w#8W8<1*iJpfHfHdhQ?aR;qnB#=mSmnV%T55B9?bcT)IVpf z*~kbmn`zDrHO6>w|M5&A{o|=ZXK_HozW1H#y6eS_!LVVsKM4bi0aU97aUe?|7e#7d zS7f(N?k`)|$%aUOgskoY!2?t`q#IvozX;!`7yQPO?ZJO6_IUoKZWzaZOAkv>a0p_> z2zf7uM?jd6G>GD2(n(ZUQLm*9@MNCS@sYJCI!@0SUYyA`h=mgzj(<)FxZ(-F{TmAKMo9D_iN6QzQT5flop!5EZ76 zitl~%N2`1g^h8f86gBMZ&as#2J)MZq!H6BHt997Q&El@~({ia;of)ifJz)LHE@bgp zj6KY01|?EbjmO;9kD3K_by(aR#BeQL9&ib*p4#;IgUM2gSpdQO8{27G6P9`)n*3Ey z14~*0lN;@14&89N%Qry|0Bm0PAr9sB;F;#fq3ZHyYOy4Q_|711!S4yd@fb~-luli7 zwTSyy;R+v|{U59b%~sjI3jXwB+i@OG>hTJ0mdTU5FjlEEgh)wEHKf@B5A0b~9+SnP zHal4BmK+M{Sg=OfJo-aWCR989ljrg;Hgo@53f_P1Qsx0<^6Wgw!`4!YUmzuE%O?MW z*r|6Qy7>q$aZD;XE26{~?W*MgNPZyE8TeIghXI#G9MJ~(j!S-zN~rh?m)uOfwK{e1 zS5yL^Rc;3rZDJn%f$TrxQI-BK9<}MOcvJ)TmP3MfT=L@5JNAYI`@KoI2qmWW?*enV zzc6{h@0dK~cY!(VyTJUkpEZMJOpGgz?$J$X;osv?LDhdBkNWbrcvP6He@1}f`9I#W z|JQQdxc)0V*Fa6KZiftIWgn+YjA!ljS{~~qcqfr?WWmwQp*U5__DUSXQgo=QDyFyOu`q$BPqL)2-(FY zX2~`W!a(<56db#O4P}TNJ(svo*~p&r<=$RN-yr1uAF2NFlfwOfeVOxLTRG?X zuSU_t5$6H2_aIqyQRo~|X+iZkj&$Oz*XkvShd942jtUXoAywHS>idMaO%5MNFRRyt z!s+X&qTO}%6@(6`FeE2L(hpyA%{AUxqZn4~;h}y7!R<6{-|cu4?=Zv5^9)PvNfuBC zk@-#gz_`_dtoZ>6+I{}Nx1$OlD?Q1^tK$+>G#DM8Q8_)G>?^1j>Jn^pqBS;-<-bl8 zv{@41vZ8JT_KKIYQCGIA0x5{devz}OYQ^K%jS_8UYo-`Nbi!q^*1=4xA#Ie@R(v% zyG`ue4mkja)lniq?qXWRKWiEZ8PMrnsaFh32jn`&@zF{UWBP8zIsL-`lc6lVp4+SD z8AMnofP1!GdzXeVq8%2OqwxU92fv=`W%}YT z_?f<9<=Tqy;uyUBy{l|4uDrxQF>PE)F$Niscl)S9mEQ(~DY%JnD& zA_J7MftA%U5v50z^-<75OVW@GR7V&lz#%Jw2@#!chEm746oS?be;7n+a0<=g3rzWh zDvc|`K*>3WWTo&ZS1Dq9URn%eWp;?K8`MN^C4!Sz8KHqKqDOn6hrFC$VkAAOsPi=X zMKZ`OByWm*msq60!-aQrz_R3{*7<~DKsMOI^4eF2dANG%VaDynq%*@lw66lgI0yoA zU&n+7sTWSil^61dCFFjA%AEtB-WdLfDetHve!y#b_4O{}x_)GZw3}5v{`D-oAT~v1 z$FPup=U6i#A0aUDm$zDiZqOi2Inc|c?#V@_rT_+pc5~3j8Mm8njHmu~t4Y67RELNw zTjd4s*?mX{GI%gTSPDc-0@X3rf4q~<*b4pX7 zicqJsZSWSGkB+p6A|SE<#6d%7U}4AEF{+N2LJ-ZJNbqrtog*2x{6k&hZBe*IHUYsH zIS0M2u!S4v`e>S!WqR$@9>;cmkp)~qt;K*;`GkCUXt!xnIBMqmNG^_KmY(QXiyQ)M zdrl7SHmK1StKIZos{@A6Q7$9hMcET$hU&1&KuDX*L0aR@!5HHyoJTz0vhR3u1f?Mq zQbE@mq}od~^nqKxLvkCwLw{Vmc9fjZrT`mqSFjJ$L3^Vp7uk}5n-$S8eL4iNp%R>g zC{b1@X-}4D??((2d}F~6%so)4jY1P8Njv`;^C!}uZ_*eJ1em4xV zeC&jrfb~Sq*}X>-l-tD=#6Jc+w1q?DM4>7hAs8FkVNumkaw8%^;S+JzsHDR{e~CiH zdp{wDVdf@-F()Q>Jf~n`sYfqKJTZGM8Xb2imhe}7A<}vquaYb{$=46ad5>SV7tt6v z?rRui;I!LRq}Wz5S*0@$ks1o{HD?*hZgNjh-=#vlw5J`KAKMYgqN2Msq(xkk>{OsV z%*ma~2l9nx{Ur85t`f_hZNLJcQ&if$=e^L+vK={<7QmcIko>lIvdUz$S(x64oR9GdO{Y?FlG;8Z!O5ryM80B+_&M(lb(fRY8c!^U@(b5>Wmzu|dq|(q z74HbD)AMO^__dGo5N#laA9YB(v0N?mLRl5s`6Xo2y(tQ_i&6)02uqWw%0tqfX|r?n z__#FrQ~lKP@@`UvI835HG6WCM1*vxBgBY@vk0#5?%ST+X8eQ>}i}@lPV-LofPs5#R z)J_QW6K+Qn&wJ5r@9)LUGwv50kHYbOknXX4g47_~lWF)|h;LsjuBB~y`K?PDI;E7; z$>m`d)5w$1V$Vi+Y*dhQQuTRS*~9{^rhGr^w{~ccF3#*iiOf?RN|Qm78UV z88q6A@4k3-mh{ZZ)5M}6BUs8v|M2CtzOPxZ^AA&TRhRFEc5lBN#v=Um@l&^*oFX=#_sSPXFF>=M1U!p*PxPp;zsIv5n#p%VA8 zE@Lpgf{6F=@I|pAbq@?5wp-!ZIK7G%F!r%JAWRdYyfxTQJ!|>ZF{iaz2!N~rJIELNxbQH{YYh#~BAs3c)ilvp-5hgVD)<-_t5Rb*`@#4=|?cBv)B*pX*OFngF@ z37MZ-3omN6aP=(i81I19@82bX6-*(3Tf9ks$LM%=zoUVqPw}OkZQDn>9wPD@HgAXk zt9A)4?AflCSJqV#dkpQoEmRg_;L~k2 zqNkd;W8*fB1ZYAty3>tTp|4fo>9H!%6I^zD^6~CdbXGLvnC;!C15AM`WH682f>iJl z7fjmNbwi9nr$$axIis#f{N7dTKFnq?#W0}>m&f zEgm62XjNXXElB&))(FT7#q$cZH{tPLkXo0W-+lJkd98{v`XfcBmfS z{_JZzmpaV(1p{Q#PB-t25cqeUdXNIpU;4QR5xp`!F2PimR0UBL36|3>< zw}H;tL4(Z0fA)mQD%%t9&Mx^|(i&eh&T+_u1fJzw+y#qH9%TM>NkF_+ESlJI5z+OE#_z>2L0Z@ZMzp#4&Y=xL!zX8&bot zGy)TryG1x4i~}X-3-lm@Pncgz3%)ELKxSY#5s@a@?8lZ@D!$Zdzy301PA#ts`6CQW zpEbdN8*cfM^hC?jF}hd2w4vtZ`Vx0Cb425qU>F6dTl)fCe!E^M#ie{-)T{~m=HKzu z!Psm5ra#J)I;AYK+c-t^<5lajyS#m4&VuvF5ds3@?aijQ&iNmv)qmIE{OkfWakF-G z5Pz5ZeG=zqXJzML14$91WioXd3d<^ z*toe&On|)X++4iuyqtVMUXFJ`lBvmi{2ST-KE!}U#=#uusmDt8{*Qm1SU8gXbrV$o zvu@zvWMxrxbaW$QILO!y{=S~zT=3FP(IEVN zd7VWWNfvn$9!`PqwI$hFyfiN_Kd?Pt+M*bjpw)ue`mEjJ%;)U6#at)WA|-?A$g0Y$ zI7MNGGg*$gb@cYdU{pBwxD$M@Gu}Gkx4z#o@ZtKQb|3GVz%1suJEwvnbBLxc0VQz^ z$dpcoUDS<|db=~jE(SMDYhGBv7-SwAog!1$Wk)_T>{9o|S5-4{sIDnGUejXOZArCw z_^2+rg0kKmHJ!=NoRWYsHvtux;VY^6jc!_tJ6XfrYe{=x_!9wHZZa+~JUUeaSZXO> zKkaT!tvAA5r@S{xaFX5Mu|CNP{+mukl%Ff?A*Y{$?(LXpmpn+h<`IiYMH zgqqOQDQtdbi28#|5HL1kWV`Q}#YpJ~lsKd;mt~+dPhw;V0_y0}KjC|1fteNOsmm+_mUyUwzu5c4wW*)si=Ro$>lY}Gh4V8F& zoXMn3tF8E}?S+jE<@gY+8z#FjK5_lpn&ZfP+ZSc#WG)no)Q>4M;7Jp}*K{7@)#n6C z6AW_o+34V`dVB5m1QHo4B$QmT-+M1~?F_f?Ux39r-UwfB34~fg&^@*b@GqPZJiJ)) zD?@-eQZvCuGrl|fX;sIW!ZBsPo&DLEODVfIs-C)ygT@}jYx8T-wI=$2 zRqRp7cE*jr1d~ReTc3jYqs&qcs+62+yK?6+e%naaH=Z%1Y_&lUr$)NkZkbbTE1bq~ z+#Pii?hlZ7N9_q|c{QG3jL&jtp)FLPGFwF)`{5*-$7}*5hK%ax@8y!@3Vf3H(ym8c zDi4wNOf}hb>x(g&sq{v--1OODQh^(~S4%ig!v%}21R(01V(DBT;ixsFn)V$13xr(S zgyQXPf<9N>c5vh$Gf&B~^0EApdf}ps7SVMYhnY?L*jPm~2$I7iV zyJ+(>%X8g7^_DMSs(+O{RYW?-tY6f%8ILQaRi-txMW1f5rgGh~=k}res(Is8*Ytc* z4|+i}TR-kN4xT?VhZlTBS`RyX+-zh2gCqF|{&Pg376>Cn4gFrj;CYIu6KUx~UM%5a zY)Q5XypSI11P7_>CX3*h)mT~MK?%yuGv*5}{Ca!;Ox(CNV9S_9rB0|KmZ>}~wM0w% zO&jd4N#OET_C}GpM{OBX@%Xw~c*A+i7#J;*B`r<91w^=2)s&MD+ zgSHj6OwvTx$6_s++SNCr+sLpJho~F_Guf#?oo@m)HxV>!Qgg*5+u8Y}&ACBHi`<)A zod8#MZ?OjRLxr|Md!+DWgXvZTtxfcNVFGDagcq{#P&-8+Mf;W?2qKQI&>* zADKCuBXM2@=>=+6Lg250WO6r84ox%Ck;qK8qi@v9__DE^BEZ=^FJA3dEp)CMziYK#*2n#%HK}o?bHlS%aCPqUD;Ii^J<85#gOk&%}-WgPUxnEHc|@|dnMGS zOY%J2c2Iy~!3PG)Z>zT-Jj$WZ&Eq&?G;ZHFr5V1?&B$pdjWbsMZl0v;h}NzKx73J4 zF2HqI+p+)L2Cw$VizH0mQ z0&5<4*W~8y^r-Ya9r?obj3GA_4#kpqqN7}%rI|4%?~K;Umt8bW4*0OGk|XO}i~tUW zN4{*=@bt1lC17)%Ynf@gNctaUj=JjuInbu4U-9&*@0~zm zohn6aMsz`$_cIqdkeSapa&6#Mk+gd6UYbU7`Q%1feM~x({ZDr&G)H z9dvTMlT0#5H{xK%(zJ584}!lnZT|KJbnP}e>#D2V${mDVO+rM?vc-G5cnR%H&1a|O z%-&Ew1Zo%SY}Vi#^6Im2@8h<0;#uqKQZiUEc=C^ITf&KP%`lyIz}<66srNb&;(ikX zeTd^bVQ->rj{uAaL;1wkX922XJ>sw90DUMj_ashtXH{+D2T-6*Z#Xc64ZI3H!jJAZ`mo?#+X1 zsZ~F#Dtcki)_NzxO%Z>PZd_yUV>)v2Tg$i51n|MnB@+Xw9}|rW9ans(EyZ;N0(Ei= zg9T-TCE(*9S1bcX--@c3OVAbqUr+dpq+`A__zh4m#Gi;WM`RBIColDBZVz;L&D7Ycxgxs*g}~Rf0@{gH;OHCFU$f7$u*i&mn0+F-x|z7RdAa~C Skk~o6*?9PnsHr8CB>x`-_P*Bu literal 0 HcmV?d00001 diff --git a/java/BTSIDAC.java b/java/BTSIDAC.java new file mode 100644 index 0000000..33f7fbf --- /dev/null +++ b/java/BTSIDAC.java @@ -0,0 +1,1055 @@ +package com.btsi.contract; + +import org.fisco.bcos.sdk.v3.client.Client; +import org.fisco.bcos.sdk.v3.codec.datatypes.*; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple4; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple5; +import org.fisco.bcos.sdk.v3.contract.Contract; +import org.fisco.bcos.sdk.v3.crypto.CryptoSuite; +import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair; +import org.fisco.bcos.sdk.v3.model.CryptoType; +import org.fisco.bcos.sdk.v3.model.TransactionReceipt; +import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback; +import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@SuppressWarnings("unchecked") +public class BTSIDAC extends Contract { + public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b50612a0e806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063715018a6116100c3578063c3bc2e891161007c578063c3bc2e89146102e1578063cb1592e5146102f4578063dda33aac14610318578063de8f0c451461032b578063e985e9c51461033e578063f2fde38b1461038a57600080fd5b8063715018a6146102875780638129fc1c1461028f5780638da5cb5b14610297578063a22cb465146102a8578063a382a4d9146102bb578063b224b4e9146102ce57600080fd5b80632be92b25116101155780632be92b25146101e557806336b4e1cc14610208578063393e05211461021b57806342966c681461023e578063522dee7b1461025157806370a082311461027457600080fd5b8063081812fc14610152578063095ea7b3146101985780631108da2c146101ad57806318160ddd146101c05780631af716ba146101d2575b600080fd5b61017b610160366004612221565b6000908152606c60205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6101ab6101a6366004612256565b61039d565b005b6101ab6101bb36600461230e565b610500565b6066545b60405190815260200161018f565b6101ab6101e036600461239f565b610626565b6101f86101f3366004612221565b6106b0565b60405161018f949392919061245b565b6101ab610216366004612492565b610776565b61022e610229366004612256565b610800565b60405161018f94939291906124d4565b6101ab61024c366004612221565b61098c565b6101c461025f366004612221565b60009081526069602052604090206005015490565b6101c46102823660046124f9565b610a65565b6101ab610a85565b6101ab610af9565b6033546001600160a01b031661017b565b6101ab6102b636600461251b565b610b7e565b6101ab6102c9366004612557565b610c13565b6101ab6102dc3660046125a2565b610dde565b6101ab6102ef366004612221565b610f00565b610307610302366004612221565b610fe3565b60405161018f95949392919061260e565b6101ab610326366004612221565b611153565b6101ab610339366004612492565b611234565b61037a61034c36600461265b565b6001600160a01b039182166000908152606d6020908152604080832093909416825291909152205460ff1690565b604051901515815260200161018f565b6101ab6103983660046124f9565b6112b9565b6000818152606a60205260409020600101546001600160a01b0316331461040b5760405162461bcd60e51b815260206004820152601b60248201527f4441433a6f6e6c7920444143206f776e65722063616e2063616c6c000000000060448201526064015b60405180910390fd5b6000818152606a60205260409020600101546001600160a01b03838116911614156104485760405162461bcd60e51b81526004016104029061268e565b6000818152606a6020526040902060030154156104a75760405162461bcd60e51b815260206004820152601f60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e20617070726f7665006044820152606401610402565b6000818152606c602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a45050565b8261051d5760405162461bcd60e51b8152600401610402906126d3565b61057286868686600081811061053557610535612700565b6020029190910135905060005b6040519080825280601f01601f19166020018201604052801561056c576020820181803683370190505b506113a4565b6105db5760405162461bcd60e51b815260206004820152603460248201527f4441433a63616e74206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610402565b60005b8381101561061d5761060b87878787858181106105fd576105fd612700565b905060200201358686611454565b806106158161272c565b9150506105de565b50505050505050565b6106338585856000610542565b61069c5760405162461bcd60e51b815260206004820152603460248201527f4441433a2063616e206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610402565b6106a98585858585611454565b5050505050565b6000818152606a60205260409020600181015460028201546003830154600490930180546001600160a01b03909316939192606091906106ef90612747565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90612747565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b505050505090509193509193565b6033546001600160a01b031633146107a05760405162461bcd60e51b815260040161040290612782565b806107bd5760405162461bcd60e51b8152600401610402906126d3565b60005b818110156107fb576107e98383838181106107dd576107dd612700565b90506020020135611659565b806107f38161272c565b9150506107c0565b505050565b60008060006060600085116108575760405162461bcd60e51b815260206004820152601d60248201527f4441433a696e646578206d7573742067726561746572207468616e20300000006044820152606401610402565b6108836108656001876127b7565b6001600160a01b0388166000908152606b60205260409020906116bd565b9350600084116108d55760405162461bcd60e51b815260206004820152601860248201527f4441433a6e6f20444143206174207468697320696e64657800000000000000006044820152606401610402565b6000848152606a60205260409020600281015460038201546004909201805491955091935061090390612747565b80601f016020809104026020016040519081016040528092919081815260200182805461092f90612747565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905092959194509250565b61099581611743565b61099f3382611794565b6109bb5760405162461bcd60e51b8152600401610402906127ce565b6000818152606a602052604090206003015415610a1a5760405162461bcd60e51b815260206004820152601c60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e206275726e000000006044820152606401610402565b6000818152606a60209081526040808320600201548352606990915290206003015415610a595760405162461bcd60e51b81526004016104029061281b565b610a628161180e565b50565b6001600160a01b0381166000908152606b60205260408120545b92915050565b6033546001600160a01b03163314610aaf5760405162461bcd60e51b815260040161040290612782565b6033546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3603380546001600160a01b0319169055565b600054610100900460ff1680610b0e5750303b155b80610b1c575060005460ff16155b610b385760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff16158015610b5a576000805461ffff19166101011790555b610b6261192a565b610b6a61199b565b8015610a62576000805461ff001916905550565b336001600160a01b0383161415610ba75760405162461bcd60e51b81526004016104029061268e565b336000818152606d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c1c85611ad7565b6000858152606960205260409020600201546001600160a01b03163314610c855760405162461bcd60e51b815260206004820181905260248201527f4441433a6f6e6c792063617465676f7279206f776e65722063616e206d696e746044820152606401610402565b60008581526069602052604090206003015415610cf85760405162461bcd60e51b815260206004820152602b60248201527f4441433a6f6e6c792063617465676f727920737461747573206973206e6f726d60448201526a185b0818d85b881b5a5b9d60aa1b6064820152608401610402565b60008411610d575760405162461bcd60e51b815260206004820152602660248201527f4441433a6d696e7420616d6f756e74206d7573742067726561746572207468616044820152656e207a65726f60d01b6064820152608401610402565b6001600160a01b038316610dad5760405162461bcd60e51b815260206004820181905260248201527f4441433a63616e206e6f74206d696e7420746f207a65726f20616464726573736044820152606401610402565b60005b84811015610dd657610dc484878585611b32565b80610dce8161272c565b915050610db0565b505050505050565b610e306040518060200160405280600081525085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050611d209050565b15610e875760405162461bcd60e51b815260206004820152602160248201527f4441433a63617465676f72794e616d652063616e206e6f7420626520656d70746044820152607960f81b6064820152608401610402565b610efa84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f88018190048102820181019092528681529250869150859081908401838280828437600092019190915250611d8392505050565b50505050565b6033546001600160a01b03163314610f2a5760405162461bcd60e51b815260040161040290612782565b610f3381611ad7565b600160008281526069602052604090206003015414610fa25760405162461bcd60e51b815260206004820152602560248201527f4441433a6f6e6c7920667265657a652063617465676f72792063616e20756e666044820152647265657a6560d81b6064820152608401610402565b60008181526069602052604080822060030182905551829133917feb6b2da67215e2caf27a509101b43cb08be5a3b43751050470bb9afc84d70bee9190","a350565b600081815260696020526040812080546001909101805491926060929091829184919061100f90612747565b80601f016020809104026020016040519081016040528092919081815260200182805461103b90612747565b80156110885780601f1061105d57610100808354040283529160200191611088565b820191906000526020600020905b81548152906001019060200180831161106b57829003601f168201915b505050600089815260696020526040902060028101546003820154600490920180549599506001600160a01b039091169750909550926110ca92509050612747565b80601f01602080910402602001604051908101604052809291908181526020018280546110f690612747565b80156111435780601f1061111857610100808354040283529160200191611143565b820191906000526020600020905b81548152906001019060200180831161112657829003601f168201915b5050505050905091939590929450565b6033546001600160a01b0316331461117d5760405162461bcd60e51b815260040161040290612782565b61118681611ad7565b600081815260696020526040902060030154156111f15760405162461bcd60e51b815260206004820152602360248201527f4441433a6f6e6c79206e6f726d616c2063617465676f72792063616e20667265604482015262657a6560e81b6064820152608401610402565b600081815260696020526040808220600160039091015551829133917fa1915ae18772574067eca1dad2f4a140f527099158837098cd7f215540f9210c9190a350565b6033546001600160a01b0316331461125e5760405162461bcd60e51b815260040161040290612782565b8061127b5760405162461bcd60e51b8152600401610402906126d3565b60005b818110156107fb576112a783838381811061129b5761129b612700565b90506020020135611eb8565b806112b18161272c565b91505061127e565b6033546001600160a01b031633146112e35760405162461bcd60e51b815260040161040290612782565b6001600160a01b0381166113485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610402565b6033546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b60006001600160a01b0384163b6113bd5750600161144c565b60405163345eac7560e11b81526000906001600160a01b038616906368bd58ea906113f29089908990899089906004016128aa565b6020604051808303816000875af1158015611411573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143591906128dd565b6001600160e01b03191663345eac7560e11b149150505b949350505050565b61145e3384611794565b61147a5760405162461bcd60e51b8152600401610402906127ce565b6001600160a01b0384166114e15760405162461bcd60e51b815260206004820152602860248201527f4441433a63616e206e6f74207472616e7366657220746f20746865207a65726f604482015267206164647265737360c01b6064820152608401610402565b6000838152606a602052604081206002015490600082815260696020526040902060030154146115235760405162461bcd60e51b81526004016104029061281b565b6000848152606a6020526040902060030154156115825760405162461bcd60e51b815260206004820152601c60248201527f4441433a44414320737461747573206973206e6f74206e6f726d616c000000006044820152606401610402565b6000848152606c6020908152604080832080546001600160a01b03191690556001600160a01b0389168352606b90915290206115be9085611f1a565b506001600160a01b0385166000908152606b602052604090206115e1908561200d565b506000848152606a60205260409081902060010180546001600160a01b0319166001600160a01b0388811691821790925591518692918916907fcd6e659e4c2e75c3bfe47fecaccf39aeb368116a0ee52afb532e07f6cba6c0d1906116499088908890612930565b60405180910390a4505050505050565b61166281611743565b60016000828152606a60205260409020600301541415610a62576000818152606a602052604080822060030182905551829133917f4f62fd67e16073ab460b98757109cbc324979c3a733d58599c06d0dea0bf72959190a350565b8154600090821061171b5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610402565b82600001828154811061173057611730612700565b9060005260206000200154905092915050565b6000818152606a6020526040902054610a625760405162461bcd60e51b8152602060048201526013602482015272111050ce911050d251081b9bdd08195e1a5cdd606a1b6044820152606401610402565b6000818152606a60205260408120600101546001600160a01b039081169084168114806117e657506001600160a01b038082166000908152606d602090815260408083209388168352929052205460ff165b8061144c575050506000908152606c60205260409020546001600160a01b0390811691161490565b6000818152606a6020908152604080832060010154606c835281842080546001600160a01b03191690556001600160a01b0316808452606b90925282209091906118589084611f1a565b506001600160a01b0381166000908152606b6020526040902061187b908461200d565b506000838152606a602090815260408083206001810180546001600160a01b0319166001600160a01b03878116918217909255600260039093019290925582518481529384019490945286939092908616917fcd6e659e4c2e75c3bfe47fecaccf39aeb368116a0ee52afb532e07f6cba6c0d1910160405180910390a4604051839033907fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca590600090a3505050565b600054610100900460ff168061193f5750303b155b8061194d575060005460ff16155b6119695760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff1615801561198b576000805461ffff19166101011790555b61199361205c565b610b6a6120d0565b600054610100900460ff16806119b05750303b155b806119be575060005460ff16155b6119da5760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff161580156119fc576000805461ffff19166101011790555b60675415611a5d5760405162461bcd60e51b815260206004820152602860248201527f4441433a5f63757272656e7443617465676f72794944206e6f7420657175616c60448201526720746f207a65726f60c01b6064820152608401610402565b60685415611ab95760405162461bcd60e51b815260206004820152602360248201527f4441433a5f63757272656e744441434944206e6f7420657175616c20746f207a60448201526265726f60e81b6064820152608401610402565b600160678190556068558015610a62576000805461ff001916905550565b600081815260696020526040902054610a625760405162461bcd60e51b815260206004820152601b60248201527f4441433a63617465676f727920646f6573206e6f7420657869737400000000006044820152606401610402565b6068546040805160a0810182528281526001600160a01b03871660208201529081018590526000906060810182815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152606a602090815260409182902084518155848201516001820180546001600160a01b0319166001600160a01b0390921691909117905591840151600283015560608401516003830155608084015180519495508594929350611c0a9260048501929190910190612188565b50905050600160666000828254611c219190612944565b92505081905550600160686000828254611c3b9190612944565b90915550506000858152606960205260408120600501805460019290611c62908490612944565b90915550506001600160a01b0386166000908152606b60205260409020611c89908361200d565b508185336001600160a01b03167fad2943b15836caf43698401a62af4738985fb33dd979844d99d37f5293f037d3898888604051611cc99392919061295c565b60405180910390a481866001600160a01b031660006001600160a01b03167fcd6e659e4c2e75c3bfe47fecaccf39aeb368116a0ee52afb532e07f6cba6c0d160405161164990602080825260009082015260400190565b60008083604051602001611d34919061298a565b604051602081830303815290604052805190602001209050600083604051602001611d5f919061298a565b60408051601f19818403018152919052805160209091012091909114949350505050565b6067546040805160c081018252828152602080820186815233838501526000606084018190526080840187905260a0840181905285815260698352939093208251815592518051929384939092611de1926001850192910190612188565b5060408201516002820180546001600160a01b0319166001600160a01b039092169190911790556060820151600382015560808201518051611e2d916004840191602090910190612188565b5060a08201518160050155905050600160656000828254611e4e9190612944565b92505081905550600160676000828254611e689190612944565b90915550829050336001600160a01b03167fbbd0f597c37492a2f99254aa1196162b48f8d540b71a34ec8e8bac6cf947c01d8686604051611eaa92919061299d565b60405180910390a350505050565b611ec181611743565b6000818152606a6020526040902060030154610a62576000818152606a6020526040808220600160039091015551829133917f48ed2ee6a85ff2f69d20b4f95843ad08ebc40e6d1ad525065ec7e8390fb495c49190a350565b60008181526001830160205260408120548015612003576000611f3e6001836127b7565b8554909150600090611f52906001906127b7565b90506000866000018281548110611f6b57611f6b612700565b9060005260206000200154905080876000018481548110611f8e57611f8e612700565b600091825260209091200155611fa5836001612944565b60008281526001890160205260409020558654879080611fc757611fc76129c2565b600190038181906000526020600020016000905590558660","01016000878152602001908152602001600020600090556001945050505050610a7f565b6000915050610a7f565b600081815260018301602052604081205461205457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a7f565b506000610a7f565b600054610100900460ff16806120715750303b155b8061207f575060005460ff16155b61209b5760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff16158015610b6a576000805461ffff19166101011790558015610a62576000805461ff001916905550565b600054610100900460ff16806120e55750303b155b806120f3575060005460ff16155b61210f5760405162461bcd60e51b81526004016104029061285c565b600054610100900460ff16158015612131576000805461ffff19166101011790555b603380546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610a62576000805461ff001916905550565b82805461219490612747565b90600052602060002090601f0160209004810192826121b657600085556121fc565b82601f106121cf57805160ff19168380011785556121fc565b828001600101855582156121fc579182015b828111156121fc5782518255916020019190600101906121e1565b5061220892915061220c565b5090565b5b80821115612208576000815560010161220d565b60006020828403121561223357600080fd5b5035919050565b80356001600160a01b038116811461225157600080fd5b919050565b6000806040838503121561226957600080fd5b6122728361223a565b946020939093013593505050565b60008083601f84011261229257600080fd5b50813567ffffffffffffffff8111156122aa57600080fd5b6020830191508360208260051b85010111156122c557600080fd5b9250929050565b60008083601f8401126122de57600080fd5b50813567ffffffffffffffff8111156122f657600080fd5b6020830191508360208285010111156122c557600080fd5b6000806000806000806080878903121561232757600080fd5b6123308761223a565b955061233e6020880161223a565b9450604087013567ffffffffffffffff8082111561235b57600080fd5b6123678a838b01612280565b9096509450606089013591508082111561238057600080fd5b5061238d89828a016122cc565b979a9699509497509295939492505050565b6000806000806000608086880312156123b757600080fd5b6123c08661223a565b94506123ce6020870161223a565b935060408601359250606086013567ffffffffffffffff8111156123f157600080fd5b6123fd888289016122cc565b969995985093965092949392505050565b6000815180845260005b8181101561243457602081850181015186830182015201612418565b81811115612446576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b0385168152836020820152826040820152608060608201526000612488608083018461240e565b9695505050505050565b600080602083850312156124a557600080fd5b823567ffffffffffffffff8111156124bc57600080fd5b6124c885828601612280565b90969095509350505050565b848152836020820152826040820152608060608201526000612488608083018461240e565b60006020828403121561250b57600080fd5b6125148261223a565b9392505050565b6000806040838503121561252e57600080fd5b6125378361223a565b91506020830135801515811461254c57600080fd5b809150509250929050565b60008060008060006080868803121561256f57600080fd5b85359450602086013593506125866040870161223a565b9250606086013567ffffffffffffffff8111156123f157600080fd5b600080600080604085870312156125b857600080fd5b843567ffffffffffffffff808211156125d057600080fd5b6125dc888389016122cc565b909650945060208701359150808211156125f557600080fd5b50612602878288016122cc565b95989497509550505050565b85815260a06020820152600061262760a083018761240e565b6001600160a01b038616604084015260608301859052828103608084015261264f818561240e565b98975050505050505050565b6000806040838503121561266e57600080fd5b6126778361223a565b91506126856020840161223a565b90509250929050565b60208082526025908201527f4441433a63616e206e6f7420617070726f76616c20746f2063757272656e742060408201526437bbb732b960d91b606082015260800190565b6020808252601390820152724441433a44414349447320697320656d70747960681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561274057612740612716565b5060010190565b600181811c9082168061275b57607f821691505b6020821081141561277c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000828210156127c9576127c9612716565b500390565b6020808252602d908201527f4441433a63616c6c6572206973206e6f742074686520746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526021908201527f4441433a63617465676f727920737461747573206973206e6f74206e6f726d616040820152601b60fa1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906124889083018461240e565b6000602082840312156128ef57600080fd5b81516001600160e01b03198116811461251457600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600061144c602083018486612907565b6000821982111561295757612957612716565b500190565b6001600160a01b03841681526040602082018190526000906129819083018486612907565b95945050505050565b602081526000612514602083018461240e565b6040815260006129b0604083018561240e565b8281036020840152612981818561240e565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220cec978d6621a16320692901595424021f1b9a3e4e435ae801ca8c9b92b3a5bd864736f6c634300080b0033"}; + + public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY); + + public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b50612a40806100206000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80635089e2c8116100c3578063ca97c9b61161007c578063ca97c9b6146102f3578063cc8be70e14610316578063d86e29e214610329578063deca7fb714610331578063ea605f3d14610355578063ffd89b6f1461035d57600080fd5b80635089e2c814610259578063918268151461027e57806392ec0cdd146102915780639b08e7f8146102a45780639cb97a52146102b7578063b61b2b39146102e057600080fd5b80632ffdc5f8116101155780632ffdc5f8146101c7578063391edc16146101da5780633b3987fe146101ed5780633e5a304c14610200578063441f819c146102235780634c00105f1461023657600080fd5b80630256e2781461015257806304ddbcf21461016957806316cad12a1461017e5780631f2d486014610191578063286806cc146101a4575b600080fd5b6066545b6040519081526020015b60405180910390f35b61017c61017736600461229f565b610370565b005b61017c61018c3660046122fd565b610405565b61017c61019f36600461231f565b6104f2565b6101b76101b2366004612349565b610653565b60405161016094939291906123af565b61017c6101d53660046123e6565b610719565b61017c6101e8366004612349565b6107af565b61017c6101fb36600461229f565b61088b565b61015661020e366004612349565b60009081526069602052604090206005015490565b61017c610231366004612464565b610912565b6102496102443660046124d0565b610a35565b6040519015158152602001610160565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610160565b61017c61028c366004612503565b610a65565b61017c61029f366004612349565b610b8d565b61017c6102b2366004612594565b610c72565b6102666102c5366004612349565b6000908152606c60205260409020546001600160a01b031690565b61017c6102ee366004612349565b610cfd565b61030661030136600461231f565b610de0565b6040516101609493929190612603565b6101566103243660046122fd565b610f6e565b61017c610f8c565b61034461033f366004612349565b611001565b604051610160959493929190612628565b61017c611171565b61017c61036b366004612675565b6111f7565b6033546001600160a01b031633146103a457604051636381e58960e11b815260040161039b906126c0565b60405180910390fd5b806103c257604051636381e58960e11b815260040161039b906126f5565b60005b81811015610400576103ee8383838181106103e2576103e2612722565b905060200201356113c6565b806103f88161274e565b9150506103c5565b505050565b6033546001600160a01b0316331461043057604051636381e58960e11b815260040161039b906126c0565b6001600160a01b03811661049657604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161039b565b6033546040516001600160a01b038084169216907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d090600090a3603380546001600160a01b0319166001600160a01b0392909216919091179055565b6000818152606a60205260409020600101546001600160a01b0316331461055c57604051636381e58960e11b815260206004820152601b60248201527f4441433a6f6e6c7920444143206f776e65722063616e2063616c6c0000000000604482015260640161039b565b6000818152606a60205260409020600101546001600160a01b038381169116141561059a57604051636381e58960e11b815260040161039b90612769565b6000818152606a6020526040902060030154156105fa57604051636381e58960e11b815260206004820152601f60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e20617070726f766500604482015260640161039b565b6000818152606c602052604080822080546001600160a01b0319166001600160a01b0386169081179091559051839233917fd1e45707b3f71c77903b61f04c900f772db264b9bf618f1cc3308fb516eb61699190a45050565b6000818152606a60205260409020600181015460028201546003830154600490930180546001600160a01b0390931693919260609190610692906127ae565b80601f01602080910402602001604051908101604052809291908181526020018280546106be906127ae565b801561070b5780601f106106e05761010080835404028352916020019161070b565b820191906000526020600020905b8154815290600101906020018083116106ee57829003601f168201915b505050505090509193509193565b336001600160a01b038316141561074357604051636381e58960e11b815260040161039b90612769565b336000818152606d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f34cc9ec6b85c217ac6bd5f7b86411e4e4e40d816d5d17725c4dec1f0901d9074910160405180910390a35050565b6107b88161142a565b6107c2338261147c565b6107df57604051636381e58960e11b815260040161039b906127e9565b6000818152606a60205260409020600301541561083f57604051636381e58960e11b815260206004820152601c60248201527f4441433a6f6e6c79206e6f726d616c204441432063616e206275726e00000000604482015260640161039b565b6000818152606a6020908152604080832060020154835260699091529020600301541561087f57604051636381e58960e11b815260040161039b90612836565b610888816114fa565b50565b6033546001600160a01b031633146108b657604051636381e58960e11b815260040161039b906126c0565b806108d457604051636381e58960e11b815260040161039b906126f5565b60005b81811015610400576109008383838181106108f4576108f4612722565b90506020020135611616565b8061090a8161274e565b9150506108d7565b6109646040518060200160405280600081525085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506116789050565b156109bc57604051636381e58960e11b815260206004820152602160248201527f4441433a63617465676f72794e616d652063616e206e6f7420626520656d70746044820152607960f81b606482015260840161039b565b610a2f84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f880181900481028201810190925286815292508691508590819084018382808284376000920191909152506116db92505050565b50505050565b6001600160a01b038083166000908152606d602090815260408083209385168352929052205460ff165b92915050565b82610a8357604051636381e58960e11b815260040161039b906126f5565b610ad8868686866000818110610a9b57610a9b612722565b6020029190910135905060005b6040519080825280601f01601f191660200182016040528015610ad2576020820181803683370190505b50611810565b610b4257604051636381e58960e11b815260206004820152603460248201527f4441433a63616e74206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b60005b83811015610b8457610b728787878785818110610b6457610b64612722565b9050602002013586866118bf565b80610b7c8161274e565b915050610b45565b50505050505050565b6033546001600160a01b03163314610bb857604051636381e58960e11b815260040161039b906126c0565b610bc181611ac8565b600160008281526069602052604090206003015414610c3157604051636381e58960e11b815260206004820152602560248201527f4441433a6f6e6c7920667265657a652063617465676f72792063616e20756e666044820152647265657a6560d81b606482015260840161039b565b60008181526069602052604080822060030182905551829133917f8171c3e7cd97b6ad5e189e7564be1f3291b03d6802b0eac2293636e8277f0e319190a350565b610c7f8585856000610aa8565b610ce957604051636381e58960e11b815260206004820152603460248201527f4441433a2063616e206e6f74207472616e7366657220746f206e6f6e204441436044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b606482015260840161039b565b610cf685858585856118bf565b5050505050565b6033546001600160a01b03163314610d2857604051636381e58960e11b815260040161039b906126c0565b610d3181611ac8565b60008181526069602052604090206003015415610d9d57604051636381e58960e11b815260206004820152602360248201527f4441433a6f6e6c79206e6f726d616c2063617465676f72792063616e20667265604482015262657a6560e81b606482015260840161039b565b600081815260696020526040808220600160039091015551829133917f6790b7a7222403863d6359169e1769717ae3d64801f03a6b9433bcea146d1c839190a350565b6000806000606060008511610e3857604051636381e58960e11b815260206004820152601d60248201527f4441433a696e646578206d7573742067726561746572207468616e2030000000604482015260640161039b565b610e64610e46600187612877565b6001600160a01b0388166000908152606b6020526040902090611b24565b935060008411610eb757604051636381e58960e11b815260206004820152601860248201527f4441433a6e6f20444143206174207468697320696e6465780000000000000000604482015260640161039b565b6000848152606a602052604090206002810154600382015460049092018054919550919350610ee5906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610f11906127ae565b8015610f5e5780601f10610f3357610100808354040283529160200191610f5e565b820191906000526020600020905b815481529060010190602001808311610f4157829003601f168201915b5050505050905092959194509250565b6001600160a01b0381166000908152606b6020526040812054610a5f565b6033546001600160a01b03163314610fb757604051636381e58960e11b815260040161039b906126c0565b6033546040516000916001600160a01b0316907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb","0fcf218f81b86a1c036e47d0908390a3603380546001600160a01b0319169055565b600081815260696020526040812080546001909101805491926060929091829184919061102d906127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611059906127ae565b80156110a65780601f1061107b576101008083540402835291602001916110a6565b820191906000526020600020905b81548152906001019060200180831161108957829003601f168201915b505050600089815260696020526040902060028101546003820154600490920180549599506001600160a01b039091169750909550926110e8925090506127ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611114906127ae565b80156111615780601f1061113657610100808354040283529160200191611161565b820191906000526020600020905b81548152906001019060200180831161114457829003601f168201915b5050505050905091939590929450565b600054610100900460ff16806111865750303b155b80611194575060005460ff16155b6111b157604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff161580156111d3576000805461ffff19166101011790555b6111db611bab565b6111e3611c1d565b8015610888576000805461ff001916905550565b61120085611ac8565b6000858152606960205260409020600201546001600160a01b0316331461126a57604051636381e58960e11b815260206004820181905260248201527f4441433a6f6e6c792063617465676f7279206f776e65722063616e206d696e74604482015260640161039b565b600085815260696020526040902060030154156112de57604051636381e58960e11b815260206004820152602b60248201527f4441433a6f6e6c792063617465676f727920737461747573206973206e6f726d60448201526a185b0818d85b881b5a5b9d60aa1b606482015260840161039b565b6000841161133e57604051636381e58960e11b815260206004820152602660248201527f4441433a6d696e7420616d6f756e74206d7573742067726561746572207468616044820152656e207a65726f60d01b606482015260840161039b565b6001600160a01b03831661139557604051636381e58960e11b815260206004820181905260248201527f4441433a63616e206e6f74206d696e7420746f207a65726f2061646472657373604482015260640161039b565b60005b848110156113be576113ac84878585611d5c565b806113b68161274e565b915050611398565b505050505050565b6113cf8161142a565b60016000828152606a60205260409020600301541415610888576000818152606a602052604080822060030182905551829133917f7fc84bbf5f6aa9afb4daed41edce6598ddc95f8dd2c17399ab3bf775c637d89d9190a350565b6000818152606a602052604090205461088857604051636381e58960e11b8152602060048201526013602482015272111050ce911050d251081b9bdd08195e1a5cdd606a1b604482015260640161039b565b6000818152606a60205260408120600101546001600160a01b039081169084168114806114ce57506001600160a01b038082166000908152606d602090815260408083209388168352929052205460ff165b806114f257506000838152606c60205260409020546001600160a01b038581169116145b949350505050565b6000818152606a6020908152604080832060010154606c835281842080546001600160a01b03191690556001600160a01b0316808452606b90925282209091906115449084611f4a565b506001600160a01b0381166000908152606b60205260409020611567908461203d565b506000838152606a602090815260408083206001810180546001600160a01b0319166001600160a01b03878116918217909255600260039093019290925582518481529384019490945286939092908616917f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a705910160405180910390a4604051839033907fc5cfb20a182ba4b800686ac3d941ef8a395ec1bbf151ed8db9b9daec7a67f9e790600090a3505050565b61161f8161142a565b6000818152606a6020526040902060030154610888576000818152606a6020526040808220600160039091015551829133917f97b179d991379a1ceca6ea8271f229aaa1ee8dd74df21f9236c5379df138f42e9190a350565b6000808360405160200161168c91906128dc565b6040516020818303038152906040528051906020012090506000836040516020016116b791906128dc565b60408051601f19818403018152919052805160209091012091909114949350505050565b6067546040805160c081018252828152602080820186815233838501526000606084018190526080840187905260a08401819052858152606983529390932082518155925180519293849390926117399260018501929101906121ba565b5060408201516002820180546001600160a01b0319166001600160a01b0390921691909117905560608201516003820155608082015180516117859160048401916020909101906121ba565b5060a082015181600501559050506001606560008282546117a691906128ef565b925050819055506001606760008282546117c091906128ef565b90915550829050336001600160a01b03167f9fcb3fde540f1319bf07575fe9913e34b82a0ed274f00ffa218e9bb779b68ed28686604051611802929190612907565b60405180910390a350505050565b60006001600160a01b0384163b611829575060016114f2565b604051637e8c1fc960e11b81526000906001600160a01b0386169063fd183f929061185e908990899089908990600401612935565b6020604051808303816000875af115801561187d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a19190612968565b6001600160e01b031916637e8c1fc960e11b14915050949350505050565b6118c9338461147c565b6118e657604051636381e58960e11b815260040161039b906127e9565b6001600160a01b03841661194e57604051636381e58960e11b815260206004820152602860248201527f4441433a63616e206e6f74207472616e7366657220746f20746865207a65726f604482015267206164647265737360c01b606482015260840161039b565b6000838152606a6020526040812060020154906000828152606960205260409020600301541461199157604051636381e58960e11b815260040161039b90612836565b6000848152606a6020526040902060030154156119f157604051636381e58960e11b815260206004820152601c60248201527f4441433a44414320737461747573206973206e6f74206e6f726d616c00000000604482015260640161039b565b6000848152606c6020908152604080832080546001600160a01b03191690556001600160a01b0389168352606b9091529020611a2d9085611f4a565b506001600160a01b0385166000908152606b60205260409020611a50908561203d565b506000848152606a60205260409081902060010180546001600160a01b0319166001600160a01b0388811691821790925591518692918916907f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a70590611ab890889088906129bb565b60405180910390a4505050505050565b60008181526069602052604090205461088857604051636381e58960e11b815260206004820152601b60248201527f4441433a63617465676f727920646f6573206e6f742065786973740000000000604482015260640161039b565b81546000908210611b8357604051636381e58960e11b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b606482015260840161039b565b826000018281548110611b9857611b98612722565b9060005260206000200154905092915050565b600054610100900460ff1680611bc05750303b155b80611bce575060005460ff16155b611beb57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015611c0d576000805461ffff19166101011790555b611c1561208c565b6111e3612101565b600054610100900460ff1680611c325750303b155b80611c40575060005460ff16155b611c5d57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015611c7f576000805461ffff19166101011790555b60675415611ce157604051636381e58960e11b815260206004820152602860248201527f4441433a5f63757272656e7443617465676f72794944206e6f7420657175616c60448201526720746f207a65726f60c01b606482015260840161039b565b60685415611d3e57604051636381e58960e11b815260206004820152602360248201527f4441433a5f63757272656e744441434944206e6f7420657175616c20746f207a60448201526265726f60e81b606482015260840161039b565b600160678190556068558015610888576000805461ff001916905550565b6068546040805160a0810182528281526001600160a01b03871660208201529081018590526000906060810182815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250939094525050848152606a602090815260409182902084518155848201516001820180546001600160a01b0319166001600160a01b0390921691909117905591840151600283015560608401516003830155608084015180519495508594929350611e3492600485019291909101906121ba565b50905050600160666000828254611e4b91906128ef565b92505081905550600160686000828254611e6591906128ef565b90915550506000858152606960205260408120600501805460019290611e8c9084906128ef565b90915550506001600160a01b0386166000908152606b60205260409020611eb3908361203d565b508185336001600160a01b03167fbaa9ce3c5df106e294a8517fe62aa9525a79ef0db04efe8d2758f89cd585f6d7898888604051611ef3939291906129cf565b60405180910390a481866001600160a01b031660006001600160a01b03167f0e06b20f2439cf138eb929526b10b2f6be289aa44858d643f4b18a56f270a705604051611ab890602080825260009082015260400190565b60008181526001830160205260408120548015612033576000611f6e600183612877565b8554909150600090611f8290600190612877565b90506000866000018281548110611f9b57611f9b612722565b9060005260206000200154905080876000018481548110611fbe57611fbe612722565b600091825260209091200155611fd58360016128ef565b60008281526001890160","205260409020558654879080611ff757611ff76129f4565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610a5f565b6000915050610a5f565b600081815260018301602052604081205461208457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610a5f565b506000610a5f565b600054610100900460ff16806120a15750303b155b806120af575060005460ff16155b6120cc57604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff161580156111e3576000805461ffff19166101011790558015610888576000805461ff001916905550565b600054610100900460ff16806121165750303b155b80612124575060005460ff16155b61214157604051636381e58960e11b815260040161039b9061288e565b600054610100900460ff16158015612163576000805461ffff19166101011790555b603380546001600160a01b0319163390811790915560405181906000907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908290a3508015610888576000805461ff001916905550565b8280546121c6906127ae565b90600052602060002090601f0160209004810192826121e8576000855561222e565b82601f1061220157805160ff191683800117855561222e565b8280016001018555821561222e579182015b8281111561222e578251825591602001919060010190612213565b5061223a92915061223e565b5090565b5b8082111561223a576000815560010161223f565b60008083601f84011261226557600080fd5b50813567ffffffffffffffff81111561227d57600080fd5b6020830191508360208260051b850101111561229857600080fd5b9250929050565b600080602083850312156122b257600080fd5b823567ffffffffffffffff8111156122c957600080fd5b6122d585828601612253565b90969095509350505050565b80356001600160a01b03811681146122f857600080fd5b919050565b60006020828403121561230f57600080fd5b612318826122e1565b9392505050565b6000806040838503121561233257600080fd5b61233b836122e1565b946020939093013593505050565b60006020828403121561235b57600080fd5b5035919050565b6000815180845260005b818110156123885760208185018101518683018201520161236c565b8181111561239a576000602083870101525b50601f01601f19169290920160200192915050565b60018060a01b03851681528360208201528260408201526080606082015260006123dc6080830184612362565b9695505050505050565b600080604083850312156123f957600080fd5b612402836122e1565b91506020830135801515811461241757600080fd5b809150509250929050565b60008083601f84011261243457600080fd5b50813567ffffffffffffffff81111561244c57600080fd5b60208301915083602082850101111561229857600080fd5b6000806000806040858703121561247a57600080fd5b843567ffffffffffffffff8082111561249257600080fd5b61249e88838901612422565b909650945060208701359150808211156124b757600080fd5b506124c487828801612422565b95989497509550505050565b600080604083850312156124e357600080fd5b6124ec836122e1565b91506124fa602084016122e1565b90509250929050565b6000806000806000806080878903121561251c57600080fd5b612525876122e1565b9550612533602088016122e1565b9450604087013567ffffffffffffffff8082111561255057600080fd5b61255c8a838b01612253565b9096509450606089013591508082111561257557600080fd5b5061258289828a01612422565b979a9699509497509295939492505050565b6000806000806000608086880312156125ac57600080fd5b6125b5866122e1565b94506125c3602087016122e1565b935060408601359250606086013567ffffffffffffffff8111156125e657600080fd5b6125f288828901612422565b969995985093965092949392505050565b8481528360208201528260408201526080606082015260006123dc6080830184612362565b85815260a06020820152600061264160a0830187612362565b6001600160a01b03861660408401526060830185905282810360808401526126698185612362565b98975050505050505050565b60008060008060006080868803121561268d57600080fd5b85359450602086013593506126a4604087016122e1565b9250606086013567ffffffffffffffff8111156125e657600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601390820152724441433a44414349447320697320656d70747960681b604082015260600190565b63b95aa35560e01b600052603260045260246000fd5b63b95aa35560e01b600052601160045260246000fd5b600060001982141561276257612762612738565b5060010190565b60208082526025908201527f4441433a63616e206e6f7420617070726f76616c20746f2063757272656e742060408201526437bbb732b960d91b606082015260800190565b600181811c908216806127c257607f821691505b602082108114156127e35763b95aa35560e01b600052602260045260246000fd5b50919050565b6020808252602d908201527f4441433a63616c6c6572206973206e6f742074686520746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60208082526021908201527f4441433a63617465676f727920737461747573206973206e6f74206e6f726d616040820152601b60fa1b606082015260800190565b60008282101561288957612889612738565b500390565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020815260006123186020830184612362565b6000821982111561290257612902612738565b500190565b60408152600061291a6040830185612362565b828103602084015261292c8185612362565b95945050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906123dc90830184612362565b60006020828403121561297a57600080fd5b81516001600160e01b03198116811461231857600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006114f2602083018486612992565b6001600160a01b038416815260406020820181905260009061292c9083018486612992565b63b95aa35560e01b600052603160045260246000fdfea26469706673582212203e17e48e94786a4ec34a71624da25d5e610b07093675491b9bf9b85bc72d6fa364736f6c634300080b0033"}; + + public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY); + + public static final String[] ABI_ARRAY = {"[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"isApproval\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"Burn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"categoryName\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"name\":\"CreateCategory\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"FreezeCategory\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"FreezeDAC\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"Mint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"UnfreezeCategory\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"UnfreezeDAC\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"categoryName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"name\":\"createCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"freezeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"DACIDs\",\"type\":\"uint256[]\"}],\"name\":\"freezeDAC\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"getApproved\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"}],\"name\":\"getDACByIndex\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"name\":\"mint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"queryCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"categoryName\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"}],\"name\":\"queryDAC\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"status\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"metadata\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isApproval\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"totalSupplyOfCategory\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"DACID\",\"type\":\"uint256\"},{\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"transferFrom\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256[]\",\"name\":\"DACIDs\",\"type\":\"uint256[]\"},{\"internalType\":\"string\",\"name\":\"extData\",\"type\":\"string\"}],\"name\":\"transferFromBatch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"categoryID\",\"type\":\"uint256\"}],\"name\":\"unfreezeCategory\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}",",{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"DACIDs\",\"type\":\"uint256[]\"}],\"name\":\"unfreezeDAC\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"}; + + public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY); + + public static final String FUNC_APPROVE = "approve"; + + public static final String FUNC_BALANCEOF = "balanceOf"; + + public static final String FUNC_BURN = "burn"; + + public static final String FUNC_CREATECATEGORY = "createCategory"; + + public static final String FUNC_FREEZECATEGORY = "freezeCategory"; + + public static final String FUNC_FREEZEDAC = "freezeDAC"; + + public static final String FUNC_GETAPPROVED = "getApproved"; + + public static final String FUNC_GETDACBYINDEX = "getDACByIndex"; + + public static final String FUNC_INITIALIZE = "initialize"; + + public static final String FUNC_ISAPPROVEDFORALL = "isApprovedForAll"; + + public static final String FUNC_MINT = "mint"; + + public static final String FUNC_OWNER = "owner"; + + public static final String FUNC_QUERYCATEGORY = "queryCategory"; + + public static final String FUNC_QUERYDAC = "queryDAC"; + + public static final String FUNC_RENOUNCEOWNERSHIP = "renounceOwnership"; + + public static final String FUNC_SETAPPROVALFORALL = "setApprovalForAll"; + + public static final String FUNC_TOTALSUPPLY = "totalSupply"; + + public static final String FUNC_TOTALSUPPLYOFCATEGORY = "totalSupplyOfCategory"; + + public static final String FUNC_TRANSFERFROM = "transferFrom"; + + public static final String FUNC_TRANSFERFROMBATCH = "transferFromBatch"; + + public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership"; + + public static final String FUNC_UNFREEZECATEGORY = "unfreezeCategory"; + + public static final String FUNC_UNFREEZEDAC = "unfreezeDAC"; + + public static final Event APPROVAL_EVENT = new Event("Approval", + Arrays.>asList(new TypeReference

(true) {}, new TypeReference
(true) {}, new TypeReference(true) {})); + ; + + public static final Event APPROVALFORALL_EVENT = new Event("ApprovalForAll", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference
(true) {}, new TypeReference() {})); + ; + + public static final Event BURN_EVENT = new Event("Burn", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference(true) {})); + ; + + public static final Event CREATECATEGORY_EVENT = new Event("CreateCategory", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference(true) {}, new TypeReference() {}, new TypeReference() {})); + ; + + public static final Event FREEZECATEGORY_EVENT = new Event("FreezeCategory", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference(true) {})); + ; + + public static final Event FREEZEDAC_EVENT = new Event("FreezeDAC", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference(true) {})); + ; + + public static final Event MINT_EVENT = new Event("Mint", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference
() {}, new TypeReference(true) {}, new TypeReference(true) {}, new TypeReference() {})); + ; + + public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference
(true) {})); + ; + + public static final Event TRANSFER_EVENT = new Event("Transfer", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference
(true) {}, new TypeReference(true) {}, new TypeReference() {})); + ; + + public static final Event UNFREEZECATEGORY_EVENT = new Event("UnfreezeCategory", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference(true) {})); + ; + + public static final Event UNFREEZEDAC_EVENT = new Event("UnfreezeDAC", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference(true) {})); + ; + + protected BTSIDAC(String contractAddress, Client client, CryptoKeyPair credential) { + super(getBinary(client.getCryptoSuite()), contractAddress, client, credential); + } + + public static String getBinary(CryptoSuite cryptoSuite) { + return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY); + } + + public static String getABI() { + return ABI; + } + + public List getApprovalEvents(TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(APPROVAL_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + ApprovalEventResponse typedResponse = new ApprovalEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.operator = (String) eventValues.getIndexedValues().get(1).getValue(); + typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(2).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getApprovalForAllEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(APPROVALFORALL_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + ApprovalForAllEventResponse typedResponse = new ApprovalForAllEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.operator = (String) eventValues.getIndexedValues().get(1).getValue(); + typedResponse.isApproval = (Boolean) eventValues.getNonIndexedValues().get(0).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getBurnEvents(TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(BURN_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + BurnEventResponse typedResponse = new BurnEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.owner = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getCreateCategoryEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(CREATECATEGORY_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + CreateCategoryEventResponse typedResponse = new CreateCategoryEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.creator = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + typedResponse.categoryName = (String) eventValues.getNonIndexedValues().get(0).getValue(); + typedResponse.metadata = (String) eventValues.getNonIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getFreezeCategoryEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(FREEZECATEGORY_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + FreezeCategoryEventResponse typedResponse = new FreezeCategoryEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getFreezeDACEvents(TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(FREEZEDAC_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + FreezeDACEventResponse typedResponse = new FreezeDACEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getMintEvents(TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(MINT_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + MintEventResponse typedResponse = new MintEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(2).getValue(); + typedResponse.to = (String) eventValues.getNonIndexedValues().get(0).getValue(); + typedResponse.extData = (String) eventValues.getNonIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getOwnershipTransferredEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getTransferEvents(TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(TRANSFER_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + TransferEventResponse typedResponse = new TransferEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.from = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.to = (String) eventValues.getIndexedValues().get(1).getValue(); + typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(2).getValue(); + typedResponse.extData = (String) eventValues.getNonIndexedValues().get(0).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getUnfreezeCategoryEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(UNFREEZECATEGORY_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + UnfreezeCategoryEventResponse typedResponse = new UnfreezeCategoryEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.categoryID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getUnfreezeDACEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(UNFREEZEDAC_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (EventValuesWithLog eventValues : valueList) { + UnfreezeDACEventResponse typedResponse = new UnfreezeDACEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.DACID = (BigInteger) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public TransactionReceipt approve(String to, BigInteger DACID) { + final Function function = new Function( + FUNC_APPROVE, + Arrays.asList(new Address(to), + new Uint256(DACID)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String approve(String to, BigInteger DACID, TransactionCallback callback) { + final Function function = new Function( + FUNC_APPROVE, + Arrays.asList(new Address(to), + new Uint256(DACID)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForApprove(String to, BigInteger DACID) { + final Function function = new Function( + FUNC_APPROVE, + Arrays.asList(new Address(to), + new Uint256(DACID)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple2 getApproveInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_APPROVE, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple2( + + (String) results.get(0).getValue(), + (BigInteger) results.get(1).getValue() + ); + } + + public BigInteger balanceOf(String owner) throws ContractException { + final Function function = new Function(FUNC_BALANCEOF, + Arrays.asList(new Address(owner)), + Arrays.>asList(new TypeReference() {})); + return executeCallWithSingleValueReturn(function, BigInteger.class); + } + + public TransactionReceipt burn(BigInteger DACID) { + final Function function = new Function( + FUNC_BURN, + Arrays.asList(new Uint256(DACID)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String burn(BigInteger DACID, TransactionCallback callback) { + final Function function = new Function( + FUNC_BURN, + Arrays.asList(new Uint256(DACID)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForBurn(BigInteger DACID) { + final Function function = new Function( + FUNC_BURN, + Arrays.asList(new Uint256(DACID)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getBurnInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_BURN, + Arrays.asList(), + Arrays.>asList(new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (BigInteger) results.get(0).getValue() + ); + } + + public TransactionReceipt createCategory(String categoryName, String metadata) { + final Function function = new Function( + FUNC_CREATECATEGORY, + Arrays.asList(new Utf8String(categoryName), + new Utf8String(metadata)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String createCategory(String categoryName, String metadata, + TransactionCallback callback) { + final Function function = new Function( + FUNC_CREATECATEGORY, + Arrays.asList(new Utf8String(categoryName), + new Utf8String(metadata)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForCreateCategory(String categoryName, String metadata) { + final Function function = new Function( + FUNC_CREATECATEGORY, + Arrays.asList(new Utf8String(categoryName), + new Utf8String(metadata)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple2 getCreateCategoryInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_CREATECATEGORY, + Arrays.asList(), + Arrays.>asList(new TypeReference() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple2( + + (String) results.get(0).getValue(), + (String) results.get(1).getValue() + ); + } + + public TransactionReceipt freezeCategory(BigInteger categoryID) { + final Function function = new Function( + FUNC_FREEZECATEGORY, + Arrays.asList(new Uint256(categoryID)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String freezeCategory(BigInteger categoryID, TransactionCallback callback) { + final Function function = new Function( + FUNC_FREEZECATEGORY, + Arrays.asList(new Uint256(categoryID)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForFreezeCategory(BigInteger categoryID) { + final Function function = new Function( + FUNC_FREEZECATEGORY, + Arrays.asList(new Uint256(categoryID)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getFreezeCategoryInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_FREEZECATEGORY, + Arrays.asList(), + Arrays.>asList(new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (BigInteger) results.get(0).getValue() + ); + } + + public TransactionReceipt freezeDAC(List DACIDs) { + final Function function = new Function( + FUNC_FREEZEDAC, + Arrays.asList(new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String freezeDAC(List DACIDs, TransactionCallback callback) { + final Function function = new Function( + FUNC_FREEZEDAC, + Arrays.asList(new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForFreezeDAC(List DACIDs) { + final Function function = new Function( + FUNC_FREEZEDAC, + Arrays.asList(new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1> getFreezeDACInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_FREEZEDAC, + Arrays.asList(), + Arrays.>asList(new TypeReference>() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1>( + + convertToNative((List) results.get(0).getValue()) + ); + } + + public String getApproved(BigInteger DACID) throws ContractException { + final Function function = new Function(FUNC_GETAPPROVED, + Arrays.asList(new Uint256(DACID)), + Arrays.>asList(new TypeReference
() {})); + return executeCallWithSingleValueReturn(function, String.class); + } + + public Tuple4 getDACByIndex(String owner, + BigInteger index) throws ContractException { + final Function function = new Function(FUNC_GETDACBYINDEX, + Arrays.asList(new Address(owner), + new Uint256(index)), + Arrays.>asList(new TypeReference() {}, new TypeReference() {}, new TypeReference() {}, new TypeReference() {})); + List results = executeCallWithMultipleValueReturn(function); + return new Tuple4( + (BigInteger) results.get(0).getValue(), + (BigInteger) results.get(1).getValue(), + (BigInteger) results.get(2).getValue(), + (String) results.get(3).getValue()); + } + + public TransactionReceipt initialize() { + final Function function = new Function( + FUNC_INITIALIZE, + Arrays.asList(), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String initialize(TransactionCallback callback) { + final Function function = new Function( + FUNC_INITIALIZE, + Arrays.asList(), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForInitialize() { + final Function function = new Function( + FUNC_INITIALIZE, + Arrays.asList(), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Boolean isApprovedForAll(String owner, String operator) throws ContractException { + final Function function = new Function(FUNC_ISAPPROVEDFORALL, + Arrays.asList(new Address(owner), + new Address(operator)), + Arrays.>asList(new TypeReference() {})); + return executeCallWithSingleValueReturn(function, Boolean.class); + } + + public TransactionReceipt mint(BigInteger categoryID, BigInteger amount, String to, + String metadata) { + final Function function = new Function( + FUNC_MINT, + Arrays.asList(new Uint256(categoryID), + new Uint256(amount), + new Address(to), + new Utf8String(metadata)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String mint(BigInteger categoryID, BigInteger amount, String to, String metadata, + TransactionCallback callback) { + final Function function = new Function( + FUNC_MINT, + Arrays.asList(new Uint256(categoryID), + new Uint256(amount), + new Address(to), + new Utf8String(metadata)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForMint(BigInteger categoryID, BigInteger amount, String to, + String metadata) { + final Function function = new Function( + FUNC_MINT, + Arrays.asList(new Uint256(categoryID), + new Uint256(amount), + new Address(to), + new Utf8String(metadata)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple4 getMintInput( + TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_MINT, + Arrays.asList(), + Arrays.>asList(new TypeReference() {}, new TypeReference() {}, new TypeReference
() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple4( + + (BigInteger) results.get(0).getValue(), + (BigInteger) results.get(1).getValue(), + (String) results.get(2).getValue(), + (String) results.get(3).getValue() + ); + } + + public String owner() throws ContractException { + final Function function = new Function(FUNC_OWNER, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + return executeCallWithSingleValueReturn(function, String.class); + } + + public Tuple5 queryCategory( + BigInteger categoryID) throws ContractException { + final Function function = new Function(FUNC_QUERYCATEGORY, + Arrays.asList(new Uint256(categoryID)), + Arrays.>asList(new TypeReference() {}, new TypeReference() {}, new TypeReference
() {}, new TypeReference() {}, new TypeReference() {})); + List results = executeCallWithMultipleValueReturn(function); + return new Tuple5( + (BigInteger) results.get(0).getValue(), + (String) results.get(1).getValue(), + (String) results.get(2).getValue(), + (BigInteger) results.get(3).getValue(), + (String) results.get(4).getValue()); + } + + public Tuple4 queryDAC(BigInteger DACID) throws + ContractException { + final Function function = new Function(FUNC_QUERYDAC, + Arrays.asList(new Uint256(DACID)), + Arrays.>asList(new TypeReference
() {}, new TypeReference() {}, new TypeReference() {}, new TypeReference() {})); + List results = executeCallWithMultipleValueReturn(function); + return new Tuple4( + (String) results.get(0).getValue(), + (BigInteger) results.get(1).getValue(), + (BigInteger) results.get(2).getValue(), + (String) results.get(3).getValue()); + } + + public TransactionReceipt renounceOwnership() { + final Function function = new Function( + FUNC_RENOUNCEOWNERSHIP, + Arrays.asList(), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String renounceOwnership(TransactionCallback callback) { + final Function function = new Function( + FUNC_RENOUNCEOWNERSHIP, + Arrays.asList(), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForRenounceOwnership() { + final Function function = new Function( + FUNC_RENOUNCEOWNERSHIP, + Arrays.asList(), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public TransactionReceipt setApprovalForAll(String to, Boolean isApproval) { + final Function function = new Function( + FUNC_SETAPPROVALFORALL, + Arrays.asList(new Address(to), + new Bool(isApproval)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String setApprovalForAll(String to, Boolean isApproval, TransactionCallback callback) { + final Function function = new Function( + FUNC_SETAPPROVALFORALL, + Arrays.asList(new Address(to), + new Bool(isApproval)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForSetApprovalForAll(String to, Boolean isApproval) { + final Function function = new Function( + FUNC_SETAPPROVALFORALL, + Arrays.asList(new Address(to), + new Bool(isApproval)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple2 getSetApprovalForAllInput( + TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_SETAPPROVALFORALL, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple2( + + (String) results.get(0).getValue(), + (Boolean) results.get(1).getValue() + ); + } + + public BigInteger totalSupply() throws ContractException { + final Function function = new Function(FUNC_TOTALSUPPLY, + Arrays.asList(), + Arrays.>asList(new TypeReference() {})); + return executeCallWithSingleValueReturn(function, BigInteger.class); + } + + public BigInteger totalSupplyOfCategory(BigInteger categoryID) throws ContractException { + final Function function = new Function(FUNC_TOTALSUPPLYOFCATEGORY, + Arrays.asList(new Uint256(categoryID)), + Arrays.>asList(new TypeReference() {})); + return executeCallWithSingleValueReturn(function, BigInteger.class); + } + + public TransactionReceipt transferFrom(String from, String to, BigInteger DACID, + String extData) { + final Function function = new Function( + FUNC_TRANSFERFROM, + Arrays.asList(new Address(from), + new Address(to), + new Uint256(DACID), + new Utf8String(extData)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String transferFrom(String from, String to, BigInteger DACID, String extData, + TransactionCallback callback) { + final Function function = new Function( + FUNC_TRANSFERFROM, + Arrays.asList(new Address(from), + new Address(to), + new Uint256(DACID), + new Utf8String(extData)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForTransferFrom(String from, String to, BigInteger DACID, + String extData) { + final Function function = new Function( + FUNC_TRANSFERFROM, + Arrays.asList(new Address(from), + new Address(to), + new Uint256(DACID), + new Utf8String(extData)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple4 getTransferFromInput( + TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_TRANSFERFROM, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference
() {}, new TypeReference() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple4( + + (String) results.get(0).getValue(), + (String) results.get(1).getValue(), + (BigInteger) results.get(2).getValue(), + (String) results.get(3).getValue() + ); + } + + public TransactionReceipt transferFromBatch(String from, String to, List DACIDs, + String extData) { + final Function function = new Function( + FUNC_TRANSFERFROMBATCH, + Arrays.asList(new Address(from), + new Address(to), + new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class)), + new Utf8String(extData)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String transferFromBatch(String from, String to, List DACIDs, String extData, + TransactionCallback callback) { + final Function function = new Function( + FUNC_TRANSFERFROMBATCH, + Arrays.asList(new Address(from), + new Address(to), + new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class)), + new Utf8String(extData)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForTransferFromBatch(String from, String to, + List DACIDs, String extData) { + final Function function = new Function( + FUNC_TRANSFERFROMBATCH, + Arrays.asList(new Address(from), + new Address(to), + new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class)), + new Utf8String(extData)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple4, String> getTransferFromBatchInput( + TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_TRANSFERFROMBATCH, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference
() {}, new TypeReference>() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple4, String>( + + (String) results.get(0).getValue(), + (String) results.get(1).getValue(), + convertToNative((List) results.get(2).getValue()), + (String) results.get(3).getValue() + ); + } + + public TransactionReceipt transferOwnership(String newOwner) { + final Function function = new Function( + FUNC_TRANSFEROWNERSHIP, + Arrays.asList(new Address(newOwner)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String transferOwnership(String newOwner, TransactionCallback callback) { + final Function function = new Function( + FUNC_TRANSFEROWNERSHIP, + Arrays.asList(new Address(newOwner)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForTransferOwnership(String newOwner) { + final Function function = new Function( + FUNC_TRANSFEROWNERSHIP, + Arrays.asList(new Address(newOwner)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getTransferOwnershipInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_TRANSFEROWNERSHIP, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (String) results.get(0).getValue() + ); + } + + public TransactionReceipt unfreezeCategory(BigInteger categoryID) { + final Function function = new Function( + FUNC_UNFREEZECATEGORY, + Arrays.asList(new Uint256(categoryID)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String unfreezeCategory(BigInteger categoryID, TransactionCallback callback) { + final Function function = new Function( + FUNC_UNFREEZECATEGORY, + Arrays.asList(new Uint256(categoryID)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForUnfreezeCategory(BigInteger categoryID) { + final Function function = new Function( + FUNC_UNFREEZECATEGORY, + Arrays.asList(new Uint256(categoryID)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getUnfreezeCategoryInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_UNFREEZECATEGORY, + Arrays.asList(), + Arrays.>asList(new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (BigInteger) results.get(0).getValue() + ); + } + + public TransactionReceipt unfreezeDAC(List DACIDs) { + final Function function = new Function( + FUNC_UNFREEZEDAC, + Arrays.asList(new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String unfreezeDAC(List DACIDs, TransactionCallback callback) { + final Function function = new Function( + FUNC_UNFREEZEDAC, + Arrays.asList(new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForUnfreezeDAC(List DACIDs) { + final Function function = new Function( + FUNC_UNFREEZEDAC, + Arrays.asList(new DynamicArray( + Uint256.class, + org.fisco.bcos.sdk.v3.codec.Utils.typeMap(DACIDs, Uint256.class))), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1> getUnfreezeDACInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_UNFREEZEDAC, + Arrays.asList(), + Arrays.>asList(new TypeReference>() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1>( + + convertToNative((List) results.get(0).getValue()) + ); + } + + public static BTSIDAC load(String contractAddress, Client client, CryptoKeyPair credential) { + return new BTSIDAC(contractAddress, client, credential); + } + + public static BTSIDAC deploy(Client client, CryptoKeyPair credential) throws ContractException { + return deploy(BTSIDAC.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), null, null); + } + + public static class ApprovalEventResponse { + public TransactionReceipt.Logs log; + + public String owner; + + public String operator; + + public BigInteger DACID; + } + + public static class ApprovalForAllEventResponse { + public TransactionReceipt.Logs log; + + public String owner; + + public String operator; + + public Boolean isApproval; + } + + public static class BurnEventResponse { + public TransactionReceipt.Logs log; + + public String owner; + + public BigInteger DACID; + } + + public static class CreateCategoryEventResponse { + public TransactionReceipt.Logs log; + + public String creator; + + public BigInteger categoryID; + + public String categoryName; + + public String metadata; + } + + public static class FreezeCategoryEventResponse { + public TransactionReceipt.Logs log; + + public String operator; + + public BigInteger categoryID; + } + + public static class FreezeDACEventResponse { + public TransactionReceipt.Logs log; + + public String operator; + + public BigInteger DACID; + } + + public static class MintEventResponse { + public TransactionReceipt.Logs log; + + public String from; + + public BigInteger categoryID; + + public BigInteger DACID; + + public String to; + + public String extData; + } + + public static class OwnershipTransferredEventResponse { + public TransactionReceipt.Logs log; + + public String previousOwner; + + public String newOwner; + } + + public static class TransferEventResponse { + public TransactionReceipt.Logs log; + + public String from; + + public String to; + + public BigInteger DACID; + + public String extData; + } + + public static class UnfreezeCategoryEventResponse { + public TransactionReceipt.Logs log; + + public String operator; + + public BigInteger categoryID; + } + + public static class UnfreezeDACEventResponse { + public TransactionReceipt.Logs log; + + public String operator; + + public BigInteger DACID; + } +} diff --git a/java/ProxyAdmin.java b/java/ProxyAdmin.java new file mode 100644 index 0000000..5cd8335 --- /dev/null +++ b/java/ProxyAdmin.java @@ -0,0 +1,309 @@ +package com.btsi.contract; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.fisco.bcos.sdk.v3.client.Client; +import org.fisco.bcos.sdk.v3.codec.datatypes.Address; +import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes; +import org.fisco.bcos.sdk.v3.codec.datatypes.Event; +import org.fisco.bcos.sdk.v3.codec.datatypes.Function; +import org.fisco.bcos.sdk.v3.codec.datatypes.Type; +import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple3; +import org.fisco.bcos.sdk.v3.contract.Contract; +import org.fisco.bcos.sdk.v3.crypto.CryptoSuite; +import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair; +import org.fisco.bcos.sdk.v3.model.CryptoType; +import org.fisco.bcos.sdk.v3.model.TransactionReceipt; +import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback; +import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException; + +@SuppressWarnings("unchecked") +public class ProxyAdmin extends Contract { + public static final String[] BINARY_ARRAY = {"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610890806100616000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461011157806399a88ec414610124578063f2fde38b14610144578063f3b7dead1461016457600080fd5b8063204e1c7a14610080578063715018a6146100bc5780637eff275e146100d35780638da5cb5b146100f3575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105f2565b610184565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c857600080fd5b506100d161023c565b005b3480156100df57600080fd5b506100d16100ee366004610616565b6102b9565b3480156100ff57600080fd5b506000546001600160a01b03166100a0565b6100d161011f366004610665565b610343565b34801561013057600080fd5b506100d161013f366004610616565b6103d4565b34801561015057600080fd5b506100d161015f3660046105f2565b61042c565b34801561017057600080fd5b506100a061017f3660046105f2565b610516565b60007f5c60da1b04210c25e1974b6edfcf5bb7c7365b6a88c42319fcbd024464075cc281806001600160a01b0385166101c3635c60da1b60e01b610551565b6040516101d0919061076b565b600060405180830381855afa9150503d806000811461020b576040519150601f19603f3d011682016040523d82523d6000602084013e610210565b606091505b50915091508161021f57600080fd5b808060200190518101906102339190610787565b95945050505050565b6000546001600160a01b0316331461026f5760405162461bcd60e51b8152600401610266906107a4565b60405180910390fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146102e35760405162461bcd60e51b8152600401610266906107a4565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b600060405180830381600087803b15801561032757600080fd5b505af115801561033b573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461036d5760405162461bcd60e51b8152600401610266906107a4565b60405163278f794360e11b81526001600160a01b03841690634f1ef28690349061039d90869086906004016107d9565b6000604051808303818588803b1580156103b657600080fd5b505af11580156103ca573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146103fe5760405162461bcd60e51b8152600401610266906107a4565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe69060240161030d565b6000546001600160a01b031633146104565760405162461bcd60e51b8152600401610266906107a4565b6001600160a01b0381166104bb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610266565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60007ff851a44064d54ebc488774050c771bacc14f01dd7456abacb48978dba9cd92a481806001600160a01b0385166101c36303e1469160e61b5b6040805160048082528183019092526060916000919060208201818036833701905050905060005b60048110156105d3578381600481106105945761059461081b565b1a60f81b8282815181106105aa576105aa61081b565b60200101906001600160f81b031916908160001a905350806105cb81610831565b915050610579565b5092915050565b6001600160a01b03811681146105ef57600080fd5b50565b60006020828403121561060457600080fd5b813561060f816105da565b9392505050565b6000806040838503121561062957600080fd5b8235610634816105da565b91506020830135610644816105da565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561067a57600080fd5b8335610685816105da565b92506020840135610695816105da565b9150604084013567ffffffffffffffff808211156106b257600080fd5b818601915086601f8301126106c657600080fd5b8135818111156106d8576106d861064f565b604051601f8201601f19908116603f011681019083821181831017156107005761070061064f565b8160405282815289602084870101111561071957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60005b8381101561075657818101518382015260200161073e565b83811115610765576000848401525b50505050565b6000825161077d81846020870161073b565b9190910192915050565b60006020828403121561079957600080fd5b815161060f816105da565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60018060a01b0383168152604060208201526000825180604084015261080681606085016020870161073b565b601f01601f1916919091016060019392505050565b634e487b7160e01b600052603260045260246000fd5b600060001982141561085357634e487b7160e01b600052601160045260246000fd5b506001019056fea2646970667358221220f476616c8655ddb86a4e0eb97815db07902ffd52bfb5216954f55b76f9b126b764736f6c634300080b0033"}; + + public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY); + + public static final String[] SM_BINARY_ARRAY = {"608060405234801561001057600080fd5b50600080546001600160a01b031916339081178255604051909182917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908290a350610895806100616000396000f3fe60806040526004361061007b5760003560e01c8063d366253d1161004e578063d366253d14610118578063d42d0f4f14610138578063d86e29e214610158578063db1fc60c1461016d57600080fd5b806316cad12a146100805780635089e2c8146100a25780635defeee3146100d85780636c57245d146100f8575b600080fd5b34801561008c57600080fd5b506100a061009b3660046105f7565b610180565b005b3480156100ae57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b3480156100e457600080fd5b506100bc6100f33660046105f7565b610275565b34801561010457600080fd5b506100bc6101133660046105f7565b61032d565b34801561012457600080fd5b506100a061013336600461061b565b61036b565b34801561014457600080fd5b506100a061015336600461061b565b6103f6565b34801561016457600080fd5b506100a061044f565b6100a061017b36600461066a565b6104c4565b6000546001600160a01b031633146101b457604051636381e58960e11b81526004016101ab90610740565b60405180910390fd5b6001600160a01b03811661021a57604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101ab565b600080546040516001600160a01b03808516939216917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60007fd5696bb175b326f8ce5dbe1ba5f41da312aed21a7f90cc42d40b8a20f2004c7181806001600160a01b0385166102b463d5696bb160e01b610556565b6040516102c191906107a5565b600060405180830381855afa9150503d80600081146102fc576040519150601f19603f3d011682016040523d82523d6000602084013e610301565b606091505b50915091508161031057600080fd5b8080602001905181019061032491906107c1565b95945050505050565b60007ff15228001de5006b7e364229f9fb3c2f54a1e8f2aa8887d686ce09f2f04fc23181806001600160a01b0385166102b4621e2a4560eb1b610556565b6000546001600160a01b0316331461039657604051636381e58960e11b81526004016101ab90610740565b604051633a2a322560e21b81526001600160a01b03828116600483015283169063e8a8c894906024015b600060405180830381600087803b1580156103da57600080fd5b505af11580156103ee573d6000803e3d6000fd5b505050505050565b6000546001600160a01b0316331461042157604051636381e58960e11b81526004016101ab90610740565b60405163333b0add60e11b81526001600160a01b03828116600483015283169063667615ba906024016103c0565b6000546001600160a01b0316331461047a57604051636381e58960e11b81526004016101ab90610740565b600080546040516001600160a01b03909116907f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146104ef57604051636381e58960e11b81526004016101ab90610740565b60405163207fa8b960e01b81526001600160a01b0384169063207fa8b990349061051f90869086906004016107de565b6000604051808303818588803b15801561053857600080fd5b505af115801561054c573d6000803e3d6000fd5b5050505050505050565b6040805160048082528183019092526060916000919060208201818036833701905050905060005b60048110156105d85783816004811061059957610599610820565b1a60f81b8282815181106105af576105af610820565b60200101906001600160f81b031916908160001a905350806105d081610836565b91505061057e565b5092915050565b6001600160a01b03811681146105f457600080fd5b50565b60006020828403121561060957600080fd5b8135610614816105df565b9392505050565b6000806040838503121561062e57600080fd5b8235610639816105df565b91506020830135610649816105df565b809150509250929050565b63b95aa35560e01b600052604160045260246000fd5b60008060006060848603121561067f57600080fd5b833561068a816105df565b9250602084013561069a816105df565b9150604084013567ffffffffffffffff808211156106b757600080fd5b818601915086601f8301126106cb57600080fd5b8135818111156106dd576106dd610654565b604051601f8201601f19908116603f0116810190838211818310171561070557610705610654565b8160405282815289602084870101111561071e57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60005b83811015610790578181015183820152602001610778565b8381111561079f576000848401525b50505050565b600082516107b7818460208701610775565b9190910192915050565b6000602082840312156107d357600080fd5b8151610614816105df565b60018060a01b0383168152604060208201526000825180604084015261080b816060850160208701610775565b601f01601f1916919091016060019392505050565b63b95aa35560e01b600052603260045260246000fd5b60006000198214156108585763b95aa35560e01b600052601160045260246000fd5b506001019056fea26469706673582212208150299ee9d681a151e754e5c2cb5d848c173386a74593edd16e82b8222bcb0e64736f6c634300080b0033"}; + + public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY); + + public static final String[] ABI_ARRAY = {"[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}]"}; + + public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY); + + public static final String FUNC_CHANGEPROXYADMIN = "changeProxyAdmin"; + + public static final String FUNC_GETPROXYADMIN = "getProxyAdmin"; + + public static final String FUNC_GETPROXYIMPLEMENTATION = "getProxyImplementation"; + + public static final String FUNC_OWNER = "owner"; + + public static final String FUNC_RENOUNCEOWNERSHIP = "renounceOwnership"; + + public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership"; + + public static final String FUNC_UPGRADE = "upgrade"; + + public static final String FUNC_UPGRADEANDCALL = "upgradeAndCall"; + + public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred", + Arrays.>asList(new TypeReference
(true) {}, new TypeReference
(true) {})); + ; + + protected ProxyAdmin(String contractAddress, Client client, CryptoKeyPair credential) { + super(getBinary(client.getCryptoSuite()), contractAddress, client, credential); + } + + public static String getBinary(CryptoSuite cryptoSuite) { + return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY); + } + + public static String getABI() { + return ABI; + } + + public List getOwnershipTransferredEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (Contract.EventValuesWithLog eventValues : valueList) { + OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue(); + typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public TransactionReceipt changeProxyAdmin(String proxy, String newAdmin) { + final Function function = new Function( + FUNC_CHANGEPROXYADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAdmin)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String changeProxyAdmin(String proxy, String newAdmin, TransactionCallback callback) { + final Function function = new Function( + FUNC_CHANGEPROXYADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAdmin)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForChangeProxyAdmin(String proxy, String newAdmin) { + final Function function = new Function( + FUNC_CHANGEPROXYADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAdmin)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple2 getChangeProxyAdminInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_CHANGEPROXYADMIN, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple2( + + (String) results.get(0).getValue(), + (String) results.get(1).getValue() + ); + } + + public String getProxyAdmin(String proxy) throws ContractException { + final Function function = new Function(FUNC_GETPROXYADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy)), + Arrays.>asList(new TypeReference
() {})); + return executeCallWithSingleValueReturn(function, String.class); + } + + public String getProxyImplementation(String proxy) throws ContractException { + final Function function = new Function(FUNC_GETPROXYIMPLEMENTATION, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy)), + Arrays.>asList(new TypeReference
() {})); + return executeCallWithSingleValueReturn(function, String.class); + } + + public String owner() throws ContractException { + final Function function = new Function(FUNC_OWNER, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + return executeCallWithSingleValueReturn(function, String.class); + } + + public TransactionReceipt renounceOwnership() { + final Function function = new Function( + FUNC_RENOUNCEOWNERSHIP, + Arrays.asList(), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String renounceOwnership(TransactionCallback callback) { + final Function function = new Function( + FUNC_RENOUNCEOWNERSHIP, + Arrays.asList(), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForRenounceOwnership() { + final Function function = new Function( + FUNC_RENOUNCEOWNERSHIP, + Arrays.asList(), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public TransactionReceipt transferOwnership(String newOwner) { + final Function function = new Function( + FUNC_TRANSFEROWNERSHIP, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String transferOwnership(String newOwner, TransactionCallback callback) { + final Function function = new Function( + FUNC_TRANSFEROWNERSHIP, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForTransferOwnership(String newOwner) { + final Function function = new Function( + FUNC_TRANSFEROWNERSHIP, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getTransferOwnershipInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_TRANSFEROWNERSHIP, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (String) results.get(0).getValue() + ); + } + + public TransactionReceipt upgrade(String proxy, String implementation) { + final Function function = new Function( + FUNC_UPGRADE, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(implementation)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String upgrade(String proxy, String implementation, TransactionCallback callback) { + final Function function = new Function( + FUNC_UPGRADE, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(implementation)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForUpgrade(String proxy, String implementation) { + final Function function = new Function( + FUNC_UPGRADE, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(implementation)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple2 getUpgradeInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_UPGRADE, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple2( + + (String) results.get(0).getValue(), + (String) results.get(1).getValue() + ); + } + + public TransactionReceipt upgradeAndCall(String proxy, String implementation, byte[] data) { + final Function function = new Function( + FUNC_UPGRADEANDCALL, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(implementation), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String upgradeAndCall(String proxy, String implementation, byte[] data, + TransactionCallback callback) { + final Function function = new Function( + FUNC_UPGRADEANDCALL, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(implementation), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForUpgradeAndCall(String proxy, String implementation, + byte[] data) { + final Function function = new Function( + FUNC_UPGRADEANDCALL, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(proxy), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(implementation), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple3 getUpgradeAndCallInput( + TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_UPGRADEANDCALL, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference
() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple3( + + (String) results.get(0).getValue(), + (String) results.get(1).getValue(), + (byte[]) results.get(2).getValue() + ); + } + + public static ProxyAdmin load(String contractAddress, Client client, CryptoKeyPair credential) { + return new ProxyAdmin(contractAddress, client, credential); + } + + public static ProxyAdmin deploy(Client client, CryptoKeyPair credential) throws + ContractException { + return deploy(ProxyAdmin.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), null, null); + } + + public static class OwnershipTransferredEventResponse { + public TransactionReceipt.Logs log; + + public String previousOwner; + + public String newOwner; + } +} diff --git a/java/TransparentUpgradeableProxy.java b/java/TransparentUpgradeableProxy.java new file mode 100644 index 0000000..61bb188 --- /dev/null +++ b/java/TransparentUpgradeableProxy.java @@ -0,0 +1,307 @@ +package com.btsi.contract; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import org.fisco.bcos.sdk.v3.client.Client; +import org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder; +import org.fisco.bcos.sdk.v3.codec.datatypes.Address; +import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes; +import org.fisco.bcos.sdk.v3.codec.datatypes.Event; +import org.fisco.bcos.sdk.v3.codec.datatypes.Function; +import org.fisco.bcos.sdk.v3.codec.datatypes.Type; +import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1; +import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2; +import org.fisco.bcos.sdk.v3.contract.Contract; +import org.fisco.bcos.sdk.v3.crypto.CryptoSuite; +import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair; +import org.fisco.bcos.sdk.v3.model.CryptoType; +import org.fisco.bcos.sdk.v3.model.TransactionReceipt; +import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback; +import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException; + +@SuppressWarnings("unchecked") +public class TransparentUpgradeableProxy extends Contract { + public static final String[] BINARY_ARRAY = {"608060405260405162000a0438038062000a0483398101604081905262000026916200021f565b82816200003382620000c1565b805115620000aa576000826001600160a01b031682604051620000579190620002ff565b600060405180830381855af49150503d806000811462000094576040519150601f19603f3d011682016040523d82523d6000602084013e62000099565b606091505b5050905080620000a857600080fd5b505b50620000b890508262000184565b50505062000343565b620000d781620001b360201b620003501760201c565b6200014e5760405162461bcd60e51b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e746160448201527f74696f6e206973206e6f74206120636f6e747261637400000000000000000000606482015260840160405180910390fd5b60006200017d60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd6200031d565b9190915550565b60006200017d60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61046200031d565b3b151590565b80516001600160a01b0381168114620001d157600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000209578181015183820152602001620001ef565b8381111562000219576000848401525b50505050565b6000806000606084860312156200023557600080fd5b6200024084620001b9565b92506200025060208501620001b9565b60408501519092506001600160401b03808211156200026e57600080fd5b818601915086601f8301126200028357600080fd5b815181811115620002985762000298620001d6565b604051601f8201601f19908116603f01168101908382118183101715620002c357620002c3620001d6565b81604052828152896020848701011115620002dd57600080fd5b620002f0836020830160208801620001ec565b80955050505050509250925092565b6000825162000313818460208701620001ec565b9190910192915050565b6000828210156200033e57634e487b7160e01b600052601160045260246000fd5b500390565b6106b180620003536000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046105a1565b610118565b61005b6100933660046105c3565b61014d565b3480156100a457600080fd5b506100ad6101f4565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046105a1565b61022f565b3480156100f557600080fd5b506100ad610325565b610106610356565b6101166101116103f0565b610425565b565b610120610449565b6001600160a01b0316336001600160a01b031614156101455761014281610477565b50565b6101426100fe565b610155610449565b6001600160a01b0316336001600160a01b031614156101e75761017783610477565b6000836001600160a01b03168383604051610193929190610646565b600060405180830381855af49150503d80600081146101ce576040519150601f19603f3d011682016040523d82523d6000602084013e6101d3565b606091505b50509050806101e157600080fd5b50505050565b6101ef6100fe565b505050565b60006101fe610449565b6001600160a01b0316336001600160a01b031614156102245761021f6103f0565b905090565b61022c6100fe565b90565b610237610449565b6001600160a01b0316336001600160a01b03161415610145576001600160a01b0381166102d15760405162461bcd60e51b815260206004820152603a60248201527f5472616e73706172656e745570677261646561626c6550726f78793a206e657760448201527f2061646d696e20697320746865207a65726f206164647265737300000000000060648201526084015b60405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6102fa610449565b604080516001600160a01b03928316815291841660208301520160405180910390a1610142816104b7565b600061032f610449565b6001600160a01b0316336001600160a01b031614156102245761021f610449565b3b151590565b61035e610449565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4016102c8565b60008061041e60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610656565b5492915050565b3660008037600080366000845af43d6000803e808015610444573d6000f35b3d6000fd5b60008061041e60017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610656565b610480816104eb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006104e460017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104610656565b9190915550565b803b6105585760405162461bcd60e51b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e74616044820152751d1a5bdb881a5cc81b9bdd08184818dbdb9d1c9858dd60521b60648201526084016102c8565b60006104e460017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd610656565b80356001600160a01b038116811461059c57600080fd5b919050565b6000602082840312156105b357600080fd5b6105bc82610585565b9392505050565b6000806000604084860312156105d857600080fd5b6105e184610585565b9250602084013567ffffffffffffffff808211156105fe57600080fd5b818601915086601f83011261061257600080fd5b81358181111561062157600080fd5b87602082850101111561063357600080fd5b6020830194508093505050509250925092565b8183823760009101908152919050565b60008282101561067657634e487b7160e01b600052601160045260246000fd5b50039056fea26469706673582212207c57174660757dfbcd1426e042490ca015720bfe1ebc992bc26914f05fc7264f64736f6c634300080b0033"}; + + public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY); + + public static final String[] SM_BINARY_ARRAY = {"608060405260405162000a0838038062000a08833981016040819052620000269162000220565b82816200003382620000c1565b805115620000aa576000826001600160a01b03168260405162000057919062000300565b600060405180830381855af49150503d806000811462000094576040519150601f19603f3d011682016040523d82523d6000602084013e62000099565b606091505b5050905080620000a857600080fd5b505b50620000b890508262000185565b50505062000344565b620000d781620001b460201b620003511760201c565b6200014f57604051636381e58960e11b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e746160448201527f74696f6e206973206e6f74206120636f6e747261637400000000000000000000606482015260840160405180910390fd5b60006200017e60017fc491a4bc7f22df3d1fef738d9a3c4c3d72de30f6f5b4b051104051df906485f76200031e565b9190915550565b60006200017e60017f1739bb05de6bfb1e46d9ecd038d53871bf808b66c6cb0c157e00eb42c2717ebb6200031e565b3b151590565b80516001600160a01b0381168114620001d257600080fd5b919050565b63b95aa35560e01b600052604160045260246000fd5b60005b838110156200020a578181015183820152602001620001f0565b838111156200021a576000848401525b50505050565b6000806000606084860312156200023657600080fd5b6200024184620001ba565b92506200025160208501620001ba565b60408501519092506001600160401b03808211156200026f57600080fd5b818601915086601f8301126200028457600080fd5b815181811115620002995762000299620001d7565b604051601f8201601f19908116603f01168101908382118183101715620002c457620002c4620001d7565b81604052828152896020848701011115620002de57600080fd5b620002f1836020830160208801620001ed565b80955050505050509250925092565b6000825162000314818460208701620001ed565b9190910192915050565b6000828210156200033f5763b95aa35560e01b600052601160045260246000fd5b500390565b6106b480620003546000396000f3fe60806040526004361061004e5760003560e01c8063207fa8b914610065578063667615ba14610078578063d5696bb114610098578063e8a8c894146100c9578063f1522800146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b61005b6100733660046105a4565b610118565b34801561008457600080fd5b5061005b610093366004610627565b6101bf565b3480156100a457600080fd5b506100ad6102c1565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e4366004610627565b6102fc565b3480156100f557600080fd5b506100ad610326565b610106610357565b6101166101116103f2565b610427565b565b61012061044b565b6001600160a01b0316336001600160a01b031614156101b25761014283610479565b6000836001600160a01b0316838360405161015e929190610649565b600060405180830381855af49150503d8060008114610199576040519150601f19603f3d011682016040523d82523d6000602084013e61019e565b606091505b50509050806101ac57600080fd5b50505050565b6101ba6100fe565b505050565b6101c761044b565b6001600160a01b0316336001600160a01b031614156102b9576001600160a01b03811661026257604051636381e58960e11b815260206004820152603a60248201527f5472616e73706172656e745570677261646561626c6550726f78793a206e657760448201527f2061646d696e20697320746865207a65726f206164647265737300000000000060648201526084015b60405180910390fd5b7f7fff140a2090a44f84000f793b3e2c26fd84de1b51418e5734481ecebf9fa41961028b61044b565b604080516001600160a01b03928316815291841660208301520160405180910390a16102b6816104b9565b50565b6102b66100fe565b60006102cb61044b565b6001600160a01b0316336001600160a01b031614156102f1576102ec6103f2565b905090565b6102f96100fe565b90565b61030461044b565b6001600160a01b0316336001600160a01b031614156102b9576102b681610479565b600061033061044b565b6001600160a01b0316336001600160a01b031614156102f1576102ec61044b565b3b151590565b61035f61044b565b6001600160a01b0316336001600160a01b0316141561011657604051636381e58960e11b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a401610259565b60008061042060017fc491a4bc7f22df3d1fef738d9a3c4c3d72de30f6f5b4b051104051df906485f7610659565b5492915050565b3660008037600080366000845af43d6000803e808015610446573d6000f35b3d6000fd5b60008061042060017f1739bb05de6bfb1e46d9ecd038d53871bf808b66c6cb0c157e00eb42c2717ebb610659565b610482816104ed565b6040516001600160a01b038216907f35c786da035a401a18e1a5dade4bdb4c07d82bdd5c15bef8561dbf76ad4db25d90600090a250565b60006104e660017f1739bb05de6bfb1e46d9ecd038d53871bf808b66c6cb0c157e00eb42c2717ebb610659565b9190915550565b803b61055b57604051636381e58960e11b815260206004820152603660248201527f5570677261646561626c6550726f78793a206e657720696d706c656d656e74616044820152751d1a5bdb881a5cc81b9bdd08184818dbdb9d1c9858dd60521b6064820152608401610259565b60006104e660017fc491a4bc7f22df3d1fef738d9a3c4c3d72de30f6f5b4b051104051df906485f7610659565b80356001600160a01b038116811461059f57600080fd5b919050565b6000806000604084860312156105b957600080fd5b6105c284610588565b9250602084013567ffffffffffffffff808211156105df57600080fd5b818601915086601f8301126105f357600080fd5b81358181111561060257600080fd5b87602082850101111561061457600080fd5b6020830194508093505050509250925092565b60006020828403121561063957600080fd5b61064282610588565b9392505050565b8183823760009101908152919050565b6000828210156106795763b95aa35560e01b600052601160045260246000fd5b50039056fea2646970667358221220884bc9cfaa648afd459182fc757138c9f04d80934633cb9aad43098a7856cbd564736f6c634300080b0033"}; + + public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY); + + public static final String[] ABI_ARRAY = {"[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_adm\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]"}; + + public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY); + + public static final String FUNC_ADMIN = "admin"; + + public static final String FUNC_CHANGEADMIN = "changeAdmin"; + + public static final String FUNC_IMPLEMENTATION = "implementation"; + + public static final String FUNC_UPGRADETO = "upgradeTo"; + + public static final String FUNC_UPGRADETOANDCALL = "upgradeToAndCall"; + + public static final Event ADMINCHANGED_EVENT = new Event("AdminChanged", + Arrays.>asList(new TypeReference
() {}, new TypeReference
() {})); + ; + + public static final Event UPGRADED_EVENT = new Event("Upgraded", + Arrays.>asList(new TypeReference
(true) {})); + ; + + protected TransparentUpgradeableProxy(String contractAddress, Client client, + CryptoKeyPair credential) { + super(getBinary(client.getCryptoSuite()), contractAddress, client, credential); + } + + public static String getBinary(CryptoSuite cryptoSuite) { + return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY); + } + + public static String getABI() { + return ABI; + } + + public List getAdminChangedEvents( + TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(ADMINCHANGED_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (Contract.EventValuesWithLog eventValues : valueList) { + AdminChangedEventResponse typedResponse = new AdminChangedEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.previousAdmin = (String) eventValues.getNonIndexedValues().get(0).getValue(); + typedResponse.newAdmin = (String) eventValues.getNonIndexedValues().get(1).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public List getUpgradedEvents(TransactionReceipt transactionReceipt) { + List valueList = extractEventParametersWithLog(UPGRADED_EVENT, transactionReceipt); + ArrayList responses = new ArrayList(valueList.size()); + for (Contract.EventValuesWithLog eventValues : valueList) { + UpgradedEventResponse typedResponse = new UpgradedEventResponse(); + typedResponse.log = eventValues.getLog(); + typedResponse.implementation = (String) eventValues.getIndexedValues().get(0).getValue(); + responses.add(typedResponse); + } + return responses; + } + + public TransactionReceipt admin() { + final Function function = new Function( + FUNC_ADMIN, + Arrays.asList(), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String admin(TransactionCallback callback) { + final Function function = new Function( + FUNC_ADMIN, + Arrays.asList(), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForAdmin() { + final Function function = new Function( + FUNC_ADMIN, + Arrays.asList(), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getAdminOutput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getOutput(); + final Function function = new Function(FUNC_ADMIN, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (String) results.get(0).getValue() + ); + } + + public TransactionReceipt changeAdmin(String newAdmin) { + final Function function = new Function( + FUNC_CHANGEADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAdmin)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String changeAdmin(String newAdmin, TransactionCallback callback) { + final Function function = new Function( + FUNC_CHANGEADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAdmin)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForChangeAdmin(String newAdmin) { + final Function function = new Function( + FUNC_CHANGEADMIN, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAdmin)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getChangeAdminInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_CHANGEADMIN, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (String) results.get(0).getValue() + ); + } + + public TransactionReceipt implementation() { + final Function function = new Function( + FUNC_IMPLEMENTATION, + Arrays.asList(), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String implementation(TransactionCallback callback) { + final Function function = new Function( + FUNC_IMPLEMENTATION, + Arrays.asList(), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForImplementation() { + final Function function = new Function( + FUNC_IMPLEMENTATION, + Arrays.asList(), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getImplementationOutput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getOutput(); + final Function function = new Function(FUNC_IMPLEMENTATION, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (String) results.get(0).getValue() + ); + } + + public TransactionReceipt upgradeTo(String newImplementation) { + final Function function = new Function( + FUNC_UPGRADETO, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newImplementation)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String upgradeTo(String newImplementation, TransactionCallback callback) { + final Function function = new Function( + FUNC_UPGRADETO, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newImplementation)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForUpgradeTo(String newImplementation) { + final Function function = new Function( + FUNC_UPGRADETO, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newImplementation)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple1 getUpgradeToInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_UPGRADETO, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple1( + + (String) results.get(0).getValue() + ); + } + + public TransactionReceipt upgradeToAndCall(String newImplementation, byte[] data) { + final Function function = new Function( + FUNC_UPGRADETOANDCALL, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newImplementation), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)), + Collections.>emptyList(), 0); + return executeTransaction(function); + } + + public String upgradeToAndCall(String newImplementation, byte[] data, + TransactionCallback callback) { + final Function function = new Function( + FUNC_UPGRADETOANDCALL, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newImplementation), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)), + Collections.>emptyList(), 0); + return asyncExecuteTransaction(function, callback); + } + + public String getSignedTransactionForUpgradeToAndCall(String newImplementation, byte[] data) { + final Function function = new Function( + FUNC_UPGRADETOANDCALL, + Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newImplementation), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)), + Collections.>emptyList(), 0); + return createSignedTransaction(function); + } + + public Tuple2 getUpgradeToAndCallInput(TransactionReceipt transactionReceipt) { + String data = transactionReceipt.getInput().substring(10); + final Function function = new Function(FUNC_UPGRADETOANDCALL, + Arrays.asList(), + Arrays.>asList(new TypeReference
() {}, new TypeReference() {})); + List results = this.functionReturnDecoder.decode(data, function.getOutputParameters()); + return new Tuple2( + + (String) results.get(0).getValue(), + (byte[]) results.get(1).getValue() + ); + } + + public static TransparentUpgradeableProxy load(String contractAddress, Client client, + CryptoKeyPair credential) { + return new TransparentUpgradeableProxy(contractAddress, client, credential); + } + + public static TransparentUpgradeableProxy deploy(Client client, CryptoKeyPair credential, + String _logic, String _adm, byte[] _data) throws ContractException { + byte[] encodedConstructor = FunctionEncoder.encodeConstructor(Arrays.asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(_logic), + new org.fisco.bcos.sdk.v3.codec.datatypes.Address(_adm), + new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(_data))); + return deploy(TransparentUpgradeableProxy.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), encodedConstructor, null); + } + + public static class AdminChangedEventResponse { + public TransactionReceipt.Logs log; + + public String previousAdmin; + + public String newAdmin; + } + + public static class UpgradedEventResponse { + public TransactionReceipt.Logs log; + + public String implementation; + } +} -- Gitee