<pre style='margin:0'>
Mihai Moldovan (Ionic) pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/3c41e9203c65aa682b0d9f51efdddba222232776">https://github.com/macports/macports-ports/commit/3c41e9203c65aa682b0d9f51efdddba222232776</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 3c41e92  net/openssh: (hopefully) fix build failures on 10.7-. Round five.
</span>3c41e92 is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 3c41e9203c65aa682b0d9f51efdddba222232776
</span>Author: Mihai Moldovan <ionic@ionic.de>
AuthorDate: Fri Oct 25 20:55:09 2019 +0200

<span style='display:block; white-space:pre;color:#404040;'>    net/openssh: (hopefully) fix build failures on 10.7-. Round five.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    The new Keychain integration code uses Object Subscripting, a newer
</span><span style='display:block; white-space:pre;color:#404040;'>    feature requiring explicit compiler and library support.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    We can provide an implementation for the affected NS types directly, but
</span><span style='display:block; white-space:pre;color:#404040;'>    also need to make sure that a suitable compiler is chosen.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    That means either Apple LLVM 4.0 (>= 421) or FOSS clang/llvm 3.1. Since
</span><span style='display:block; white-space:pre;color:#404040;'>    all older versions of clang/llvm were evicted from MacPorts a while ago,
</span><span style='display:block; white-space:pre;color:#404040;'>    any macports-clang version will do nowadays.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    No revbump since this only fixes build failures.
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Fixes: https://trac.macports.org/ticket/59397
</span>---
 net/openssh/Portfile                               |  18 ++++
 ...-Apple-keychain-integration-other-changes.patch | 119 +++++++++++++++++----
 2 files changed, 119 insertions(+), 18 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/openssh/Portfile b/net/openssh/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index e5f1217..dc4cdff 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/openssh/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/openssh/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -2,6 +2,8 @@
</span> 
 PortSystem          1.0
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+PortGroup           compiler_blacklist_versions 1.0
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span> name                openssh
 version             8.1p1
 revision            1
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -102,6 +104,22 @@ if {${name} eq ${subport}} {
</span> 
     use_parallel_build  yes
 
<span style='display:block; white-space:pre;background:#e0ffe0;'>+    platform macosx {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        if {${os.major} <= 11} {
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # clang is required to build the new Apple Keychain integration due
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # to it using the Object Subscripting feature, c.f. #59397.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # We'll keep it simple and just blacklist any gcc version, cc
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # (which could be anything), system clang versions prior to those
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # shipped with Xcode 4.4.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # Regarding the macports-clang versions, any version in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # MacPorts tree should suit our needs, since the clang
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # documentation lists FOSS clang/llvm 3.1 as the first version to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # support Object Subscripting and the oldest version in our tree is
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            # now 3.3.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+            compiler.blacklist-append   *gcc* cc {clang < 421}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+        }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span>     destroot.target     install-nokeys
 
     test.run            yes
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/net/openssh/files/0002-Apple-keychain-integration-other-changes.patch b/net/openssh/files/0002-Apple-keychain-integration-other-changes.patch
</span><span style='display:block; white-space:pre;color:#808080;'>index 028f201..32561ad 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/net/openssh/files/0002-Apple-keychain-integration-other-changes.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/net/openssh/files/0002-Apple-keychain-integration-other-changes.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,6 +1,6 @@
</span> --- /dev/null     1970-01-01 00:00:00.000000000 +0000
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/keychain.m        2019-10-25 03:54:31.000000000 +0200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,274 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/keychain.m   2019-10-25 20:01:20.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,290 @@
</span> +/*
 + * Copyright (c) 2007-2016 Apple Inc. All rights reserved.
 + *
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -79,6 +79,22 @@
</span> +#include "openbsd-compat/openbsd-compat.h"
 +#include "log.h"
 +
<span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * This code uses Object Subscripting, a new ObjC feature requiring explicit
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * compiler and library support.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * OS X 10.7- don't support that out of the box, but it's possible to
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * emulate the behavior on older systems by providing an implementation and
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * a more recent clang compiler.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * We can provide the implementation directly and will do that, MacPorts'
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * compiler selection will have to do the second part.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Yes, importing an implementation is weird, but I'd rather keep the emulation
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * layer separate.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#import "macos-object-subscripting.m"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span> +char *keychain_read_passphrase(const char *filename)
 +{
 +      OSStatus        ret = errSecSuccess;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -276,7 +292,7 @@
</span> + return ret;
 +}
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/keychain.h        2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/keychain.h   2019-10-25 19:44:43.000000000 +0200
</span> @@ -0,0 +1,36 @@
 +/*
 + * Copyright (c) 2007-2016 Apple Inc. All rights reserved.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -315,7 +331,7 @@
</span> +char     *keychain_read_passphrase(const char *filename);
 +int   load_identities_from_keychain(int (^add_identity)(const char *identity));
 --- a/Makefile.in      2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/Makefile.in       2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/Makefile.in  2019-10-25 19:44:43.000000000 +0200
</span> @@ -41,6 +41,7 @@ PATHS= -DSSHDIR=\"$(sysconfdir)\" \
  CC=@CC@
  LD=@LD@
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -386,7 +402,7 @@
</span>  ssh-keygen$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keygen.o sshsig.o
        $(LD) -o $@ ssh-keygen.o sshsig.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
 --- a/audit-bsm.c      2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/audit-bsm.c       2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/audit-bsm.c  2019-10-25 19:44:43.000000000 +0200
</span> @@ -62,6 +62,18 @@
  #include <bsm/audit_record.h>
  #include <locale.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -427,7 +443,7 @@
</span>           info.ai_auid = the_authctxt->pw->pw_uid;
        else
 --- a/configure.ac     2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/configure.ac      2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/configure.ac 2019-10-25 19:44:43.000000000 +0200
</span> @@ -20,6 +20,7 @@ AC_LANG([C])
  
  AC_CONFIG_HEADER([config.h])
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -489,7 +505,7 @@
</span>  dnl Add now.
  CFLAGS="$CFLAGS $werror_flags"
 --- a/groupaccess.c    2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/groupaccess.c     2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/groupaccess.c        2019-10-25 19:44:43.000000000 +0200
</span> @@ -39,6 +39,10 @@
  #include "match.h"
  #include "log.h"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -529,7 +545,7 @@
</span>   for (i = 0, j = 0; i < ngroups; i++)
                if ((gr = getgrgid(groups_bygid[i])) != NULL)
 --- a/readconf.c       2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/readconf.c        2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/readconf.c   2019-10-25 19:44:43.000000000 +0200
</span> @@ -167,6 +167,9 @@ typedef enum {
        oHashKnownHosts,
        oTunnel, oTunnelDevice,
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -586,7 +602,7 @@
</span>  
  struct fwdarg {
 --- a/readconf.h       2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/readconf.h        2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/readconf.h   2019-10-25 19:44:43.000000000 +0200
</span> @@ -137,6 +137,9 @@ typedef struct {
        char    *local_command;
        int     permit_local_command;
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -598,7 +614,7 @@
</span>  
        int     request_tty;
 --- a/session.c        2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/session.c 2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/session.c    2019-10-25 19:44:43.000000000 +0200
</span> @@ -1185,6 +1185,21 @@ do_setup_env(struct ssh *ssh, Session *s
                child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
                    original_command);
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -622,7 +638,7 @@
</span>           /* dump the environment */
                fprintf(stderr, "Environment:\n");
 --- a/ssh-add.0        2019-10-09 02:39:14.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/ssh-add.0 2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ssh-add.0    2019-10-25 19:44:43.000000000 +0200
</span> @@ -4,7 +4,7 @@ NAME
       ssh-add M-bM-^@M-^S adds private key identities to the authentication agent
  
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -654,7 +670,7 @@
</span>               plain private keys only and skip certificates.
  
 --- a/ssh-add.1        2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/ssh-add.1 2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ssh-add.1    2019-10-25 19:44:43.000000000 +0200
</span> @@ -43,7 +43,7 @@
  .Nd adds private key identities to the authentication agent
  .Sh SYNOPSIS
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -686,7 +702,7 @@
</span>  When loading keys into or deleting keys from the agent, process plain private
  keys only and skip certificates.
 --- a/ssh-add.c        2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/ssh-add.c 2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ssh-add.c    2019-10-25 19:44:43.000000000 +0200
</span> @@ -67,6 +67,11 @@
  #include "ssherr.h"
  #include "digest.h"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -763,7 +779,7 @@
</span>  
  int
 --- a/ssh-agent.c      2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/ssh-agent.c       2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ssh-agent.c  2019-10-25 19:44:43.000000000 +0200
</span> @@ -70,6 +70,10 @@
  #include <time.h>
  #include <string.h>
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -915,7 +931,7 @@
</span>           parent_alive_interval = 10;
        idtab_init();
 --- a/sshconnect2.c    2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/sshconnect2.c     2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/sshconnect2.c        2019-10-25 19:44:43.000000000 +0200
</span> @@ -73,6 +73,11 @@
  #include "ssherr.h"
  #include "utf8.h"
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -957,7 +973,7 @@
</span>               !(id->key && id->isprivate))
                        maybe_add_key_to_agent(id->filename, private, comment,
 --- a/ssh-agent.0      2019-10-09 02:39:14.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/ssh-agent.0       2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ssh-agent.0  2019-10-25 19:44:43.000000000 +0200
</span> @@ -7,6 +7,7 @@ SYNOPSIS
       ssh-agent [-c | -s] [-Dd] [-a bind_address] [-E fingerprint_hash]
                 [-P pkcs11_whitelist] [-t life] [command [arg ...]]
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -977,7 +993,7 @@
</span>       agent.  When the command dies, so does the agent.
  
 --- a/ssh-agent.1      2019-10-09 02:31:03.000000000 +0200
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/ssh-agent.1       2019-10-25 02:33:21.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/ssh-agent.1  2019-10-25 19:44:43.000000000 +0200
</span> @@ -52,6 +52,8 @@
  .Nm ssh-agent
  .Op Fl c | s
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -999,7 +1015,7 @@
</span>  .Pp
  If a command line is given, this is executed as a subprocess of the agent.
 --- /dev/null  1970-01-01 00:00:00.000000000 +0000
<span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ b/SecItemPriv-shim.h        2019-10-25 04:58:27.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/SecItemPriv-shim.h   2019-10-25 19:44:43.000000000 +0200
</span> @@ -0,0 +1,105 @@
 +/*
 + * Copyright (c) 2006-2013 Apple Inc. All Rights Reserved.
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1106,3 +1122,70 @@
</span> +__END_DECLS
 +
 +#endif /* !_SECURITY_SECITEMPRIV_H_ */
<span style='display:block; white-space:pre;background:#e0ffe0;'>+--- /dev/null   1970-01-01 00:00:00.000000000 +0000
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ b/macos-object-subscripting.m  2019-10-25 19:57:45.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -0,0 +1,64 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++/*
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Copyright (c) 2017-2019 Mihai Moldovan <ionic@ionic.de>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * Redistribution and use in source and binary forms, with or without
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * modification, are permitted provided that the following conditions
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * are met:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 1.  Redistributions of source code must retain the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *     notice, this list of conditions and the following disclaimer.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 2.  Redistributions in binary form must reproduce the above copyright
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *     notice, this list of conditions and the following disclaimer in the
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *     documentation and/or other materials provided with the distribution.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * 3.  Neither the name of the authors nor the names of its
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *     contributors may be used to endorse or promote products derived from
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *     this software without specific prior written permission.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ *
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++ */
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#include <AvailabilityMacros.h>
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#if ((!(defined (MAC_OS_X_VERSION_10_7))) || (MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_7))
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@implementation NSArray (SubscriptingAdditions)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++- (id)objectAtIndexedSubscript:(NSUInteger)index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return [self objectAtIndex:index];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@implementation NSMutableArray (SubscriptingAdditions)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++- (void)setObject:(id)object atIndexedSubscript:(NSUInteger)index
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    if (index == [self count])
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        [self addObject:object];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    else
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++        [self replaceObjectAtIndex:index withObject:object];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@implementation  NSDictionary (SubscriptingAdditions)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++- (id)objectForKeyedSubscript:(id)key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    return [self objectForKey:key];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@implementation  NSMutableDictionary (SubscriptingAdditions)
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++- (void)setObject:(id)object forKeyedSubscript:(id)key
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++{
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++    [self setObject:object forKey:key];
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++@end
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++#endif /* ((!(defined (MAC_OS_X_VERSION_10_7))) || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7)) */
</span></pre><pre style='margin:0'>

</pre>