Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

区块链的一大里程碑!
2025-03-16 补充
Altcoin
智能合约是以太坊的灵魂
千万小心:DAO 1.0 的实践已经失败!
“爱的证明”(Proof of Love, PoL)是一种三管齐下的新型治理共识与文明框架:扬爱抑恨的伦理治理、通过 SCC0 协议完成的产品或服务的公共属性治理、公共福利与公共基金的治理。
https://www.pooltogether.us/
Rejecting Technological Capitalization to Create a New Human Civilization
区块链钱包其实就是你的私人银行
这是根据旧世界而做的一次无功而返的尝试!
一个直接颠覆ERC-20的通证标准




钱包是区块链的入口,你还不下载一个?
比特币只有个币,而以太坊在它问世后五年,就已经一纸白皮书从技术上超越了它。但16年来,比特币就是牛币!它一直高居区块链市值榜首。 2025年1月7日,比特币市值占比高达56.4%,排名第二的 ETH 市值占比仅为12.3%! 耐人寻味不是吗?
看过上一节内容,你就会知道我的结论仍然是:失败。


借款营收 = 存款利息
其中:
借款营收 = 借款总额 * 借款利率 * 时间
存款利息 = 存款总额 * 存款利率 * 时间
=>
借款总额 * 借款利率 * 时间 = 存款总额 * 存款利率 * 时间
=>
借款总额 * 借款利率 = 存款总额 * 存款利率以太坊:下一代智能合约和去中心化应用平台




































require(
receiver.onFlashLoan(msg.sender, token, amount, fee, data)
== keccak256("ERC3156FlashBorrower.onFlashLoan"),
"IERC3156: Callback failed"
);
回调之后,该flashLoan函数必须从贷款接收方提取回金额+手续费用,如果失败,则将交易回滚(所有操作一笔勾销)。
| interface IERC3156FlashLender {
function maxFlashLoan(
address token
) external view returns (uint256);
function flashFee(
address token,
uint256 amount
) external view returns (uint256);
function flashLoan(
IERC3156FlashBorrower receiver,
address token,
uint256 amount,
bytes calldata data
) external returns (bool);
}
回调之后,该flashLoan函数必须从贷款接收方提取回金额+手续费用,如果失败,则将交易回滚。
接口IERC3156FlashBorrower
借款方需要实现IERC3156FlashBorrower接口。
该接口仅定义了一个方法即onFlashLoan回调。为了避免交易回滚,在onFlashLoan实现代码中必须授权“金额+手续费”给msg.sender。
| interface IERC3156FlashBorrower {
function onFlashLoan(
address initiator,
address token,
uint256 amount,
uint256 fee,
bytes calldata data
) external returns (bytes32);
}
请注意,通证的类型没关系。在下面的示例中,我们将使用ERC-20,但也可以使用其它通证标准。
EIP-3156闪电贷合约示例
在下面的示例中,我们将在ERC-20合约中实现闪电贷功能。我们将根据需要铸造新的通证,然后在结束时销毁。
借款方合约
下面是借款方合约示例代码:
| function flashBorrow(
address token,
uint256 amount,
bytes memory data
) public {
uint256 allowance = IERC20(token).allowance(
address(this),
address(lender)
);
uint256 fee = lender.flashFee(token, amount);
uint256 repayment = amount + fee;
IERC20(token).approve(
address(lender),
allowance + repayment
);
lender.flashLoan(this, token, amount, data);
}
我们实现了flashBorrow功能。lender指向在部署时定义的IERC3156FlashLender合约。
我们首先授权通证给贷方以偿还总金额。还款额计算为“贷款额+手续费”。我们可以通过调用flashFee方法来获取手续费的具体数额。
最后,我们执行flashLoan方法。
当然,现在我们还需要调用借款方的onFlashLoan回调函数。在示例中,我们执行如下操作:
验证交易发起方确实是贷方
验证闪电贷的发起人确实是我们的合约
返回预定义的哈希值以验证成功的闪电贷
如果需要,我们可以根据传入的额外数据在此处实现其他逻辑。
代码如下所示:
| function onFlashLoan(
address initiator,
address token,
uint256 amount,
uint256 fee,
bytes calldata data
) external override returns(bool) {
require(
msg.sender == address(lender),
"FlashBorrower: Untrusted lender"
);
require(
initiator == address(this),
"FlashBorrower: Untrusted loan initiator"
);
// optionally check data here if wanted
return keccak256("ERC3156FlashBorrower.onFlashLoan");
}
现在,我们可以进入贷方实现,在其中执行实际的闪电贷逻辑。
5.2 贷款方合约代码
让我们从maxFlashLoan函数开始:
| function maxFlashLoan(
address token
) external view override returns (uint256) {
return type(uint256).max - totalSupply();
}
该函数通常可以返回账户余额,但是由于我们新铸造了要求的通证,因此可以允许闪电贷直到totalSupply溢出。
接下来我们让flashFee函数返回总贷款额的0.1%,即手续费为总额的千分之一:
| function flashFee(
address token,
uint256 amount
) public view override returns (uint256) {
require(
token == address(this),
"FlashMinter: Unsupported currency"
);
uint256 fee = 1000; // 0.1 %.
return amount * fee / 10000;
}
借款方和贷款方都需要调用此方法来决定闪电贷的手续费具体数额。
现在我们终于可以实现flashLoan功能了。在下面的代码中,我们将:
向借款人铸造所要求的金额
执行onFlashLoan回调并验证其返回值
检查还款是否被批准
减少还款额并将其销毁
代码如下:
| function flashLoan(
IERC3156FlashBorrower receiver,
address token,
uint256 amount,
bytes calldata data
) external override returns (bool) {
require(token == address(this), "FlashMinter: Unsupported currency");
uint256 fee = flashFee(token, amount);
_mint(address(receiver), amount);
bytes32 CALLBACK_SUCCESS = keccak256("ERC3156FlashBorrower.onFlashLoan");
require(
receiver.onFlashLoan(msg.sender, token, amount, fee, data) == CALLBACK_SUCCESS,
"FlashMinter: Callback failed"
);
uint256 _allowance = allowance(address(receiver), address(this));
require(_allowance >= (amount + fee), "FlashMinter: Repay not approved");
_approve(address(receiver), address(this), _allowance - (amount + fee));
_burn(address(receiver), amount + fee);
return true;
}
你可以在这里https://github.com/albertocuestacanada/ERC3156)查看完整的EIP3156合约示例代码。
6、兼容现有闪电贷协议的EIP-3156封装
EIP-3156封装器是个有趣的项目。 它可以将现存的闪电贷协议封装为EIP-3156兼容接口,目前已经支持如下协议:
dYdX
Uniswap
Aave
Yield
其中dYdX的封装器已经部署到以太坊主网。
原文链接:https://soliditydeveloper.com/eip-3156
参考:http://blog.hubwiz.com/2021/05/25/eip-3156-intro/









稳定币是一个地地道道的伪概念!因为它的价格根本就稳定不了!
interface IUniversalIdentity {
/// @notice 向机器人的身份添加一个规则,表示机器人同意遵循该规则。
/// @param rule 表示机器人同意遵循的规则的动态字节数组。
/// @dev 该规则应该来源于机器人打算加入的 IUniversalCharter 合约中定义的规则集。
/// @dev 这个函数应该由合约实现,用以添加机器人打算遵循的规则。
function addRule(bytes memory rule) external;
/// @notice 从机器人的身份中移除一个规则。
/// @param rule 表示机器人不再同意遵循的规则的动态字节数组。
/// @dev 这个函数应该由合约实现,用以移除机器人不打算遵循的规则。
function removeRule(bytes memory rule) external;
/// @notice 检查机器人是否遵守特定规则。
/// @param rule 要检查的规则。
/// @return bool 如果机器人遵守该规则,则返回 true。
/// @dev 这个函数必须由合约实现以进行合规性验证。
function checkCompliance(bytes memory rule) external view returns (bool);
/// @dev 当规则被添加到机器人的身份时触发的事件。
event RuleAdded(bytes rule);
/// @dev 当规则从机器人的身份中移除时触发的事件。
event RuleRemoved(bytes rule);
/// @dev 当订阅了章程(Charter)时触发的事件。
event SubscribedToCharter(address indexed charter);
/// @dev 当取消订阅章程时触发的事件。
event UnsubscribedFromCharter(address indexed charter);
}
interface IUniversalCharter {
// 定义用户类型的枚举。
enum UserType { Human, Robot }
/// @notice 一个用户(人或机器人)通过同意一个规则集而注册入系统。
/// @param userType 用户的类型。
/// @param ruleSet 用户同意遵循的各个规则的数组。
/// @dev 这个函数必须由使用此接口的合约实现。
/// @dev 实现的合约必须确保在将用户注册到系统之前,通过调用 `checkCompliance` 验证用户是否遵守指定的规则集。
function registerUser(UserType userType, bytes[] memory ruleSet) external;
/// @notice 允许用户(人或机器人)退出系统
/// @dev 这个函数必须仅限于用户本人调用(通过 `msg.sender`)。
/// @dev 实现的合约必须确保用户在成功退出系统之前遵守了所有必要规则,通过调用 `checkCompliance` 进行验证。
function leaveSystem() external;
/// @notice 检查用户(人或机器人)是否遵守系统的规则。
/// @param user 用户(人或机器人)的地址。
/// @param ruleSet 要验证的各个规则的数组。
/// @return bool 如果用户遵守规则集,则返回 true。
/// @dev 这个函数应该调用用户的 IUniversalIdentity 合约的 `checkCompliance` 函数逐个检查规则。
/// @dev 这个函数必须由合约实现以进行合规性验证。
function checkCompliance(address user, bytes[] memory ruleSet) external view returns (bool);
/// @notice 更新规则集。
/// @param newRuleSet 替换现有规则的新规则数组。
/// @dev 这个函数应该限制为授权的用户(例如,合约所有者)。
function updateRuleSet(bytes[] memory newRuleSet) external;
/// @notice 终止合约,阻止任何进一步的注册或交互。
/// @dev 这个函数应该限制为授权的用户(例如,合约所有者)。
/// @dev 这个函数应该由合约实现。
function terminateContract() external;
/// @dev 当用户通过同意一组规则加入系统时触发的事件。
event UserRegistered(address indexed user, UserType userType, bytes[] ruleSet);
/// @dev 当用户在履行义务后成功离开系统时触发的事件。
event UserLeft(address indexed user);
/// @dev 当用户的合规性随规则集得到验证时触发的事件。
event ComplianceChecked(address indexed user, bytes[] ruleSet);
/// @dev 当规则集被更新时触发的事件。
event RuleSetUpdated(bytes[] newRuleSet, address updatedBy);
}// SPDX-License-Identifier: CC0-1.0
pragma solidity ^0.8.19;
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import { UniversalCharter } from "./UniversalCharter.sol";
// 接口
import { IUniversalIdentity } from "./interface/IUniversalIdentity.sol";
import { IUniversalCharter } from "./interface/IUniversalCharter.sol";
/// @title UniversalIdentity
/// @notice UniversalIdentity 合约用于管理机器人的身份。
contract UniversalIdentity is IUniversalIdentity, OwnableUpgradeable {
/// @notice 当前合约实现的版本标识
string public constant VERSION = "v0.0.1";
/// @notice 存储机器人同意遵循的规则的映射
mapping(bytes => bool) private robotRules;
/// @notice 存储每个规则的链外合规状态的映射
mapping(bytes => bool) private complianceStatus;
/// @notice 跟踪机器人订阅的章程
mapping(address => bool) private subscribedCharters;
/// @notice 自定义错误,以节省回滚时的 gas
error RuleNotAgreed(bytes rule);
error RuleNotCompliant(bytes rule);
error RuleAlreadyAdded(bytes rule);
/// @dev 检查合规性时发出的事件
/// @param updater 合规性更新者的地址(合约所有者)
/// @param rule 被检查的规则
event ComplianceChecked(address indexed updater, bytes rule);
/// @notice 检查规则是否存在的修饰符(Modifier)
modifier ruleExists(bytes memory rule) {
require(robotRules[rule], "规则不存在");
_;
}
/// @notice 设置所有者的构造函数(constructor)
constructor() {
initialize({ _owner: address(0xdEaD) });
}
/// @dev 初始化函数
function initialize(address _owner) public initializer {
__Ownable_init();
transferOwnership(_owner);
}
/// @notice 向机器人的身份添加规则
/// @param rule 代表机器人同意遵循的规则的动态字节数组。
function addRule(bytes memory rule) external override onlyOwner {
if (robotRules[rule]) {
revert RuleAlreadyAdded(rule);
}
// 将规则添加到映射中
robotRules[rule] = true;
emit RuleAdded(rule);
}
/// @notice 从机器人的身份中移除规则
/// @param rule 代表机器人不再同意遵循的规则的动态字节数组。
function removeRule(bytes memory rule) external override onlyOwner ruleExists(rule) {
robotRules[rule] = false;
complianceStatus[rule] = false;
emit RuleRemoved(rule);
}
/// @notice 使用其存储的规则集订阅并注册到特定的 UniversalCharter 合约
/// @param charter UniversalCharter 合约的地址
/// @param version 要获取和注册的规则集版本
function subscribeAndRegisterToCharter(address charter, uint256 version) external {
require(!subscribedCharters[charter], "已订阅此章程");
subscribedCharters[charter] = true;
// 直接从 UniversalCharter 合约获取规则集
bytes[] memory ruleSet = UniversalCharter(charter).getRuleSet(version);
// 使用获取的规则集注册为机器人的用户
UniversalCharter(charter).registerUser(IUniversalCharter.UserType.Robot, ruleSet);
emit SubscribedToCharter(charter);
}
/// @notice 退出特定的 UniversalCharter 合约
/// @param charter 要退出的 UniversalCharter 合约的地址
function leaveCharter(address charter) external {
require(subscribedCharters[charter], "不再订阅此章程");
// 调用 UniversalCharter 合约的 leaveSystem 函数
UniversalCharter(charter).leaveSystem();
// 退出后取消对该章程的订阅
subscribedCharters[charter] = false;
emit UnsubscribedFromCharter(charter);
}
/// @notice 更新规则的合规状态(由所有者调用)
/// @param rule 代表规则的动态字节数组
/// @param status 合规状态(符合则为 true,不符合则为 false)
function updateCompliance(bytes memory rule, bool status) external onlyOwner ruleExists(rule) {
complianceStatus[rule] = status;
emit ComplianceChecked(msg.sender, rule);
}
/// @notice 检查机器人是否同意遵循特定规则,并且是否合规
/// @param rule 要检查的规则。
/// @return bool 如果机器人同意该规则并且合规则返回 true
function checkCompliance(bytes memory rule) external view override returns (bool) {
if (!robotRules[rule]) {
revert RuleNotAgreed(rule);
}
return true;
}
/// @notice 获取规则的合规状态(译者:应为获取要检查其合规状态的规则)
/// @param rule 要检查的规则。
function getRule(bytes memory rule) external view returns (bool) {
return robotRules[rule];
}
/// @notice 获取章程的订阅状态
/// @param charter 要检查的章程地址。
function getSubscribedCharters(address charter) external view returns (bool) {
return subscribedCharters[charter];
}
/// @notice 获取规则的合规状态
/// @param rule 要检查的规则。
function getComplianceStatus(bytes memory rule) external view returns (bool) {
return complianceStatus[rule];
}
}// SPDX-License-Identifier: CC0-1.0
pragma solidity 0.8.20;
import { OwnableUpgradeable } from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
import { SystemConfig } from "./SystemConfig.sol";
// 接口
import { IUniversalCharter } from "./interface/IUniversalCharter.sol";
import { IUniversalIdentity } from "./interface/IUniversalIdentity.sol";
/// @title UniversalCharter
/// @notice UniversalCharter合约用于管理用户的注册和合规性。
contract UniversalCharter is IUniversalCharter, OwnableUpgradeable {
/// @notice 存储注册用户信息的结构体
struct UserInfo {
bool isRegistered;
UserType userType;
uint256 ruleSetVersion; // 用户遵循的规则集版本
}
/// @notice 存储注册用户的映射
mapping(address => UserInfo) private users;
/// @notice 按版本号存储规则集的映射
mapping(uint256 => bytes[]) private ruleSets;
/// @notice 跟踪规则集哈希及其对应版本的映射
mapping(bytes32 => uint256) private ruleSetVersions;
/// @notice 合约当前实现的版本标识符
string public constant VERSION = "v0.0.1";
/// @notice 跟踪规则集当前版本之变量
uint256 private currentVersion;
/// @notice 存储SystemConfig合约地址的变量
SystemConfig public systemConfig;
/// @notice 当方法在暂停状态下无法调用时的错误。将来可能重命名为`Paused`,但与`Paused`事件冲突。
error CallPaused();
/// @notice 在暂停时回滚
modifier whenNotPaused() {
if (paused()) revert CallPaused();
_;
}
/// @notice 构造UniversalCharter合约
constructor() {
initialize({ _owner: address(0xdEaD), _systemConfig: address(0xdEaD) });
}
/// @dev 初始化函数
function initialize(address _owner, address _systemConfig) public initializer {
__Ownable_init();
transferOwnership(_owner);
systemConfig = SystemConfig(_systemConfig);
}
/// @notice 通过同意规则集来注册用户(人类或机器人)
/// @param userType 用户类型:人类或机器人
/// @param ruleSet 用户同意遵循的单独规则数组
function registerUser(UserType userType, bytes[] memory ruleSet) external override whenNotPaused {
require(!users[msg.sender].isRegistered, "用户已注册");
// 哈希规则集以查找对应版本
bytes32 ruleSetHash = keccak256(abi.encode(ruleSet));
uint256 version = ruleSetVersions[ruleSetHash];
require(version > 0, "无效或未注册的规则集");
// 对于机器人,通过UniversalIdentity合约确保遵循每条规则
if (userType == UserType.Robot) {
require(_checkRobotCompliance(msg.sender, version), "机器人未遵循规则集");
}
// 用版本化的规则集注册用户
users[msg.sender] = UserInfo({ isRegistered: true, userType: userType, ruleSetVersion: version });
emit UserRegistered(msg.sender, userType, ruleSet);
}
/// @notice 允许用户(人类或机器人)在通过合规检查后离开系统
function leaveSystem() external override whenNotPaused {
require(users[msg.sender].isRegistered, "User not registered(译者建议为:用户已注销。即 User unregistered)");
UserInfo memory userInfo = users[msg.sender];
// 对于机器人,验证遵循规则集中的所有规则
uint256 version = userInfo.ruleSetVersion;
if (userInfo.userType == UserType.Robot) {
require(_checkRobotCompliance(msg.sender, version), "机器人未遵循规则集");
}
users[msg.sender] = UserInfo({ isRegistered: false, userType: UserType.Human, ruleSetVersion: 0 });
emit UserLeft(msg.sender);
}
/// @notice 检查用户是否遵循其注册的规则集
/// @param user 用户(人类或机器人)的地址
/// @param ruleSet 要验证的单独规则数组
/// @return bool 如果用户遵循给定的规则集,则返回真
function checkCompliance(address user, bytes[] memory ruleSet) external view override returns (bool) {
require(users[user].isRegistered, "用户未注册");
// 哈希提供的规则集以查找对应版本
bytes32 ruleSetHash = keccak256(abi.encode(ruleSet));
uint256 version = ruleSetVersions[ruleSetHash];
require(version > 0, "无效或未注册的规则集");
require(users[user].ruleSetVersion == version, "规则集版本不匹配");
// 对于机器人,检查遵循UniversalIdentity合约中的每条规则
if (users[user].userType == UserType.Robot) {
return _checkRobotCompliance(user, version);
}
// 如果用户是人类,目前假设遵循(可以扩展)
return true;
}
/// @notice 内部函数检查机器人与其规则集版本的合规性
/// @dev 如果机器人未遵循任何规则,该函数将回滚;出于查看目的返回true
/// @param robotAddress 机器人的地址
/// @param version 要验证合规性的规则集版本
/// @return bool 如果机器人遵循规则集中的所有规则,则返回true
function _checkRobotCompliance(address robotAddress, uint256 version) internal view returns (bool) {
IUniversalIdentity robot = IUniversalIdentity(robotAddress);
bytes[] memory rules = ruleSets[version];
for (uint256 i = 0; i < rules.length; i++) {
if (!robot.checkCompliance(rules[i])) {
return false;
}
}
return true;
}
/// @notice 更新或定义一个新的规则集版本。
/// @param newRuleSet 新的一组单独规则的数组。
/// @dev 这个函数应该限制给授权用户(例如,合约拥有者)。
function updateRuleSet(bytes[] memory newRuleSet) external whenNotPaused onlyOwner {
require(newRuleSet.length > 0, "不能更新为空的规则集");
// 哈希新规则集并确保它尚未注册
bytes32 ruleSetHash = keccak256(abi.encode(newRuleSet));
require(ruleSetVersions[ruleSetHash] == 0, "规则集已注册");
// 增加版本并存储新规则集
currentVersion += 1;
ruleSets[currentVersion] = newRuleSet;
ruleSetVersions[ruleSetHash] = currentVersion;
emit RuleSetUpdated(newRuleSet, msg.sender);
}
/// @notice 获取规则集的最新版本。
function getLatestRuleSetVersion() external view returns (uint256) {
return currentVersion;
}
/// @notice 获取特定版本的规则集。
/// @param version 要检索的规则集版本。
function getRuleSet(uint256 version) external view returns (bytes[] memory) {
return ruleSets[version];
}
/// @notice 获取特定规则集的版本号。
/// @param ruleSet 要检索版本的规则集哈希。
function getRuleSetVersion(bytes32 ruleSet) external view returns (uint256) {
return ruleSetVersions[ruleSet];
}
function getUserInfo(address user) external view returns (UserInfo memory) {
return users[user];
}
/// @notice 获取当前暂停状态。
/// @return paused_ 合约是否被暂停。
function paused() public view returns (bool paused_) {
paused_ = systemConfig.paused();
}
}



rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, value, data, access_list, authorization_list, signature_y_parity, signature_r, signature_s])
authorization_list = [[chain_id, address, nonce, y_parity, r, s], ...]assert auth.chain_id < 2**256
assert auth.nonce < 2**64
assert len(auth.address) == 20
assert auth.y_parity < 2**256
assert auth.r < 2**256
assert auth.s < 2**256V神还是你家大神!另外,偶尔你不能只考虑技术,还得想想未来的人类未来的社会如何管理。
Rationale
* 检查你的账户合约代码是否为空;
* 如果为空,则设置为提供的合约代码;
* 根据提供的智能合约处理交易的方式执行交易;
* 将账户合约代码设置恢复为空。pragma solidity ^0.4.20;
/// @title ERC-721 Non-Fungible Token Standard
/// @dev See https://eips.ethereum.org/EIPS/eip-721
/// Note: the ERC-165 identifier for this interface is 0x80ac58cd.
interface ERC721 /* is ERC165 */ {
/// @dev This emits when ownership of any NFT changes by any mechanism.
/// This event emits when NFTs are created (`from` == 0) and destroyed
/// (`to` == 0). Exception: during contract creation, any number of NFTs
/// may be created and assigned without emitting Transfer. At the time of
/// any transfer, the approved address for that NFT (if any) is reset to none.
/// @dev 当任何NFT的所有权更改时(不管哪种方式),就会触发此事件。
/// 在创建(此时`from` == 0)和销毁NFT时(此时`to` == 0),也会会触发此事件。
/// 创建合约时例外:此时可以创建和派发任意数量的NFT而无需触发此事件。
/// 在进行任何转移时,该 NFT(如果有)的被授权地址将重置为无。
event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
/// @dev This emits when the approved address for an NFT is changed or
/// reaffirmed. The zero address indicates there is no approved address.
/// When a Transfer event emits, this also indicates that the approved
/// address for that NFT (if any) is reset to none.
/// @dev 当更改或确认NFT的被授权地址时触发。
/// 零地址表示没有被授权的地址。
/// 触发 `Transfer` 事件时,该NFT的被授权地址(如果有)同样被重置为“无”(零地址)。
event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
/// @dev This emits when an operator is enabled or disabled for an owner.
/// The operator can manage all NFTs of the owner.
/// @dev 所有者启用或禁用操作员时触发。
/// 操作员可管理所有者所持有的NFTs。
event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
/// @notice Count all NFTs assigned to an owner
/// @dev NFTs assigned to the zero address are considered invalid, and this
/// function throws for queries about the zero address.
/// @param _owner An address for whom to query the balance
/// @return The number of NFTs owned by `_owner`, possibly zero
/// @notice 统计所有者持有的NFTs数量
/// @dev NFT 不能分配给零地址,查询零地址同样会异常
/// @param _owner : 查询余额的地址
/// @return `_owner`所有的NFT数量,可以是0
function balanceOf(address _owner) external view returns (uint256);
/// @notice Find the owner of an NFT
/// @dev NFTs assigned to zero address are considered invalid, and queries
/// about them do throw.
/// @param _tokenId The identifier for an NFT
/// @return The address of the owner of the NFT
/// @notice 返回所有者
/// @dev NFT分配给零地址是无效的,查询零地址抛出异常
/// @param _tokenId NFT的编号(id),也是其识别码。
/// @return 返回所有者地址
function ownerOf(uint256 _tokenId) external view returns (address);
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev Throws unless `msg.sender` is the current owner, an authorized
/// operator, or the approved address for this NFT. Throws if `_from` is
/// not the current owner. Throws if `_to` is the zero address. Throws if
/// `_tokenId` is not a valid NFT.
When transfer is complete, this function
/// checks if `_to` is a smart contract (code size > 0). If so, it calls
/// `onERC721Received` on `_to` and throws if the return value is not
/// `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`.
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
/// @param data Additional data with no specified format, sent in call to `_to`
/// @notice 将NFT的所有权从一个地址转移到另一个地址
/// @dev 如果`msg.sender` 不是当前的所有者(或被授权者)则抛出异常
/// 如果 `_from` 不是所有者、`_to` 是零地址、`_tokenId` 不是有效id 均抛出异常。
/// 当转移完成时,函数检查 `_to` 是否为合约(代码数量 > 0),如果是,调用 `_to`的 `onERC721Received` 并且检查返回值是否是 `0x150b7a02`
/// (即:`bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`)如果不是抛出异常。 /// @param _from :当前的所有者
/// @param _from NFT当前的所有者
/// @param _to :新的所有者
/// @param _tokenId :要转移的token id.
/// @param data : 附加额外的参数(没有指定格式),传递给接收者。
function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
/// @notice Transfers the ownership of an NFT from one address to another address
/// @dev This works identically to the other function with an extra data parameter,
/// except this function just sets data to "".
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
/// @notice 将NFT的所有权从一个地址转移到另一个地址,功能同上,不带data参数。
function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
/// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE
/// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE
/// THEY MAY BE PERMANENTLY LOST
/// @dev Throws unless `msg.sender` is the current owner, an authorized
/// operator, or the approved address for this NFT. Throws if `_from` is
/// not the current owner. Throws if `_to` is the zero address. Throws if
/// `_tokenId` is not a valid NFT.
/// @param _from The current owner of the NFT
/// @param _to The new owner
/// @param _tokenId The NFT to transfer
/// @notice 转移所有权 -- 调用者负责确认`_to`是否能接收NFT,否则可能永久丢失。
/// @dev 如果`msg.sender` 不是当前的所有者(或被授权操作员,或被授权地址)则抛出异常
/// 如果 `_from` 不是当前的所有者、`_to` 是零地址、`_tokenId` 不是有效id 均抛出异常。
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
/// @notice Change or reaffirm the approved address for an NFT
/// @dev The zero address indicates there is no approved address.
/// Throws unless `msg.sender` is the current NFT owner, or an authorized
/// operator of the current owner.
/// @param _approved The new approved NFT controller
/// @param _tokenId The NFT to approve
/// @notice 更改或确认NFT的被授权地址
/// @dev 零地址表示没有被授权的地址。
/// 如果`msg.sender` 不是当前的所有者或被授权的操作员则抛出异常。
/// @param _approved 新授权的控制者
/// @param _tokenId : 授予的token id
function approve(address _approved, uint256 _tokenId) external payable;
/// @notice Enable or disable approval for a third party ("operator") to manage
/// all of `msg.sender`'s assets
/// @dev Emits the ApprovalForAll event. The contract MUST allow
/// multiple operators per owner.
/// @param _operator Address to add to the set of authorized operators
/// @param _approved True if the operator is approved, false to revoke approval
/// @notice 启用或禁用授权第三方(操作员)管理 `msg.sender` 所有资产
/// @dev 触发 ApprovalForAll 事件,合约必须允许每个所有者可以有多个操作员。
/// @param _operator 要添加到授权操作员列表中的地址
/// @param _approved True 表示操作员被授权, false 表示撤销授权
function setApprovalForAll(address _operator, bool _approved) external;
/// @notice Get the approved address for a single NFT
/// @dev Throws if `_tokenId` is not a valid NFT.
/// @param _tokenId The NFT to find the approved address for
/// @return The approved address for this NFT, or the zero address if there is none
/// @notice 获取单个NFT的授权地址
/// @dev 如果 `_tokenId` 无效,抛出异常。
/// @param _tokenId : token id
/// @return 返回被授权地址, 零地址表示没有被授权地址。
function getApproved(uint256 _tokenId) external view returns (address);
/// @notice Query if an address is an authorized operator for another address
/// @param _owner The address that owns the NFTs
/// @param _operator The address that acts on behalf of the owner
/// @return True if `_operator` is an approved operator for `_owner`, false otherwise
/// @notice 查询一个地址是否是另一个地址的被授权操作员
/// @param _owner 所有者
/// @param _operator 代表所有者的被授权操作员
/// @return 返回True则`_operator`是所有者的被授权操作员, 否则返回false。
function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}
interface ERC165 {
/// @notice Query if a contract implements an interface
/// @param interfaceID The interface identifier, as specified in ERC-165
/// @dev Interface identification is specified in ERC-165. This function
/// uses less than 30,000 gas.
/// @return `true` if the contract implements `interfaceID` and
/// `interfaceID` is not 0xffffffff, `false` otherwise
function supportsInterface(bytes4 interfaceID) external view returns (bool);
}interface ERC721TokenReceiver {
/// @notice 处理接收NFT
/// @dev ERC721智能合约在`transfer`完成后,在收币地址上调用这个函数。
/// 函数可以复原或者拒绝转账。返回非`0x150b7a02` 也同样是导致交易被复原。
/// 注意: 调用这个函数的 msg.sender是ERC721的合约地址
/// @param _operator :调用 `safeTransferFrom` 函数的地址。
/// @param _from :之前的NFT拥有者
/// @param _tokenId : NFT token id
/// @param _data : 附加信息
/// @return 正确处理时返回 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns(bytes4);
}/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
/// Note: the ERC-165 identifier for this interface is 0x5b5e139f.
interface ERC721Metadata /* is ERC721 */ {
/// @notice 合约中NFT集合的名字
function name() external view returns (string _name);
/// @notice 其缩写名称
function symbol() external view returns (string _symbol);
/// @notice 一个给定资产的唯一的统一资源标识符(URI)。
/// @dev 如果 `_tokenId` 无效,抛出异常。
/// URIs在 RFC 3986 定义。ERC721 URI 可指向一个符合 "ERC721 URI JSON Schema" 的 JSON 文件。
function tokenURI(uint256 _tokenId) external view returns (string);
}{
"title": "Asset Metadata",
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Identifies the asset to which this NFT represents"
},
"description": {
"type": "string",
"description": "Describes the asset to which this NFT represents"
},
"image": {
"type": "string",
"description": "A URI pointing to a resource with mime type image/* representing the asset to which this NFT represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
}
}
}interface ERC721Enumerable {
/// @notice NFTs 计数
/// @return 返回合约有效跟踪(所有者不为零地址)的 NFT数量
function totalSupply() external view returns (uint256);
/// @notice 枚举索引NFT
/// @dev 如果 `_index` >= `totalSupply()` 则抛出异常
/// @param _index 小于 `totalSupply()`的索引号
/// @return 对应的token id(标准不指定排序方式)
function tokenByIndex(uint256 _index) external view returns (uint256);
/// @notice 枚举索引某个所有者的 NFTs
/// @dev 如果 `_index` >= `balanceOf(_owner)` 或 `_owner` 是零地址,抛出异常
/// @param _owner 查询的所有者地址
/// @param _index 小于 `balanceOf(_owner)` 的索引号
/// @return 对应的token id (标准不指定排序方式)
function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);}














%PDF-1.5
%äðíø
45 0 obj
<</Filter/FlateDecode/Length 7490>>
stream
xÚ\É$;WÞóýx¤R-àØ!Ýb#+¼ÿó!¦ÌîÐUßr8ìcûÌý÷/ÿËÑþW
¿jéCë¿æÿ¢¿Ñ¿ÿÔ;ýýù÷þúõÿⵡ~ýµýòÉ
)×__)µå_-ÿþí²ÏnË£[êèÂR\.lÛâýÔ]íÍõur)/>oÑõTÂ<¥TÒ¦Ü\ZSL1¿äùç?þúW2þªC¯ÎcÊ6D}ù8ôTeBsÑ;7çR¥ôìcúÀ±ÓZð]hµ½$¸!Ǩýhl³$ú79ZýòâÏW®
z$gO{IþÑgòw>cã9ÿù¯w;\ØxC2ÞW+C O7?MÕå6Ç36Y×O_Æ4´º/!¬²=¹ý|Ű(Z~|zÛwM_WÿýØüå7S/GQýâQØôôÍn?ä/_ëV;¸®§T¡Õâ´b S
Î+ZUFÿ°òÜTó¾ôy5«Îâ>û;ãØbu
ÇãܶßBíña
ÞÑRÒÙ³w¡§¥HC«Hn|.³n\<6çuÓñNO$z=3>Qå±¼õçÉaÝâÞÒTëÃ"<aæX°¬Q¶0~Í?ÝN@Xô`¤E3Ö¾ |'&zÞV"ßÜ*=`)Ʊâ¨i@?ÿ &iËíqðó¾?Dâ~ÁÃT¼÷[ k¤ß^v^§üì§Ð$aN»WÎ,I ÿå¤@á('XÚ#v8H´¥&ÿðØõ}Yä[þ{#.̨ú1bZä<ÛV`tÌ,ï$Æ¡ºb 9c¾]¦ä[r`í®ù,¦6§Çè3æöÓê·O!Ä´m`ÿ)o#ÐRMëØÃâWb9l4FÂOc20_!¡efák,õó
9âK®<IéÄ@â|~Î ÚØ}"¬¤ùÉí;ømcÊJyLÅõÆÉ&O5,nôdZXèåbëïÖ ÀÖ'æ:Gð¸<Ñn,>ú¹ÏJ~ߤFôÀMôOsü´
OÓ&0vÚT¢L§£°ø61¬«ØTÞ÷ëL6vÄ.I;WÇê©ýz:Í)´µøBð!ûPOÉ´ jHt P
ßA®=¡ É\ë Kxs0°YX86ÉàòÁü[-1ý¶¿
H ¿²®
oñ¤Òá ·´XÏ4Ù"ðøËG²ðnpøY¤NhègÃ[å5Ô3ÞâL¾GÞôóErt'þåö@Ü7$üPðá_}ç§µs?:vþ%¼ã÷}u<|ï¸ð¿;ú±È¸xÀ0Oç1ÆÊcÕm;` ¿ ·ñ}`5`ø¼ô½È¯¬Oúî+cÇwÙ «ÀOpºm:ÏTáþ.<î8ͳ¬tʰ¬æO£ÀRoüvÞcÛ[0"#Na)]ûe§ý=çõ~è¹Ü¨ Å1Ï2²ÖÌØj#iOlØýµÆßèyË ~Y#m!³4[Zç&ï¦È¬dR0OxêI¥VVÃû6îóP?ëkÒ/$Ôsç9¬Ó²ã'É>yý¤ç·<Kø"Õlð¤}« »¼¼Y~(Ùä³¶DÇ'[åÑ\DC¢G'Ú`ß¿ÃR?`hÝw,-qK$Î-Á+·ø¾dn¼ä¯<©Îú*ú¹[¤
7>mGÇ8ꤤSjËÚiÐJR\Th:R@Z±*ËtBõÒ¯,7"L'Ù|úu¹®¼ùÞçï³Â ðy4M"%ùc+@Zmú;£#I©a&«I
¤;вc$ì"©¦²ZúCø=ã@?Þ]~ÖuzÖ²Èç$þô"&%X´äPå¡RîòÁ[ù!Ú:rÒÏXyP+,0ó Wª*¯ÊãèÁ1õ¾²¼¢ãèoÒ'¶Þ)HPmR«_Kåe¼ÔÒ&Ç-t¬<LE:§¥wi!F%=F¦mÊl/HAU·â¸;^ÏU Ä08AÛù]}ÙLÒä3yÕ§(±}:)+¶À=îG!ʪâaÛxÅ|K¯}v<cõÁ¤Í±$ô ¸èÏL¤Qg(Bò©±!eÁÙùÕ$$æ:© r&C^¸iÚR¡¬NXÏ¢Gý¤±9§¯qðí*¤ «"Ó¡³ÂÁ*Å3}(í¢M`~>oÑ&| ;?^öHÀZÖ×I
àôyÞï³þò^©«#å{áÓ($ó YÌ«4ÝÚüO!ÕhtM¬È1>?È¿u*غyØ£ª@]u fÈUY4#%ó×è±kbr´º3y¸ôÜÓ¨r!Ë Ã<Ñ'qW2ÆWd¨Tòë!Dip¸PãeîÞKÂÚüÿE8ë ìç¿ÊNºÌ/«<Ħ´.|å
R#)0ÊìiB൧Ø?îéðMNÄëö]¥ÐÁ¼ñ&>¾sË
í"K9_:ÏwgxO0ßŨÄîÈÐMvÿ°RÑîtÓ»)ô \
ÒyÁòÊÃÒà[Ýbi'ë§,%ÆÊE-OüÐãäèÖÅxQ ÅFÑn YÏ[MêX.ßzÁÉ]¹^
?ÆÂ»T8¡
ÇØâ·²i¯¢:²CÖYe0z»ådìàálu[WÐùÚ#§ô çì<£ÙRÑ0|Þ³ì.å£Õü'5LúP>êß_pGM:´Ð/ø'M¼qoõEÒnXo¢ÉÝ{64|)/ïiÐJ»¹û@}ì81o
mÄ+Ôkþ{âñ¥±8`/ IÒe¸MuUíÈ|÷«nd¼é ]Ó6¡U+/XT+IJçìß®üköJðÑå+3ã+Ù ^ìê«zbüÕn©2-éÞùÄÑwn½ëjï4ÀpÀcv:-^ü9PØÇXÌ"t,ÈyNb@ºø0øåBżó¡b³
èCÝXÊü ÷daÀØ =ÝÅRçs³/[é!mÄæbéªñßì|[ûJÅxnc+¯ÂÆSf¨`s p0CÓT¯¬ýµ)Db¾¶×»hÛ[ØÃ&"5jPq;I!Bá$Shßwuø&jC2É8î
S
^dJr&OÍfºZZHÀÆÝYG&yoê$HÚèßäzÝ1æ&}ë2ùÖk\éôÜOñ2ßùPø$p»ëè^§¶Sõ2Æ$ìÕ©Xö,WÑàÅ
êzÐPѳiÜldu6¡.ê2í]XõUYdû©«ÉiغÅ|
»ïm:æc
4ÿB\ô:17}*-nó3b]+{ Ùªw`|}vµò˸nÔ9äÀ-A ¾+«Ò|>ãftTÑy¤½ÎkFxuLv¤<
Z
8¡©ýìe8 dAg -ðù¿ÙoN£Å° »9 LO@÷xTÑÌÆ`êGÔ¢B}2suê³õÔá1Ê~
[³'ãìÇu¬qÙ}
jf°ù*C0>çTq¿q^Ò
Bz
WD12ÏÓ"ÇZòkYùLu£ù×=ú dÆü&öçï7}q¾B8yêèÏ»PRðã¥]¸é/G|XìPËQ7&XÊÙ[ü±\µ}`«îCNÆyUê.ó|gÁaÙ-]A?5Ï:Þ¤ó2=¹7ö8q>"N±W{fÈð´yZwé¦äKNÙ µçt0bæÏülV¸¬±B:Oæv<©ôêÂÎv
VçäÖ¾{0äUçÝÙèþÆ×ÞÚDôÉo*ÿiÕv1Ø_YË®p'NMß¶Ãp oL[¢þX|Cx¢è:³ÿA`Cwñðgºé4| M@$óVÓð5Li³vöxÅ ög2Ù×Coñ¦!#¬ÿ{
Y,ªxɾ¸Ì#ð¤-á½oo¡Kup!ßCÚÊaA©%tøñnhée÷·8ÐqÝ?°NpÙ¦|7weH©½LÙö25ï[¹ìÛ}ûâ Þ!ÙÄñÓïäO'´ÇI*49i°Çòñwô°ÚáÓøò°¸nFm ¶}s,´p³N®Zþ³_bç~-íêAWÇ(o)£Gd}Iùæ¨76 ºzö·íöJä\ÔèÇÙÀIKO~eÐ/bÇ´,° ×2é'VPØÃ·BÙ¢i$oTeeè«cî1° fKwéPw÷ÿ÷ðáCt_ÆÌà.ò¼]
¦~{S¿-N-@>÷Æk¬}ØÁÃ1©Ôynî:
0E
Û-bóóây0¡¥÷Ugo:iyÖ.Èø³ÿ?ñÆ!æ@¶srCí÷oK»z[¾boßGàY!ɹZú¾¬´!µú2Ù{FTýà^¡±¦Uþé=ë³=ñ 2øÔöÐcõLôüpÃáZxìW:ÌÁ ¾h¾Ã?J¯¦xÂÆt)ÜôÈ
TøSxü26¶û·å:ävä;°Ë
j<;Qø×»>?ø»Nt$»c^}D´ZÂÍ>F@? £Á͸ÚY{Á;qI ws¶ÄµÓUà@.«:È5zcµ)ï~ú -â¡XÜ
-´úêdFQ¿ÔÇHªÜùU=Ðë$õÁ«ÊÊ]ugO¢?Ô¯cô(Þ@q
oÖýîQ4ÎC¸xÖw×RS\rËMy_͵CªÜ<
KT¬Mm* APì.[¯âÓXn!¾¬òhIx2
¿o
Q §"*,ºeQÓëÕèØr½*ÐJõaóó°Ý8IVXÌÙÖo#ö ÀëzsõáÖy·Nöàk<Y¹x4.5®Äí¯ÙÏ}7~,ª Í÷¼8) :h:
ãÀ6ªYøä$CMW¯Ü~îd@è±>'"4±rKa¼ñFÞ+J±²h¯Û[
wn£´0ë¥Ð8P³/Üâ§eáHîR/æ8ï¹)aÏFÊûj"1ÙûíÃÏo_2+iÄï¿îõq¾gúàþc\eoØj¤dóÈ&±|ÂÖJZ <nÉ£2åRâ®b nĶ/¦õ§ÝdÈd¤:<
f+×8Ë$Ã;gVÁØÙ¤ÙEÂùHîýe ,*÷ŧiÈ%¿À}>±ñ½Ìõ|ZeϸGÝË2Â
5-w ¡Ùt;üf
áô^°;9Ð×®A%å{ÞM6¼qÊ3û
ÄËæÕÛ$d5½W²?²e¨gOØ[2FÍcÞTg\ùúÊ8¯3¨Ë-Ûåï7n/LÊÚá-Å/'ù>NSÂÙBOª7Åp²¸Ý)íÓi§~éôlCu´Bª2BÙ³[ìZ¤VÒ;I#Â3k|#bÂUPÀø`{º¿êîÐL«Å5¢øRyÝ9?9ƹÂÞÂ-óâ'2±²kêì1ÃHÚËG%Þï_ÙlJMA Lô£öávç²ÕVE<Þ^¶¨Ä «»ùlÏè'YfÜñkQäÒ¦-ÙÎ'ݧá!ðknÒKì1ÍE4%d«ªcJ˨ö7ñgÓ¦_)ÓC0øTú®f&/ÚâkÜ®1*ñ>4s6Å$»#ù¤§ñ©Zb}_]R縡emïh ]æ¯Ë&ì÷¨ÒrJa8³Ý½>)Û ,» ÖIvRdÚï~ðînqôñkóôiCMéUt6¡=¼
K¢á6ÚyzRÏ÷/6æQ¡ø-¾L÷l»ÃçfETö;'Kéfí´h[SFÄÀ©ç ç°É«è¦s2DRaLZQ&')ÁZPRl4ÄÝPV«Ò
l.[{¡"T÷d#£vͱt©ð°HrÐH¡ØÐÍUZ728dJ+ÆbbÄ@¤Jáµêã^½x@«q*q3¼¶×fí",çqã;üÔ÷4æI~JË Ü=ÏðRÑsVv)ÕÀðu¸m\Ùì0ìn!¦^.ÆÔ*$øÁÝ׸©å|ûÛ9ÝÒP{ÉÚÒ¼9r[µDÅÎiÓ)Oñ)Hư¢Ò¨(Òõî!=xõÜÞïWT)ïö¹"3å¨-äjÓp¸ðÎØ/5Sdùæ¬ÀÀBµþ8p®cÚ#]Ü{¿Ôª@`D¸Ö·Àp!PúaK!f¹\ì®Õ9díÊWúÀ+J{ý}ÄOÜ,8Â^ϼ('½L÷Ö=Ò ¥j,³jh(©£Ô&%§xªy*c,¿¼vØh¶Z5*
Ð+qö`.vö EªZ89|Î&|2Þ_%þΪg«ú¬ç9-0îù^·4_ÓÕ±D+ºX- ÉcAsÂÛö×ÒÂä!xþÊNR
éÿ-aúJa¾i2§Ï
#¢Ðª>¤¡ø[zÞ)å
O~´&$E!#d;çåt>
cÓWl)TÛÐÞ~MÆ_ìáþõ"I!Óâêý¼wZ$²¤æ{cõGÕ\}Ï'þR¯"È(GBÅè£4cM]ÈüàfùSðøNetæ¬l<pVv1ª*FhÙ»ù˶ɬô£
ýeøýeÅJ3ðÍlôRö¬,Þ&[L:L#aÔô>rd$ê-a;[ºDz±Ü³Ö"IK9;ó9ÈFWÕ5$qþ°Èߪ¨8¨å(øæ
óYk*ÝQ>Ýîèþ-Jt|!ãlYùô ¬5{=/:xŨ½¢N¶"
ô!Í_IÆ@¬µbOzUr9B0ay)=#\ÊuÙ"Ù²@ÐÒ¾b§söPçã<_P+2®Ö,¤9]H³Ló)DÈ|ëü@L-Húh]ô¡f7K`ÁC:Ö'xÏ%L¸ë"â<ñ,PJ²Ì8É£l^Vòx6ýU±¬øß¨!5
ü
Ô!8K®bíZä[ú{óÊGâu¤OîE×l¿~ñ
H$Lï
oÍù¢xDm:oOyTÂ~ðµ°äj¯þVÿpY@Jç^ÌBdÛèä¾/{`xShÔÇeÕtG
X_<Çé=ÇôKï3~<^"ðÚï_ü¡èYzïYÁÌ-6fWùA³b%¯ô jÅ*ÔX±*¶âÔ/VíWïwéÌ줸ìÄÖÛCÖc©¨ð]N55Æ,ÕÐkaî'^ú8 Ar
½NQ³b,³òê.{¡9fÂ\õ4jh3-êÂW¼×I#»-÷MINwv¨a³t7»ÃÕ.ç{:m(¼ñLDãìfºq\ÎÚ;¹G¤Ê¤
¡Ö
KÒdâ5B3i
"ÂÖí³Zxô¦®ä¨ãH&{x©þ
OLOá{¤3§Z6S&óD(ïT¢]w2²`jªÑÛ=."=ÚåÊKÁz=mâkÔLøý[M>4?4©·f9
wÚÖÅÿÐ!z¸eâHn'§k*j3Vø!0Y ïɧPfj}ýÌÚâII
×éÞgÑð¹dù\lZí=ï®ÐØ)?cf27 uvÆï×DHÖ 'T !-
×rÁ²ÔÊ»ôOèêå0»þÄÔØãê>»s´2ö Ï'vk|Êɯ¦g
9]Ñv¿
#Þ®ÜS9,-d\Õ®fõË´\Ë[öä§kæKUÓ§:Ì )é¨(Æ`þäz³¤)VòRÛûú¹ç¯8C+©ØèïµþY<'¢ûØO/(gÄ=?ë¾JÒ½Û0Ý\41*½¯_\rè>ÝI«uíe¾g5íw0Í"¤Lú½Eø¢t¿O&(ìåïØÈJìÿr'bAÊHþ»wB
Xf![´{
0F~ÐbÍï×7eÒFëõº%Ó$]ÂÜ'uhwá~Ñh ç´Æ÷ÑËOÝdDZ Uev%E¶+Tzûv\¥"+ôæ¼J©Q}lz%õy´®ùµt¸Ú·ÍÁyxRÔHl´/ÍY}I|!%wdÁÄÖï¦f²´r=½_iJÞÎ÷hëÄݺ2HÁWfRÕSHYÓßD?ÅïúØ
W-|³|:+âß/ÙóÄb!5îxU¬ ¼/v±@ìWþ+EBKÿÛø¯]uvIk9mÏm?öqÉ·ª ý]àÖ$ô±
yp8Åý4uÍ2Ï£wã¶ìqEÄQæk8áì¨p;®2EcRV[¹m~¿Fã Fs §®úéÎÄôbBdZM+°Øwzq!CízàýA"©É{õ llª¬á¼oVýiµ¾Z}ÕÄÕã×Ìý<sZ|ç\'7nøX¯ Ú£w0ûB¨¬q2;ñÞVFÔ\;æwúåk¼«ã¢¶ÛCýH%±q6þß_~µëjì»=]ïÁúpÊÎYåæNLï¼óývètýÎóTÄ2k´¬öTV{ÊÕk×Ö²(|ɯ$pG»gÛ¦·nñÓD/À´dtZ
ÔhõÓ=;5ÐãéÆÞñä7
Ç}Ïao7ÄÚîWì\»¸
òvÇUïº\_¶&óÅ5)Þïé*4W½£§Ñ»Ñ"þ·xk,£ls¿ÕqîéÒË~ÅÕ.ú*¦½Öîiy¯Züo¾¼§Ûí\/×ÎÈrS}ºp@B%XhP¯ùqzCóQ JE
UÅ#¥°3_~ÜFsùÐ7¯ £\ÜÇACbÅ"W©½æ|c¸K*î.¾ÖÖ¥È|U¾Ðû}íß"{ÝvÁô©¦yàúTr¤!ïd@wê`ö!ÒÝ
£æþé¿ýÃÿ !è
endstream
endobj
88 0 obj
<</Filter/FlateDecode/Length 8139>>
stream
xÚ½=É$¹uwE»aTû"û ÃàAsÓèáe@ÿ¾ßÊ #ÙÕc1($;A>o_8o{³oþ³oÙ½åTRßî
¿ÿ¿?´ÿî§·ú½}KÍ9½ý´¿Á6Ç7ëcàÁöçm4{¼-ßÛ Þ¸}߬]«ÉµúXM»75$w_CHáæÖXLؽ|Lv÷oùéßpÂøZ¬Çm- À¡ÙsÆxkLÜ þ ÚÝÞ.ÅyùÎ\.gð3¾MàaÐào5 ?üÞ¸íü·÷
ô[ö£ë³ò|ÆÿGÛÔw ¶¤|ÌVêõ¯?÷¾,5¥¼Û¸xá×,Õ¶ûßÞ½ÿ°uß©á£)ÔÀ¦nFáÎ&YË_¥º8þ2ù;¿cá×p6ü¤
ða.ú¤4ÖDÌC@Ùd6¸³+${;Bi7_¹±fÞ1Ã+VjFµ«DËß o>>oàKx [ g+~Rá'yߨá÷ûàî÷o±ðï»
á6kè#^Å- '6bèñºê*5Ì
úÀ¦Üyr¿FnÄ=3\öd4,Mv&ê¦Ý´(óàòa9¿Ç»®ÜØW¤ÈÑ裣tà( ìNO|vw¾Ç_å_Yøs¤c~RRæ>±Ì÷͸{ùf=TÌ ulÙ3äàèÊ®m~oþîm®ÄI` ëà&XS?ý ºá@¸bìDëì4¬:Äz·µ:¹NãJɬþï8[ôælõ6úÝà´@vÀÓâm9zÈv1@óH½.
µGà¾I©©=uߥ´ÞÞåVøËÏÆû¯ÂKrÏýÛ;t#ü念Sé:¹¥DËìæË?ZíÑjÝâßÚ ?§½ézÕ%»"ãüîç/:V<lsnÓ½;Làv=×óå ë·_ßm¶_~F:ô+uö|·ÿ¶Â3~~D^´!õc
`ë
¢¯+A¤íE!<ÂðÈûm¿ßÆÜÖ&ºm§m,§bмÎ5ÞóSü@Ì ÉáHhà ô*ÄÕÓï¥_§'6}&âà :Éçg{ÛáÏÕÅÚÙ]`¶ª-53`@Ããrlö;5Ý,½òöé¸èÝ®aIþ;»Ç/a2i+ºï~I5ɦ!þã\Å?Â7¾Æ8|o* -p+YZ0¶pÃÏ,&¶@~Ë2ÞЧg¤&Ð3ÔPæò2æÉ+·Âݪ<¡[o÷$s?¼nkñn{gAÎ È}1~Ü(8©0C,håCÛ8¿PaÜ¿Mª,!Wíïî°'ÉËYAÃÆÀ
ÔT¡¡_*}àUXÝòPàß2½²[,£qtÚ:lÐÎ¥pÌç|¶Üp)ð $N8èÄ Ë=FûNyØ'x$`ÜVñNÀ¢ ׬µm¯Ù¸ó
H¥28¢ãÎ;
uðpF~Rëû £KÞä+o¤1Întv{p">xEfòÕQ7ýàP qö¢¤ÙÏPxúæ|%T:wDC!
Ì¿n¸D%ÀÌO¤E«ÌªUâÚñ5LAºÒ
*T²ü`7mdnMØhªHU¸.¼e®
òJ&yðP¾¬_¥NûXi6°ÃøÍÃñ×
\ʧÆcøCmvÚ»MÕ%ÄÒÓTõ£1-@RÐCÁdXóG³´²;VL±s-ÈbwT'_¹MLé¤éÃÄÆNæ>kØ4h¾pSsJÌê¹µ÷ÛhºÚëUí
Ï÷ÇFMJwÜqSo'À±qXÒhUã-°ñ9oxVxLfìí@í#ZÀZç¼-´É N~Ì%CaÉB84á²u0·Îʬ3J}4à lèÍâç´ Y)_í&ï+7´Uî<:X
Ìlqò
ºLÌàÁ
PüùEgÀ/YLDÞ¼Ù'=$¤
"-hÐDÃ4#%U~EËÀWDFø¤,}6GlßDËh%Çix==,l¡à·e/¦ZÅÑ,dL%Þý¡DgQÈÍbDlҤ˺[¨NúÜq[±AMïüÄUbÞðDEE}¸ÜOæ#Ô¡ÑxlÐ)c:elÃ'Pè#hHõÇåyD_ÔØÐf5Áíì¾µ÷øAHFAíÑq|D«Þ2ëÁÊ Ô¼,/Y½`lÎá_i.fÖõ:dZ"Z#ýÇÁ3{.8·]V°ýìñºÀÒî¶F§Æ¥`ÆEfø_¯K0Mxk£4ûRáÔ°`sNàøâhæÓSËÔFïxnæÞ0ýÝÔ0µK´i4LϾÑeFY·ñ ñð#Ð
f_R[
¶ñ\2LÕæ£:Y¯}¾ÌwãØÖßüæ7¿½Øã§ùigqñèLiþ 3%ñxå3Æ}%»n<ûùñ`ß_å×:îã°ô¸o×ÇÝO
jU1ÚÅ£[[æÒ;êE³WÉü"ä>ãkHg{IøÃ:¬{IøÙ¿ø.nýîë{¨_~{=¬Í· ë=íh~ñ réâÎ ¼p
Ô¿OCáSlfguBävZOûäÁöÿ4cÇ<fã a¨þcô8!)_/Ij¶ x"±i PNÉÊ»ÆUÔî«güí§qÈ~ÇØ÷(v&*ÚÞ¤ýÒÿª*m¨¯µgj*!ìÊM¼}Á-©ºÓÌU]Ea
d˰W@{Gßϰèáø9ôÞ½¡ZÅ!kf+a)ƽ?ü5W´ I«=¨ºÚ¶*Û
ÞUéÙ-®ý7¢ÓJT£W
^<A ø½s²<Ð!c;ÞY¬)gJÀXÈ`y
ö¼1W®°B8\®¦bçj̰ðúÈàÁVÕÆ¥3Zº¤m¯¡þî;¢nögÁ_½¸tÈ`'ÿÎÇî÷ÈOò4Í©°ÊÎPY
ÒlÒg(ø*wI!Si¯,ÂIdÆ]¼»Æ$÷ÛÉMZ|%1&ÉKåh'9[$æEÙo%/=Åw£>
±
ÚzñèêzÍóJõÄgJûBÒjf+
¹c´¸æ%7ígGnèqXh³Áò.h5¡þÌ]ÝèoxÊG@ÏܾZM*À_ÐV É+¡ÿM±>[ÕãÎSçMXaiàùÛôðÊGÃÝ>Âã^$Bi0Ð'¹å¬¼FëN¬?(Þr`©Ù0Ûø+ÿº60½¥æ0Æ c<\ÛhÙVvq{VîdãA%L9.ù;aMeGN¡6%"¾{M©ë ~æákºÿF0ÐÜ}Ìȹcv¢²wpr¡`{¹¦±ÑÇ{RÛxSôlL¯½Õi`=ßf°ª^3(c²ö½ÀÖ1N)ÒÛxÕLiÞí·?ø,ÂÔ-
2Ïw»L»Iàí)ùì²±£ &fðp~µé9
ÝsÐÉNåÅû ¥é$þþTý5<µ§)Ù»¤^¯D& yUÏYÒxð÷cÑç~ëc4õL?Õk¤lPÜ
Ìmù:Ç;=<¢\Xr*ݤÌ46®ù ò ¡Ü|üªÔ{a$+þýÛX.Ù¿ýÏ[1
Ú@k`µÿV¼LýçÛÞþø¬0 þWtUØ Î48> k1øÐóof
¡³O¾~VyÔÍ:FgÁæí" {"Æ8398kQ}Ô^BO84#¨ ê 6äÃ
}ÜÞhFx°Â\8àb®rÆÙ®< ÷7àvµÜ.¡8dþ%ÐÇOBzlëphV3c¥è´Ì¥¾lwàº÷kàÆ~ ìå³°Zè"]áfÊ8Ócuqa ytAj5F
xéB¨ãYÍú+@fÁüyªÒ¯`$ýtáX.Ôd棨Õå>ëU7ßø ©º4àmoÖNϧÙ]æ>(i®ôn¬B¯D6,!K¾40',¾ ½xúòÄèõã¾ñëB1ÊÙ¬d#dKÉ*öh¼»L5ªBþ! ;Åá¬%Ê$Y¦%Ùc. ïèI1Bñ¨Ö~JYÀ ÝNÊ:ÿ~WY§]&R=1L÷*EåW61Ù¹V#Ðb=´úûT§
µ11JÄÙrÑÕà¢×`?NʽS+I3T°3[IN$
.zM2òd$ÖU;K¥|/(·ü),ÿ¸!î¹nJ|3V9- ãDì-QcÞßüðJ|óÁ°n(ïL!ÀÕì@%ifÈ¡d%ö
J¢
ï
5"÷K<jf
tku)D¿ ¯)ëÖjZ&}@tÕÎ4*:àþW?ô¨éñ0NføëãePYc
p
Å߯% ðÕæ2ØGðv:áC1,úEe©ÃÃ)ý£+GùBºµy4KÅg7C3}1ãæ®h
(v+Ypâu:yÏR1G FeãCÍÖ~ô°´XD@ÓTHÅÃ¥ÝöËâ
Dn·û3`G]0¡@H2qàäpÊxÀúÉyÈÆmÂKGvH<ý2`óBÆ¡wÈ-KBü =õE¹è>«{}ÑF¤v¾¹Ý<æª1ÝòþPâ$M MIygtÝI,f+0#!é mønì&4á©xÃÜ;8ÊB¥ÞZM6¾¯mû6W0iî4¤cÕp&RKô£C1+)Ï
#gù#A2e`¢1ìeñ,íáÉ¥©úáÕuÚ|§²¸a$üø¼wU 2ä-\äVoÒw-
ðô<?sr'ü`ùv·³íúprÄK´Ùî$Øþâ30ÊÐÃnrÞë_g³+§t9çvÌw4} ë`ãÉOñ{ÑÜ
;yYÇKK'\ç¦D8ÐVþ7ÉAGÅ+ÍE?óF ºzöþ. YÃvI©
ÀißÔL?ÈUN:
ü;>øß$°:=Éç)Yðí.¬Ó;©=ûn¯U¿Ø
¢ Ð
=dLÝÀ\3¬SÙ¿Z)ä@VÊ»§¢´¼ð£¬íÈYòB4Ô\BRãPm!q×9 µÀöå'Ð¥=«Âg[`:÷4]Y.KLñm1Æ6¿Ggµ V%Cµ ($jÛtþªçùê\/¥)0¾%ÕÓWÞZ
Ôlø©,]b¹I §$çæõÊðÙ3ò%ÃtÒ')ûÁØ+6Ã
5Ì)±0gPÜû<? iÄbXDß$<Á¤K®s
0¢"ÑØ`,:ãV¶¢¸Rûk/xÒ)©»¶3ðÚ.9ÎÓvåCúf`±ÎI¦T£°¹í_?ùy"6FW'iÆw^5Z!ôA«V£³ÝÂúA%kØÈÈÀ
Ûz`{Ìͨæc¨ã'4%
æn~ÕpPÕ8Í]%«óQýIlz5V¯åØrâlÔ,ñ%Ü-¤c{çÛ4¢¤á§ÇÊv; åÜâP **Hó>Ë ý²PÑÉ ñÖwsùs>G
Yth EÕ·¿¾çÕëAO.<® ×¶
Q¸ÒÍc4GB³_LsÍ!:kC
ç³GRaJ`?0ÉÞ9
4ýj9Õà÷_'eq)%PI($)EܨéAFoÞ, P1ÌÞºa4ýÏÇß·IÂÃ;¦Ä¡¨á³ð¦rÈ:5v;ó)ÔÝz¶[Êöëµ óRÅ HïµX×zLëÜ5PÖ¦Hx04è9®×Jç´½ZÃ1ô*ðóü=Ö ù,Â?s:¼¿¤TÙ{ô§®×ðvÃx4¿þ´q7ÝÇ7Îpc;ÊÙ|o=ªiïe^ð¾øOøâ\òëçpýÿf¬S?ï·Âʧ`
®ºüñc°Áp¸doÑ¢ÝÁ×þ/VUÕ=~©Ë0
ùÌ¿µiÑN°ê£ý4.äÝþ¯]ÂI{?ÅÛ~N«n9»
mI}v?
M#¡»0/C(FU[
X¹× ôÑ¢¢61ɲÑ*&
Tàªè¬^-n"¥jè¤ ¯¸ptª¼j¸U3ݪ³wjAÕH¹ جÇr.¶²DwOR'2~n{A¶
Qº°QÐ
u4zµWj0Ðó½®ì
°#âmÈËSå
(=þÚXöí]Ìηaq)tÔ¶w;© [©O#½»HíøÅ`©GÙ^fN§9gÖzÒ,bõ[FoJ4wÑÃì²õ¹<ÔmÑm ~]²?Å7è8Ü4Çfm»$®ãä"×¹Üv2g'<#òÝläҹ $iWc«c%|ZѤA§ÿ³+zÊJ_îuº$aL=õu)7 Wà·à1U¼e$}ùç¯ï®Ä/c"úp(è £°gRT(³$õd;ÂȿЬUO|@_:×`»ö íT© uZLÕdm½;q:ÜØàÕUÑüâÄ3\ïZ_±dBÒÔÉþ>zL²Ì§\>BÒäöí#Èä¸t^NrøÐó¬¨9ÔL|'¹NY®IEÓ8g ÁÎhøh<?ÙVéLShHâRù ÎO Í¿¢Ø;>¡BRü«2yt)úÑÝ=ók
ßÓT{
Oò½
((°sÎe³g»âì¾MospÐß½_ éÅr²±ÈÉb^aÀã/=UÖ
^g,9h:aß§*ºÂºJ0£ËÜ{Bçsè¨ÂËm£lðd\]òP¬I7?èýMàE\é^7A®>¯@j Yùá
RC[ïOoPK²OG
w¦;ÙNåIS¼½YiBH"+EAd¥ÉÛËR$ú[~Nç),à9AåcNâJY_ð;@öÎs7áq]ÛEשôÉ-IVBWãÚ_ãÅëº/(
x¾ØEK¿SïÜbí)'d2íæãd¹Å^3²»¤Þ¨Â¢'¶k¸.X}PdÃÌãÛGïæÀ'ÈoIfËÑ¡üu½>þdN·Oÿþò/s:ÍÃ:ͱF8*< ®jZÂÏ7Iâ[1C?ð{Ð TÕ+ª^QeTÇVé:̾YØrÀp|ÛÞt²Í¡bRdÊ4rÃÞ°âdß%_ ö Á8Ï÷vx¬ds~ÜL?T¥FJýgI°1ÚiõÞ¾ÈpG¯êó¿Á Â[r(û;ò|uhÃ
_þðüÁYºjÿüøß}j ò%@c¼£Jÿ¢¶ ħ¡xDÄ"s¼ÒÈU"0©8|ÔMqrßå#J
µØâI»§A¾`à ÿ%è8ôv{«Ø-¡ñÚÙªr·^cÌqÊ%w¼3³Ñ@ñÛ/à Ñ9ÍãØjw"ĦµñìÕ
s¼BZtϹ l&ái@:¿
Í5þgúD¥Ä!½Zi/Eªla³pWËz$Ce-0B½#]G¤=(û wDÕW
¹znÆv²ÿP_$þ+h$º4;ajSz`¹Ó<¯úã%fiìßÛ°Ñ]ê°ànkf½Fª5n
$r\Ùbl:á
ýDQÄ%ô<±náØÌ¡=!»ÀÛ2ÓéAÌZ.×w¹½#å?|}dúÍxÅbT_¥ Ñ¿é6H+þ¬|ÕeÞiÑî0ôKÑÝcLóqM`YJ)'v9ÿ9T¾ê«[(wäþ#PÄþÅÞuí:Ðÿ¶K+"Qr¼ :E/á%Ñ t|/§áöì5$ÃÒILæì±jµTh1¶¨ (0¨» #EE¥_»)¡^¹*,lÐ £Py¼±ÐýCƨ>TíÚ>!êú]3±N±^Vè¼Þýé5ÈëÝb>1cQG4 ãÁ\ÛªcgÉW]¶7§;W«åû<lãDÑ
bïN¯vUÅõË[ï©DW:Í/>·¹JC7ó!wÃDÆñÓÛ²bêv¾¦ì8lKU+Ý©ê×]åNE¯®N[ç_/ì6NmßIUZ©Ç(I¿Nïâ>Æ:`%¦¸çÊ7ÐfO11
S|zïn+VÐMÙ½~iÅö@RâD9¿",Gõíª-d½LÔp§LÕs3}%>£)²Ç¸4©
h>,r'Û±Iù0{¬zÛ=,SÝÊpLÆÑ*R·û¦¨j ¿ ¤û
'
Çg»S©³ýte ÉÍJµ3
gìNݬ¹1ô/ÿ5w±y}dëÉÑZ", ó_P¬sÍ¢j<QJJ©WKñ{2UûQDÿg?)_8%»^eÓÕaWE«ìMM:Aé yµpµ¨¨"Ó+±êr®Wþãç$Tâ4ûP+*ö`@É˵ RúÌ'»é;0éÀ¡4Tÿ´ÈOè:ÁX$åîxP;²ÄÕ%!Zã$2__P3$YYݸÁ®'«5V Ô*bg¾ÔêÜØÈÕZñ X¥G«ôhX+§mgÛô5GâÏ ±ºÃ¯¢mº
Ø´N/Ó
:ýáÈ<ZÇàHW¸·_Þf #'[wÚ2m5, ùîn
n9ºâÙæ*Ïû¦çÔ¼Ó¸,ë¤Ø¼·aqWÉ8=éX/9vÑÒJ-Å
+»
Õ'é¨õÈD«ÂÒí°ÌV.íâ¢a«ÞG'ÈWZÎòàqît=l«ª{~(ͺú÷¯ÓÜQõÎYQËÜ&ªÛÒªRïqEDNga³Wàøp <ÀÔ°>nã-°¾¼Rî¿ç@ÃÒ½½¦+0×°Ú¥¦¥îsÍ=°ô§þ¾ïÒz1ñxy¼*9Q½|Ö*Ä't
Ì%y×õîx«wÜZUwª»¸g¤/ÙÀ8ÅÞ
¥/²eîØ´;¹drÓîð߬¨N 'âø@º~ì
êϪ°1G\¬%¶SY#§£>ëû±Ö7wyTKþ-ÓE
§fJÆæiÝT©ÆyäRÕÉì5*Bª§Þ¦>´2 ÇÐÊûÆËÕ ÕÝèäÝ×i¤Ó÷Ä+o=N3ÃJÐIPÄUjw¹TaI¦t¥Á.NcBaÉe¨" Zž·y)w_§þÙ0\M÷NwÚ¿KGÕõHuebÕÅËÚ
´ÁU(8×.ÍÊI_èç@_÷ðe³ñ3^~Ê@P)VªU¼Ò5Ce]»Ï¼U·ñ Ìv@xÓú!ùÒi¯Åté9FR~pãõ]të
¡! Þ\éßZ¿/6]Ü©ÀGéïåf«ÙÉ1Ú.¶Ï~V=ëIØ÷«×îæÞZ·yëÖ§õt.Ï-`®*/ørr£ú3ZÌI$òqVØïÄ߬KT ¤üï}þãòòqûçÔfG6ÄS]$°ªÛEr_§ãX
rñö/s-Õjy»OºãÉþdà}@|¿ }ÉÛ
¾»åp
¢'\b·dZlÎ'ª´o¶¾!ÁÍÙ9
¼T¿÷ÿÈGÉÞÔÁT¬Wì|j¨÷"Y£^Ú¾ØÞ¬ÞîÕÁÿ»I¬vÔ`Õ¯Ð|ª8ÓÀ[¶øMï*Ô»î :º^ýñþþtuG
endstream
endobj
107 0 obj
<</Filter/FlateDecode/Length 8722>>
stream
xÚÕ]YäÈq~÷¯èÇMå}X6 `%È0Ú7íÊ&E=È2,õóW&3YÉêê½Á ØI2ÏÈ/"#O}ÒO
þé§hbÈSÊO¿@Áoàÿäÿoêß¿úúéç¿ÖO~Ê1§¯·'xCGÿ¤í¤¬xU^{µùYqVf
ÊYe¶mÕzÉ*æ¤òuQίÚoVeÌeq.¸Ù,>)·:}qÖYôê/oß~ý¯Ø rSNÚb:§Iù Ý¡Ö1JYßrþõ«o6/Z=%cå=b:mÁNFÙÚ
JÿþÃïÌׯ¾½¯à §ðJ¿6Ï,ü^ã¿ý~mSiÔ6 6
¸·fzꫯs¦ÃW^ìd½yzÑjÊÊÑ{Ú'èί8Ëta
£^í%i*1ùª¨D¯6s ,¨Y%*qqÛèB_LPæø
ä¸
fÏ%~¹½Õó3Ö+®TëËL%\;v%[éÜj¤½¸ø¦»X!½
%.f§ì=Óg^=¨RåvñU%±j[þ×ËE:´xQ~¦ç¾rV\W«}
°í¬j§3/Äó7°^
-5) Á$e¯9-ÌÜ:P~ÐWº^BÁ¿*¤J±@®¹w!\hny&OÑÇn.¬¸xg#Ñ
6Þ5Jo|öÐ@¡G:Y
ÌvCÃ{²Ì=§£ÖÉOQgOMãTph>°W4Øs
*q~ü]3ê9
ªã)59÷Áa¬£¬íHÎÅ«ø@öÐfólîlòÁw
+½OYÞn;ùb$£Ñi¢CVê.ÆÑï|6£Is6zuؼWlx¡Á%Ôï-A'óZ%gÌ¢j^ 6gVô7½ãyïcßT×
|ÕF³*ïf$@\Aôv[ßnÇÌaÜ
Éã¼.X(¬{üÓè«§#§mäaJSÏ-)Ö¾Á8ïIf¥
Ó:À.Zd%(¶
ù2¥ò°tØt@b )0yl:ó@±
]ìMµU£'ßWݤN'ÔVß×? ÷Rm[«Qað`S+o\@cÌ+/3ßÒtóÕ$¿A}±ov°6&»ËÔl wX2f£µ0
HÄ,nÓKLýÔ74ÖÑúá ©c¶ÛÔh@*¨¼»mº¶ÈuO/)NA"ÅAò häêͼXExû^¥+rSOûteA
íÚKØ_ "JÒvĵÆQàí öÓ`ZyéTÚ
C?Lá6"Êd' {¡Éÿü4Úg°=MÂôb
´#7b:eSh·l #.9ö û$pÝû5ôò8pÀ
^4lup&ÈÊ{K"û"@>ðº
ÐÅØÐ¨ñ¿y.Oäî \åGѽ
jqS´UÞ|*3{èlFZB>ÐÒF
© ßç?qSPFt>iäÏ`¿'dj4ÚO)jyVûélÇù49à'¨ùö;nÀàÈA°^f`-+²5é
À<È ¢
01F
`ary#NB@]2`%ì=¾ÅØJ@!è¨T]
ß"u0(#I( F^w â¾Ã3¹ÄXnØJWßÒ+¿îôµ@ÝÕB]:O(e
Ì~!~sä+ýFó@OØiÊLæÈ½9[¨S.ZYbm¼<à )ìªÙ°Ò+hÏêtYQ![ Ól«¥¶t:dd§ükÍx Yï,ÎcýÈ/vpAÔªp{YP¬ò>ÃICS S)Ï~AüàÓ[ÕÍsðQ¡iÂÁË
Tßbmõ¯òZÐÀ
úPÑ>GE%övÐa4µ¢Î¢0Éù
ÌÝê(dBDÌ(uÜã?¼Ê#uè <¤sUÐOå)ÞÀé('îê÷öb®#l(ë_+~ÀR{W*51*Aã 4¾©å*p~©J%¤¢bíyõ\OÀ}%:%.!%¸7ù6(Ýr¹rIÁôL8ZJc<:ÀJ½\©D/×JX«ìB%(
ùªÇÁôr
b^¦Oóôq=%iu}ë(ÏKÒ1Öq½¨uP"ýñ¼B·ÄieËìØÆM;
dtO¹T7ñKy¶C[HÆ&¿î[Þ4¨4ñ¯¾´ wè+rlG«òöâi_©<Û¿±h¯á7Mc^p)
OAC,ü+áUü¶þ}wi£¦@Ô8À7¹°k ¨SÜ%ywx^b±q"YÄÛj¸ýÍ©Ê̺)h[4·7m½ .óAÕîaà|9yºímIÒÒ
ÕhRè_8P?øu4áÃDÃxh/´lIPª·õl¶RPíÃöÞõÂ,3 ³Fiø '§¢+7d}ÍHsÃÃÔ2JýZ0]Óð4©ë̳´°¬Ûçx5ãw²Ctç]ûjYÄR«=jC>¿v¸Y04Ä`F[+L!rì2Òó®Ã0´2|vb&´j×ÅÎa¯!÷+bÂ5ùgÂ`G.Wfã(séá+qx\ÙÌ%Ê_VîM¡}.ʲ°bÄ£N"¼åÜÉ
¿çŰ~ZjÞD8{"o/X.Ür"V QygÌËâ
WÝ¡æPs¥Ñ²Û×ÑÏ·b®R¡+BÌn_ÕÑÇ-Ñ3u
J¬óÁïväsH!г0z8 A¼ ÁJ¬Hà¶·!kËäZ±KÒ-Í%jUW¡³È
°¦.U"¸S\{ºé¶eº-ËFwÉvÐKgä«ö'4õö
JÖø]ôË&=`òxö@ Á µâd.ZJQR¥>hÑJ@KÌPx² ,jU}ÉfÙÑGéFí1MCYÈ< ##âp6ÕÀºT¢ý´¾fÒBB6ÀÀVäßhïDØÄGKP30¢¢OÝh _Ýàmás¡pétÕïéÊÀ
ýQwï »ûb}?
µÿT4çoFÄ`+ÀȰ§PõcÔt½Å
l¯W_-.7H='ë¢õqÊ)`¶U~Z!Hþï4Êáùî+cÂF¶T´dا«cæb¿ÿx´% 8*Áµ¡\ ®´h|57*¿gæzø¨æë!;ÕCÜkÛ¶½Ä
¾G&@z¨·ãñ ¤sFFTd¥FzhdoµýíI6³5êu+¿G=2ràÆ\ñmC["¦») E(aMXL¿,]9ÒClèwçä}B°ßÉS|lìÚTÁàF´Ïÿ=Øi2.>G^ Îãèé$ÊËATQúDçØ¡êo¬;^ÚÏ
K)ë
2æ`*@Ðî0ý0@D6ÚøÐ\`UR>¨E·ûu¤íã]ÅsíÉ#ôk:;0hYC~`©ÆuµþÐ\ÕÞÐTU´Fæ7yö§y8ªI7+nÔ"OyIg[Æ77kãôÈl`¸án¶Õo)¼ò|º¡æe¦èÓý®Ã¾@=S4f(â édw½¬ØwÐê4ò6cu"fàzýM½Ðs"jHVhÍPAyòC%ªÉjwh)(ØvA0IL¨Þd[6Ïè±áX8ÛjZÉø±ÃDÃi¾ ¦ª{õa³
qQ¡3[AEUA`UlÏÙÄÝ*~)OÂüR3&MAÖ(5ì§óP&"^T¾Fá±_0&WXj®w¯ÍaV§Âj¸üð¢÷ݰbR¡øBÑ
[<àïxw6}AM:è¼pº
ÿÓ¢£h±é½®¡ÖÇ®ñìb×hz±{äÙ01^OZÁ{ÓR¸iTÃhV.0DKÓpq2À»ss`vßÂlÂ!CJÔ8Rð¢ZrM±]àÂnÓDáìc¤o!:źZå6
ðcÃÿ;<ªÍÙ<G>ȧcÑål[^l6&e{£*^oñfÀ>j¿5ì0W¶Àz@VvÆnF¾¤5ÈÊO ÚURÖ¶·ôÜê×LÓýó¶ËOüKVBÚÅ&%Gp~rÇ
f*ÏW¯pkVziÈ*KN&Å¡Ä6½+wAMÍb'Ñ8o¯ë¢Sö/dl,åB¿qfðÏ6%1UbÊ+ v%b¶Âo66gM±="AþxdËýWbߨ1¾²qrdB¶o)¨|Z*]y-óZ(Äp`÷x]CY×òر¯»2f~Snûë&Ï)ä% 1¹5ó-r
,»I|ï°sI9KkIÈ*Ëä¥ja^Ìë$@槦X]Æþ!®Ñ«h~«eÔt0/¥ÖùÐ@Íûbl`ݹz~é.Ybô°+o.tM.WÕøç¿¶á)°¦yK{Y¼ÆÌ#o!ÇwÝGìí k˹º¼äùi$Zo<z4ª53k½v2AûºiPÐÌ>L¸ôêrËN%´ÑW|=èë×Á@^ïQÒí[sµ6
gÑÄs!§ðkÁïbÏêBè
,Knë !Q¸tÞoGûeHäk¹»D¸\3r'êø
OLHºx<{6)qß»ñêÈßE£s¤vÒÚÕ© §q7m{çtÒu}wêµdýþà¿eaT<R¾¹-!?¨Ï¿Ó2¨¯OèÈûMÚoG¸ãÂuÛ
Èèeß5 ·FìÂÐInÝ~Õá¬[v[ëÖCÓ"ý¥}°z§usVø£H%{ÊzÚ)êÕ`ãÁýkë>È|UIä #_°$:!\0dÜÚ|ëGx,¸xÌÊϸ'?Y[lS§Ax©ßì/À¿ý4rª
3Åâ§¹.42q$)¨.¸-o-2zv[W:éy`¬ÀñÕ]wì[ÇÜ
ǼËñp,ÌÈNbö}S ð¨9u/u@±aÀ'½ï_êÌmzz ðfñãé6+0Eò,16ß0OuyîC]VÉ3?ÿ⬵~þÛÐ
tGã½úÙÌÄ0®Bf&CiÑ£±ÃCdáÏÎ j±>ÎÇME^übÜoù
äyÖÞ߯'Òg,ao8
²ÞËyáÓ]déhâv¹ëý]ä@0¿`×ÎønI:Â"nÎÃ3etªÓ¢*kú«RAêÂ26Tm(ÖAwV«åù£ÅÐ c<¬Æ¡·¶~½ßÝ®
¡`}JÑ
§l }±WÂJ÷¤N`
<òGQ¨¦1^µûprí[ûÂ|wqV_ðPâr<;!y2Í~¶æ2ùW)5§´ÞfD{c<!?JÊó\ÑVÖ5_Ú1íÔìe½]Ì%FaÐáÈ!ÚÀc®ÑzÇÖ7rÄj,p£ã§ØxöC~¢§¤f:ü'bÌ¡-;îc6ǪÞ5';ØK»3FN¿vëÁó¡~±2Fqã2èfl΢Í.Á~jjqW ðØõ_Ì3wL½âÅo¬x½Æºç]IõÙN4ÔXbRË)g@¦Lr2
·Ë|#DcâwU^;ÉD%Çkq
«§¨h Dc+ÞCïJòC££ðtE^È8ê;#ÐÁGqÕ
=Onj@Wñoëcî:·6T»ò÷CÇh´1Åê¨'Y¬hßJj\ÀÐó{ÒÚäHA<U$}¿Ãþ0*>»{ªd[^¹6ôìkÛP´;èV ûñ.
&<ÕÞå#ÅÚ÷ÏCkLøqØZgʹËsU äæ/GH§µüËxur6ÏB¡à&BO³!n1HOû
Óÿ{,
§½¤@ðK©À}
¼Ñ£Òzý°¿!~§zÔw& ¿îó¼Üú64«úþb4 f2ô©Ì¹7ÕO@C«mOëNû jTsNB§c0¡íL2«0èmð©;Ø U'¾:¥Éö¨
OÓé8²×?[²U*ÑýõÎ9À
uBòå<¢àÕ\µ;¡?
ïCK)yúíWÍéðBÖ#ÁÕ;áöþ¢¶w}äy"z¬wQh(æ±äª×Í5ü@Û¤;í`ÆäîBTQR1ÄüÇÐÊÌ~äÿ°´=\@øR1ÀÈ}?¶áôÃËüýæ0±a$²õ7(l1í¢ÕwS>Ú »K5Ú8J:ë&×ñjÝ»Uòlãb\='XÀ^ÌGvö:q¸ÈæÌWíNÿ>Öüù Â6h¦Õ+þ>bAÞ8¶
Æðî4ÿ°¹6urÆÅÖôc|8Ù:ºÅ æT¶÷F6tG?¬AP§#³?µ ÔA#ÍÑ?°fö=nOÒäy`\æ½qÙ1¢:¾5æûW0LëÔN@u@3u"ÕØ¬Vª7kÑ1@ãÓÈkã'ÕøS¸¢Ç~î1}õ&Ã` ß<KЬó:¾Öö+x GÝØO~!l^'X°ñ
¾ì2J6`'³;¹1$ê0°oÄ"Ã"]*¹¡¯&Ó$\°_¼yFå)'ÛxÞb°·ìýÐGÅ6fÍÉw}"ßå{(Æý=¡Qß
Þà¦Ý?þuàãFLþÄNz~n!ûs-Nlúql4ǨÙÛ¬
éê0},m~ÉÈ4³:Ç÷9+¡×#ÐçpÍÔFü¯1Ýþé{Jqü8eÙWw¥#!$ô%PµÅ«ÓbÍt¾¨KNQ¼ÉuÉpªº
~NÆÅf{"Ï8õÌX¦¥&:Iu×xN=æÍ)N_üAçpæ6dCÄÝßµ-ó·$¸¢ÆWý%o¹ð ìVXøNa§¾)úºÄܲ¶äuµ8Ìar¿cÕ Ò(ê-Ãný×c~¸ÍàyÄ-Pg=Cæ6ÀÈí³üXh³ ç+NW8
W]®w$E§Ø%´¦N<à$ÊHºÃ$>öóFüÍ6Nù§x¸dô¼;qÙC ÃzðPÿ.0p1¤&¡]ªùX¾à9¬¹|q_ܰ þp°à»=_bpÊùÌÑÞa},Õ.üK7ÎäJÕb øm&×åNÚÂ=L¿I#ypÎѨØd+º|`Õ]mfÏD¢7=Ì£|hÓBÅìÓãgÊ©ó)Õëª0¥&1²zF×N/mê$âÊNN»YâGÆq2Ê}£%÷ÍVRÞP~LL\cMI©¥$Í%Á¤]8di1ó&e¸KsÇy3(·ã·0MÒôI,éA Ò!èôõÚ7S/õí
Ï ulX,ôøJÉ÷Ïü·vípÈ{R$5<N?¥¹«w±¦|]{ËxlF·Ì|bÔd|¨Ù"Ï
gLµæð
KÉXK
Â7j2hJ`"ÙúÑK¦DÛø,Æ¢FnÛj
ÈuYH4P&ùIª|%7cÌbMÍ¿~³'¨¤fªöXP ½\Uu2ëýe£kÎ[PäÓW]s¤*òícaFF ÉfOz׫L}(À]IuFAqÖyEécÙq`-a1Ñ}ÈSÕÃ1¿ÿ^ÄïNî¡aL@¾©x´f]\ï(¥õ0¦À¾Ô¬{¤=âIaJÕ#ãë±9ËÆ^ ÚÓ÷ÑØý`~aºlöÁO1¾(3É!ûÚÃB8+ò¼ÆTB/J+éÌjæ %öst@ϦNónÁî¦ÙÄØO³lþA.JÓþPlx`w!ÚewC%¼Ð¤ªxp²-H d]Ť`â°ÌùÁXC9Lò*ÉÙiË(gSl3LâËb²-}m¢2bjåAc¾£1.¼Z)3²?Iìî8FªM-8Q¢Ñ°Ö(1_Â(%1bôÝ·ÏÞxÛ"Âæú*4ii)÷m4ߢÁÔ0þnj4ݧÝ!¥ÿf·ó(Áú¾ÐXï¿Å,ýf@¯ôíQèy8ÉèS¤L{ÅH~ñOïx¦ºß|&ÑSx*RMËTÙÎ×EøXà)æÙ³u¼Î¡@É?(»¨$>à ³m*ÝJ>C#X-+YÒ[6»7÷8ì6y ÛU(G&'¸^ø~ZK®Obë$ó£äf1~#>JT·Mlô yDGô)
Çîg
ÖIÅR¾Áds&,AtF%Ñø'¤ÔÀ
²\«§.K2<> <1W¾Íè²Î°ºt¦MLoòÓÃ:·_ê4ÊLçxEöð
¥j6;ྦæ´ä1ßõiL)$%¼püD)Ñh`É;L<áf£v>H½!3è:O@ÔAçÐÅ% Deð¯ûUXIÀcÒ} 8!Áã¨
ÉH%LÆ Â
+y
}IxY Àp6þyÏоdÚ$yÔÎLâ%©ãÊM
Å{jŦxÇ/qxÊv°²ñ6p¬ÖÔí¤*KIJA¼ /YJÍ®êÜ×Ê3¼É\Ù'°IÓKMÍ\ç8É3:\kû3¦VÊð8úÓÎò½\]õ>³zÐpU6µ5dI0ìĽ®ùëQ0o ¨CÍÄÕ(_,/½¢½oÍ$·¦öçú0)AI¦ï
`X¸RócWÇB\)¹II]a.jo²vIó®~G
úÜÇO/ÞâzôVû$8/çC¢Q4;^}ç©÷y^s
oôYr®GÛ3ãöò <ü]¬ÕÖL9ò©pjáq Ö 'ÞÐï¼àg3»VÒ-Ïmqî^)Y?êÑ$èÊNèìkq¦øhÜÐjráI<eÊ+º$m,»îLÓÃ0:l{le¯ ¤EMÆPÀ«»èkýæTrô©8ITîÏuaâ¼rRÓäï"ãQÐöÇ>Ç*2 %þY7zTMÏõ*©å{Óºc2¬^q¨³Ó~÷Mu0cTR¶#P ÃúêÓðËNÞ·NÒco$ÕsMÛY B,yt±7áÙK´X>¼%ç`#h0ñøÕÞdCîáAõ¾B5ø¹
Ä1åüݵuÓ5ÀA}þÈ&59¿vdzXª÷/¿qDþQËõe}ÑÇ*Ð9ÍW#ÂL-²þpÖódY²z $%Ü¡(Û\7AºMÈ-ÍöÞ3
ê*¾½8
ÄCU#óc]ûa3.c¦`ücò,Þø¯{(½ ÐøzÆf@-m²f
ϸ7×}Çêc+²ý°Ä'-ê2ÎáÚPwö8Ìgõxp*7ªnÎu¤:¿S>YüF$2»4¥y
ógÜ+Ú7ZtéÝ%Ô ÝþÍÈ©l@ªØ¦Þðî?y3ÐF_y9|À»ÐW°ànºqîóÀ%6鲩¹ô1ʶXâç Ï\' ù3å+ t¬Ç$Åú"ñ#&lÜÝìÃ5cÇÕðKÈííÇÇÏ
"_-ÌV+ÎZßy3Á>H5¥ÀWÅúÕÍKB5û8©eÇI'wc3Òi©2zªE&oOü^ñ¨¤ÒÄ®Uh}îÜ[ö§=Ýã|p}ô6tiþÈ2ûî÷ÏöþµxÔ|«&÷çfÂo·ïòW¡B9sòí¸¯¾ÇFÙÅìh»½!÷ß`MþÀeâǹf.·«vðȶ{Ò6,éV²@ëú±íɸô²0JÌɳÆÀÝ¡ÂYìðÝß¡×Íãef,¿|r¼ÿÌN|vo²' ?1à£7Ï?zE¡'ùNDJû YÇa£!¸ïq¼ïf¨ãÖy¶úmý'M?[oò"}Æúó&¯ûÌ<ÉgòçDü¼Öolß8)¡M§æ«Îhfp«þ
Öü5׸õ¼&¢?q¨éNÛÞ³/@ÿW(AÜûó°¿ö¦ÍÌRó-þõi²9ù§ÿÛ?ÃP¬óÔ\È{É=ýþéw'£;YB e |æc¢¿¼AðpÆï&xñK³J~©9Å8ý6fÞ&ó§#Ïô"Ï(ôÈ¡/)p Ã(Û®Íè\
Rr£C9ªÞ¶
¿QëWÂlWåÜëºîáR
úã"åtD¯[YªßÁ*ò^z'lèzÕW%ÖÁQu¸æê©ËCE¢:¾Ò$c7«]øCvìøTÿp¹0âB¾9§gc®ìþPì×| ¯säR3æ=± {XzôÄqJk¢eúLN'ׯkøøKJßËUV~÷Oÿ²êg
endstream
endobj
120 0 obj
<</Filter/FlateDecode/Length 8436>>
stream
xÚÕ=Ù+¹uïù~ì~P
;'í`ÄAØñxÞl'Pi1ÄÈïç,$,±¤¦ÇHpq¡êZ¸}ãÛßàMá?xú-ø4ÅôvúÞø%þÿcþÿËú÷÷?¾ýí?ÂRþíÇë~Á½Âçß}*N]ÝQÃQé³WÖ(}½æ¤B*]feÝÜÕ¨d½>ÍÖz{Ô³Ê-¬±Æy8»Ó·?üøÏÔ¡{³S`¨GHqRÎãp¸7¥µRrW¥lÀÿxmëͦ¨MþNÇ7{0V¦v`°Qoñÿ¬püø{km¾¼SøUtÍ;³üÇÏäo·\X:5ÍBâ¢M>4½&~ë~\¯}÷>9É8ýv 5%eeZ¬ºZ¯ô)ª£ÆâD;ÓG¼o:º7É
GÖA»Éé´¬ói< vD~¾´¬ÎYÜ{_¶iZÑiJØlÛÂзIxáßVÑ3_X¨ÜÞËÅÕ¾ m®|A &wpºÜ³;óQ>7öjiÕäEy|NN.ÉÂIF@0*w¢Fq¡Ï<¹ ¨%qI¦p½ÎîFáªÛùÊcº]up/ÃÌ ûXºY';
N}Á÷qzöß×í/-Èï?~ä7R
n2xqIA¬8èÚMÚ Ö××Ì%E}EÌ@ì-¯w
ÖLÎX¼À_ðCàôiÒPpNî:ÔI{¿{ÉÍ}Ã}ÒºÉEA.'xÑ·|÷ <_ *Y¾PguÍ7Z »à~o4^8ìǺ#~4B$>Ñ/ ¥Ã$C 5hî¸t RÀ/øÉYÓÁ_RS»^óE
¤³PƽwÌåOòÕÆÈ#ÆztÒù+k~08Ȥ/s 'y1ßü9¯9ÝÑ'¦ÿÒº»ÊãM_mîÏJLXu35Þàt\îÊå\ÿTaæç6@¤_çÁâ`Ü7p«6 9º)¸X7v «à:[F¤ì5¦#;;Qnú%êÍ÷óHó/¯8ø</3py¹½,@B@4=$о3ÞcOÐhÔ®6>6¦N)Yr®§dÖ\Ïè³ ub^=ÒN¼¨´ø$8Ð× Oþ>ÊOÚò!¢ËÐïN]mV
1ä.e2¯Á;ÂkÀd^Cï0¯Á;Âkð@Ýa^w×Ðæ5t§ò(xD×àcá5ÜñjÑ
ÒP
eý<%ïPcjÅ*w2(r8êRºÜã
Eù}¼Á×@¼GÊßê[7'ËrËÂ
ì)Ъ!GWvw«0úJM(³jï»×;J#Ñýû u¿´ÒDq5½Vô«ìÌÏ
ÐëLst&9ôëT~Î÷
Nâ/NOÚaFIPzOù{ÁâC²R¨þûo?F«
¦Êb´Ø° ì¥kYZèD¦'ü<æÇ>
ÖZ{&M¦ $ѰTR¯3"Ådkbj=Þ%Òµ¦Î½\éwCúÁj$ÎÒ¾È0`tcPB`
7oã9ÃéÂsÕüq(¦¹£AOÉ.hº8Vëáx(Á¾aX'³IAª9·SÍD0Tç¤ÆÀñÍHάûsñË|,XLtW}&j_>b \ÏpQ1dxH½WR ªG©cÑ ncNiW^G¡À¦V=pfYçý÷ï#ÁsrÑ®iKß/*Ýûï?ðï]YBRN,Lf4xD hUµëö
4£RPI¨LhL(Ü©f=©FH5®o#L¬p=YêtHQÕ¦ïÿRFZÝzÒqyJÉo¯CþÞê;_ºþiµÇuüöÝ%
×én4ª|«--J}³sæ!áÜõ¯UCH;Ëkï÷2Ä ºkÒÙ/oÒÌã&½Øb=Whô_l2¨ñ Mvâ5 ªdצP¨¯=;Ìanòéí~1ÕÖbÚ¬£T]g^¬x×É<Ùtú C*=%û²,@ÓÓd ùEÁsµÂó¬½ÿýÃBlYÆCuãk°ÜïÃrÿù}XþJ÷±ü`ù+M>Àrÿß(«QF«Vðì(7<¾¼êË×rÉ#¹\µ x&:¬A}Ö<Avcmÿ#i¢¿%C-É:ií !+
ñÓëI¤àÈ ý4È¿L_ø\.ü.ßg¤P=ów]|>ùØF³ª³Ú³Ö³ÒYçª>8îàõ×%MÃHP)OÃá|
¦&MlêY
ÓGáWö_±Êãò(8rfÄý¸"ɨ×Hù%ýFÊZMÂäÂÂ÷ÃMP.F+Í
ÝMW¡ëظ Y¸ö¾ XÔ;4
ßÂK¤½=q¡SCõ'ÅÅþþ«ÒYì¤iÛvö£É¹¸VÎþ}Ä´pYàÆXò`jÔ®Äê¤â_qjúgYeÿ·7
)c´í¬#{§Xùjóÿj3- |XêÑÌâ¤ÝoNL!ýü9ðÍñ·=C¶ÝÏ^oL1¸¿âye÷v3ÜáLl¤ÈSû~8æd°xA·^I:.Ôh·C¶ë!¯aIJ£IËü8=ÅQù7rm¿Á½¹áÞÝ`,JÿξÁ£ØÍ1Û Ò)fjüb´'b9¸~U¯Êùo#Z(ÛþÝÇP] ½jàf¥»ô«!Ñtµ
!\Å Ò2Õñýs4ÀÝv°Kg¤å¤§)¯þûcHháË[³ìÒì åL~
ro£ÔÂÉ«¸JÉ>ÒJ|{FÚ,¬h×Âå>â(Opç÷³8NO3=sì0=Q¬¿ÃÞúâ)wÙýäAZ¡:ààyr5ªå=ÑrlÖroÙ®úäS°½5Sy/:XËm2<¦í0vúö?Ê U@í¬ø:XCàV6Þ N£©aVi~·ªá«=ݨãVVb^Hãá¹ÊD3¹´R Á5éæE¡AÅ¾ÊØ^5K}79o®¼RÇ©¢&?82¼Ö{¹¯92r! $1¾$=b8ÎÂ
µÙâÍÚoZ[üæ¢ÆVP#+ò¦fUï+,LÏÊsi<çGäTåvÚ2é´Îv¹kUv-ÊNëÎÈÿ} ÝDR~0)áEÕM°5%.±zðºÕS\ܪ ß;Ç0
nÀ«Y=vyåý¶á(0~G[û!L¦qHQ7*"õ²WF:6CÒE&ç»9SdÐD;H«ðp$útÐð
Eà
oÑ
4Ò[øHAôHbáÓ(Úáh+Õ(-ï-fl k ìÂG ìÒnÌßt$à/dÄØUüYÐà£Ð0Y©@1"É¥í"Ãh©,.¸\£¬ºzˤ]'õÉÑl¹)¦ÞÉ-ë¤u^'mrsxGÓ%KH,Ã"*kx ,päGp&ïêd¥nÆ,óg ɶ²¯½.ñb4\
2Íë±g¸§©Éh¿,¾ÍÁ:ËÃ!h*cÉÑ:;æJÐÛE"Ûÿç@¼p1ËË5¤N×Ⱦra]Ú[e?µøL«Ð¼öe/jçIcºøpç÷cìáTìéàÿÔveehgù_(¢ï©à*Rzò$Ö¢ÐÉf±mZ4Ѥç% й7ÇÒRÅø¤iLÈ}Q×YùªòÁø4ëȯ^¥ãÓ̵%enpÉÏ´
±kHl¢m;s)o
]ðÖÐ?]lÞ8Üß8RÏòg^ZÿÙ dx5¿< Sÿ¢B$zºh0ÑhÈêÛMoù§ &OÌÐÙ±-¶Q,ÖQi»¶3 ü]°}i+A¾ëû¸L|ÙѼ¡~k-é¾ó%màÖM$¤]|P(§K<iwú2joL&{ôY¥ø À7ñcF%ë^#Ïqî¼Ôø6Vp×à×c²É¬cÀM¦_¯I
6¿ÿ)ÆÌö½÷vwðtåHµ|4S3A§;ßJZ±Àj\8
¨£Gòy(n}'¥<d¹¹à`ýdc¯ôZãÓ@!Wj ®.ÁTcuÀC7àAQìÀÎál¨~ß}Jô<uà«%¨RZjÒ]1hQ¸9T_7úÃqi²ÌØö »¦}Þ5í4Jk +§;W®},§;0òWV¾Êb/bVÈQËôòWy¢$éN!âÅË0(bV@
¼S«ÐË¥Hõ¨¬TÛe#iGgîJXe·<çAt E¹ Dí/i_γ4Ö<¢rH¯SÃÓP¹§`¶:UMY¦ÌÃ8Ëâ°v1Ë3Z
fùÙ«ð̤é{g;8_øÏÌU
! rò¨Ò¿äÊ`|±¦7roâvQ£Q«,æù»¨³.Kx6ݹp0¾ãá8çGð)Ãf UÞ¿ä(BE¿.½á(ÆB'#õIF*ñ¨Ð".³9lºÑ÷îÁ¬qú@ù/Àí#îöÑÝ»fbDY~¢4çib·pYÍ1$°ó6ý /cßàwG|ò
ø*æ¡}1ûB¹éú/ÈBw8.Rºð£úy
ÄA¼Guñádþ(l/5ðBPîó£
ÔpÓ7ÕÃÅF´Û
zTàq¡$s
eôCÇøXÇQÝ#Û¬à®õHµ"ß_cÑÅ~¿' bÍÖÝf°§äêbÞª OÊÄpd¦ïA@?fÈOð¾Z$С>e¨Mæcù!>+³ô7Ã{ÌàrÔYªK{qE+¬ì0Gàl cælg9G%ùJ3Üã@çÞÌöÊÏNÀïWaÉü1Ù!¤³CH©kð>ÞL÷íåÂÃ*69³ÕjEÙÛ=cS¤ìÙÈ¢¦ê«¡l íÀªS_BÃ[g¾ÙÐÈÝ<±]Àku;ñ«ÐñÙe!L°¡e§b
dÑÉn¢w6ÙÓåB($Z°GC[cìùJ}Õ£g
Û' ¬Ø§
ôááÅN¿"¾ñ#)EEñì%ÞïÐPøDbâT¾C¶aú¡BÎ
ïÔò9DoäïH}ÎÊîóã¦É¢c=ô9ȸ+J@ñ$¸¤à±þ½D$»{[*Ap,ì?$/»ÕÒ)íÉ"E
Üxßµ¾¶'^qCàÔL"P,ìú5j{YUt|YlDÇZç7¨ÈIƨÕ3ìèìà³Y:ë<ÆîÎ[¥¡&O±]jãCì¯Ûi4½ÅðÆ
@t¶}í¯<aÅY»®aʨk
q?ï3nî6ÌyÊ0n<?u°cÛZª8_Ùå~
÷KÉÈ~x\ ¸ö¢¤Cà ~Ô[øqò±O2ÜOÆëFRì£/T-ä}×êÉ»®Í¬w+®W\®x5-z¦)zfñw¹Ry }GrHéQÓÒÎÈoû¯öï
ÇÞÃ,Ã@"ÞDO»ð[4DOÊê'ÎyÃ*ê_8ëfÓÈ]h4ç©F÷ºGªÂ]3EÇÆeÛ
cÕ
§&]PÍÉä¿Îù+¹ýWn*ÖTãCS¶ºraä ðýV¿¨]dv¬gV«ïyG4'?á¹IE[éÓ ^µcÖ}Mä½pUa¡%è-#úò|
É÷M³RÙÞ¢D@Ñ" 5R»;éG
@Ñè'´P;ÑBR±¡T¢Fèy[èËàó®9ãEE¿Ò&ìå8sλ1«ÿò&äLê³Rq EÝ=!½ËzÞðaì6£ð ð [GHáÉ/8ËrS°jU|ïi+ÊW<´E
î:Js©ó_ê7(¨#/8û,ÿÁÒQ¦â!
kD
2n¼gçÅ(+¦%o©ò2`Â(%°8bá
¿'Bb
+¿b¨âXªÔHùdq"åy¡áò~ÎÃIþûjùy©®#jDÑ"ügréMÕÁLÎ=ij´0QÞibwãOYGɳ³ ÙJ}c¢Û©;ªÀLöpTëM¥P*Ë«0äJPJ̨-ô~QáîbêÈ0±
M.2Â`H¢HUº`ÌNa\ÑÞ\Ö$#"! k"plÐô¸êrIØiç!e&Ëbe·ð`13xKÇJ"ú-WÉáq%\4mEçâú&ùÖç?Ú-*³
äÍ[¸ß±w?! _¨<°à¼2~r6®L°p.®ªZòý(ÖgãêAú^XVä æµl^øÃ-âyDÙ¬Ezû¹U6¡°ï°uTınkY*÷|ksòÍG+)¤eáh¸Wé«ÓÉÅÐJ¬ßgȹQEHèÄï?Æü½ÚÕÇÏ«s!JðÇ=J÷â
Pn/×IÁ~;'Éu¼-.ràvWù~\P¥Û´ÿz¯íMø 8wmëìksú«J
¨ª,°_RËGÃðh«9}7,áÃ_:Ô"©¬KbIÍÀÏjÙ\EüÐ~Rl¨ËáYÌÐ&På,6\¦v/¶y]ê~RA:®Äuæ¢ú"vvä:ü·C9
b£Yìýf±÷pÔoSó`ÃÑJÜdþ
! jå (QÎ9¤R°_!J[Ro¬-Î1ÝË®«+ÖªT\´|~^k.Os=æÈN
ظ£Ýum5§óÅR¼·ËÔ})paôRLu'!|ºÌ]¹ë%mþÆh2SÅøM"lUjÛuU¬° É
øÝǰM-ôÃJÈóh³¦)Q%+uÍdÀS§Ø¨ÖwÛ·oÊm¬vÝg^ö¬X¤8«£¢ÇE¢þ%¶ùHðëêU!Þ;Ò.ÄЦÛÙ]ØMîa
fËL¢½7pS0³DºhI%å°ØWÅ÷ð:}£ß·GD
)íVqö6¢/Kv¦ÿ
À@³Ù5¡@¥<ÚÕö±¦Å']»£q¯ÇÕ$ËîS¦\¦±ß>±1稱D±©s¢ec,ìùap¼ªEQ¹ERnú¬fö=ÉaF
a¢Üaà³¾;ÑÁ+÷ë¬ÔX|$di»P_sF`wD£I&ô6*Ö(uÛiµ%N·Ä=çzT§5aá+z[¯«¹/eRf[§S=B a¹|Ö¬aB$Wt^HÉ;døGÁ<Ô+Ãi2ãXJW ç½Y<ò1èÉ+ÝS¡ðb5wÓi.*¤Jª©Ì5hàIàkºzñ]ÆÎ=÷¸ª´·øÇs
*x¿ÊK:Îø¾s}6æ¶Yrdgïb¼x¦,
À7K9GcY_íaEqCݨ¾ucíåÍ»ÚBGi6ròM7è^{pî©q·ú°smüÈM²´Ç{?hs]?ëM
"ñmXxoç0Ó,V2RðpSíê.72¨k;yÔÉu
r9½¸ ð¢a_!¼¨¥aÉàr¥ìo.uºÔQÀ2GáëÒ©ÜÑ|gÃI}Ò;Ó§5¿rR;˸ÄzAì¢>ÙUwÄUAwØU¡]jÑ$ñâíÜÈ=¯Æê£ñ´ìôý&çr$fD¾Ä:¢
e8g|ÈvµÓÆuJQ\z¦Úé㤮ߩvj¢(jÔ®w¸)äð¸ZÉÝÔëZ¥ç2mxèü¿&dj
ëc/³Z(ÎTªS}ݬÁ5-4Ü_|ü¶·Û]rn·üy<Q²3G½<\-/ådÈ¥?¾SdÕ~3ê`§æü%a½?qÖ¶InTÏÅçTaÉQÄÄ6>mAÉx×F
$ÏÇj%SUú)u²ÍuÞ-\ùçÄù¡pµ
ëmªRp³pVHñ´&ÖÇÁ®çZlØ#
¬
6i½TÝYWçþ6=Ù?ÁÖ$(t@îÆ´kü(«xNt<~´¡tÆG:°AŶI:5F>·©ñ5Ùð¢Ù«±u+ÔCa²Û
ãè@¨|v
BfÃþó{6ßåxdz³åoontîñ<ª n»¯béä¯TZ9Y22Í©]d7Um\º/)íaz«^ÇvPúY.ó/ÁT³!YJ²cÑÌ<òÎ(6=eRÍK0ù%WKXÒª6j³Å"¾
1·ã}¡Üâ#SäJ&wÊö²iº]íÇTªwÉ0Rmý)kMu^FóÓ")
«7ÙR
`ýëÑÒöLÝǹ©
7"æ°=Aµk
ûüî»ï
Ö`
µÔPnlf½·Ë"MyQãpQWѸ&¤õõêd©ÛÒ,ui&[ýaLN,\$gÐäÙç ;2@à4ìô
úçk ,y¹Âã*áÃñÅà¹Ì'ÜãÇØxizãe!°ÌivãÀßÔÔ¹Mç¼é
¸AIk'¾^® É95ê<¨GRvþ~=ÂõÀ©aMþUQ<µ=
R)©VWËLc3ÙCï;Ù©¥9ic[Å©5èeS9äh̬â;BBºO§8ª8ùë±10êø%Æ@³m3Ü»²fpÚSð0È?MkG;8Ìmi¨æJ`>ñMFÇhòZEïhò½MÓ/ìï÷)Ò½¹j{&1<Ä@1¡aU;Y8ÁÅç§ÂZ{p8öI"ó wPð"Õö¢zlíS®FõçøG¬![:6ÿRF¦{°q÷ë ¦8 ±ËY¾ñø@;l{bQÔìª ûq½UÊ@P_¸ÎFï[çGròÓTÿK.÷q¹vÒ|$n%þYy/º{9í^ÒÍIjCÇ|åZ|_(»ò¨3òÚÑ/{`Óñ@i¯%(üý_?ÒEª§ÐæbS¤´"ZÔ¬_É3«9ód÷³[{ ñ¶TýNßÊ~ñ´ÐZ§QC*9lWôÍ>òPTe×¼ÔçGÇð¼²²óëj}ÂÎ_ËbÎØ:xðì|B&þ£7WµÉTª©ê7TÜî£q×ÜßjîÈXA×áS©+Ýøãï6z{ vøXÍáJmHTÕñ@j±é±+v£¢r#
eüN#ú6]£¢íýYó¯7úvz`ð[Æ!éóAügÌvzT¼½GµSÿÂb¬nÃLá*J¥ÃQI/|ÜB
YWø*qR<BJé¸!ãÒe¨08ȱÇa±n)A-á¶ ÄíÁ£KÝÖÕ¼_-§Qº 8Á¥$9
ét¼5PÒþ,§'¥îEzRXNO²òWÎÎæ)àªt]¥¢üùm2 ÉÊÿ,E} vÿÊ©Xòæ;ÿõöÛ·ß
mÈkì£BÍ9+m"³Á-Òû@
¯S¶Ï1(æz9RòÀÛ3©º&ªÖsX|Zt2,b¹ë9«¨Û+ÞVêzIøàl¥,àrñq×*]µ¹æÜ:zßÊ&ÖS Ç»²Rvqqòþzùß%%ıçGñÕ5=»ÄJès·\{
]h³´]*CÓ)»ü-þãRCP7U¤ýe©+H%
:÷[ÌÏãâ3¹D¥ç¡3´KéÜÇÓs¿$¸rÍÂx»8Tiª/Ê»/\³þÔ PL9ÁL¢ô h( nÖ}ëB!§m£iÒú$ÝyÐÇ×ÌÒ¼E|³³Ä×ø{«O¨ü¥]Z~ÿÅÇÁhWåc
פÃC¡òQÁn&e9òP_BÏ:a.\h
kçj¨Zläáêºå+³Å±]KÂÔÃñz¦óɸØC>L/u3»åF¶¯Ü[·ÜCzÝ%N@){õ\_BQVUóéT¨_MBñI´@§j%|}q®(´#áRªÉÛßü¸ (Ë`y}rW[ÛÂÒ4<.<µ>[{ÐùÁRUýErsEZÇãùe ¿Ó}}Í-àðºõwÕä®2}öW§ÂÅí©Æò¿ù_g»ÙH
endstream
endobj
151 0 obj
<</Filter/FlateDecode/Length 8688>>
stream
xÚÕ]I¯#Éq¾ûWðd¼Ár.[Ým mhÀ°H0a]dûß+"r©ÌbV±È~éÆÃ«WK®±|qøÓAþ§ÎÁÃå¼ñüùcúùEùûëoÿÏò`à=|3ðéÌAêA¼qýÝIiÄdÎâêÎB] -Ô4]¥pÁp«4¬º Îj4^Àä4hcåÕ\>ýþ¡
Í०eð0õ ¥ÐR3 ðÊÕZ^éôòÎ¯Ö %t©@c¡ðgØ~ü}×J:Z#ð
t%OÕ;cüÁÏâßf¾Ö>Wª«ÄA¬«joýÓ7˱÷C°è£4!àÁLîÓQÃI
Åsæââ
R!>Âá;8
çøHúøö£w`â;\~ùÊïÐ¥GfI¥ }é=É_òCÒ®Ô
3·«º¯Ä 2