1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage tests.security.acl;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargets;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestLevel;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetNew;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport dalvik.annotation.TestTargetClass;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport junit.framework.TestCase;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.acl.AclEntry;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.acl.Permission;
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.Principal;
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Enumeration;
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Vector;
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.security.tests.support.acl.*;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@TestTargetClass(AclEntry.class)
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class IAclEntryTest extends TestCase {
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    class MyAclEntry extends AclEntryImpl {
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MyAclEntry() {
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super();
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public MyAclEntry(Principal pr) {
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(pr);
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#addPermission(Permission permission)
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#checkPermission(Permission permission)
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#removePermission(Permission permission)
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "addPermission",
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.security.acl.Permission.class}
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "checkPermission",
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.security.acl.Permission.class}
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "removePermission",
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.security.acl.Permission.class}
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_AclEntry01() {
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Permission perm = new PermissionImpl("Permission_1");
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyAclEntry ae = new MyAclEntry(new PrincipalImpl("TestPrincipal"));
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(ae.addPermission(perm));
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(ae.addPermission(perm));
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(ae.checkPermission(perm));
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(ae.removePermission(perm));
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(ae.removePermission(perm));
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(ae.checkPermission(perm));
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception ex) {
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + ex);
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#getPrincipal()
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#setPrincipal(Principal user)
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "getPrincipal",
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "setPrincipal",
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {java.security.Principal.class}
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_AclEntry02() {
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyAclEntry ae = new MyAclEntry();
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Principal mp = new PrincipalImpl("TestPrincipal");
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(ae.setPrincipal(mp));
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Principal p = ae.getPrincipal();
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("Names are not equal", p.getName(), mp.getName());
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse(ae.setPrincipal(mp));
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception ex) {
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + ex);
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#setNegativePermissions()
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#isNegative()
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargets({
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "setNegativePermissions",
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        ),
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        @TestTargetNew(
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            level = TestLevel.COMPLETE,
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            notes = "",
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            method = "isNegative",
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            args = {}
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        )
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    })
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_AclEntry03() {
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyAclEntry ae = new MyAclEntry(new PrincipalImpl("TestPrincipal"));
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse("isNegative() returns TRUE",ae.isNegative());
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ae.setNegativePermissions();
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("isNegative() returns FALSE", ae.isNegative());
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception ex) {
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + ex);
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#permissions()
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "permissions",
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_AclEntry04() {
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyAclEntry ae = new MyAclEntry(new PrincipalImpl("TestPrincipal"));
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Permission perm = new PermissionImpl("Permission_1");
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Enumeration en = ae.permissions();
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertFalse("Not empty enumeration", en.hasMoreElements());
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ae.addPermission(perm);
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            en = ae.permissions();
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue("Eempty enumeration", en.hasMoreElements());
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            Vector v = new Vector();
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            while (en.hasMoreElements()) {
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                v.addElement(en.nextElement());
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(v.size(), 1);
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals(v.elementAt(0).toString(), perm.toString());
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception ex) {
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + ex);
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#toString()
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "toString",
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_AclEntry05() {
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyAclEntry ae = new MyAclEntry(new PrincipalImpl("TestPrincipal"));
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String res = ae.toString();
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertTrue(res.contains("TestPrincipal"));
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception ex) {
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + ex);
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @tests java.security.acl.AclEntry#clone()
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    @TestTargetNew(
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        level = TestLevel.COMPLETE,
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        notes = "",
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        method = "clone",
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        args = {}
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    )
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void test_AclEntry06() {
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        MyAclEntry ae = new MyAclEntry(new PrincipalImpl("TestPrincipal"));
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        try {
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            assertEquals("Objects are not equal", ae.toString(), ae.clone().toString());
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } catch (Exception ex) {
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            fail("Unexpected exception " + ex);
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}