블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2862)
Unity3D (899)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (192)
협업 (65)
3DS Max (3)
Game (12)
Utility (142)
Etc (99)
Link (34)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (20)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

[Crash 내용]

com.apple.root.default-qos SIGABRT ABORT 0x00000001e01bf4c4

------------

 

오랜만에 iOS 빌드하는 프로젝트에서 빌드는 잘되는데 실행하니 일부 아이폰에서 위와 같은 크래시레포트를 뱉으면서 앱이 죽는다.

찾아보니 권한을 사용하려는데 Privacy Description이 없어서 죽는 것 같다.

이번에 내 경우는 NSUserTrackingUsageDescription 였는데,

어떤 Privacy Description이 없어서 크래시가 나는지는 본인이 체크하고 추가해줘야 될 것 같다.

 

 

[참조]

https://walkthinksleep.tistory.com/entry/Crashed-comapplerootdefaultqos-%EC%9D%B4%EC%8A%88

 

iOS, Crashed: com.apple.root.default-qos 이슈

crashed 1 times in __TCCAccessRequest_block_invoke.85! 라고 연락(?)이 왔고,Crashed: com.apple.root.default-qos 라고 Fabric이 얘기해줬다. 구글링을 해보면 주로 privacy에 관련된 내용이 생길때 나타나는 에러 같았다.

walkthinksleep.tistory.com

 

반응형
Posted by blueasa
, |

[추가] 2023-07-20

Unity 2022.3.5f1에서 이슈 해결된 것 확인함

(몇 버전부터 해결된건지는 확인 못함)

 

--------------------------------------------------

Unity 2022.2.18f1

Firebase 10.7.0

----

 

[빌드에러 #1]

> Configure project :unityLibrary
Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'unityLibrary\build.gradle'


...

 

[빌드에러 #2]

Execution failed for task ':launcher:checkReleaseDuplicateClasses'.
> Could not resolve all files for configuration ':launcher:releaseRuntimeClasspath'.


-------------------------------------------------------------------------------------------------------------

 

 

Unity 2021에서 Unity 2022로 포팅하는 중에 위와 같은 빌드 에러가 떠서 찾아보니

Gradle 관련 Unity 2022 버그가 있는 것 같다.

 

[수정]

[참조] 링크 내용대로 아래와 같이 Gradle을 수정하고 정상적으로 빌드 되는 걸 확인 함.

간단히 정리하면 settingsTemplate.gradle에 있던 걸 baseProjectTemplate.gradle로 옮겨야 한다.

-------------------------------------------------------------------------------------------------------------

256p commented on Jan 24

Also, there is another workaround that keeps the Gradle version (in case some android lib requires it).
For that workaround, you will need to copy a file from /Applications/Unity/Hub/Editor/2022.2.3f1/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/settingsTemplate.gradle to Assets/Plugins/Android/settingsTemplate.gradle. That way Unity will use your template in Assets/Plugins/Android. (It's weird that Unity doesn't has a checkbox for that)
For my version of unity, it looks like that:

 

[Before] ../Assets/Plugins/Android/settingsTemplate.gradle

pluginManagement {
    repositories {
        **ARTIFACTORYREPOSITORY**
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

include ':launcher', ':unityLibrary'
**INCLUDES**

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
    repositories {
        **ARTIFACTORYREPOSITORY**
        google()
        mavenCentral()
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
    }
}

 

The conflicting part is RepositoriesMode.PREFER_SETTINGS. But you can safely delete the whole dependencyResolutionManagement block from here. Since the android project still needs to know about local dependencies, copy the repositories block, you will need it later.
Now settingsTemplate.gradle should look like this:

 

[After] ../Assets/Plugins/Android/settingsTemplate.gradle

pluginManagement {
    repositories {
        **ARTIFACTORYREPOSITORY**
        gradlePluginPortal()
        google()
        mavenCentral()
    }
}

include ':launcher', ':unityLibrary'
**INCLUDES**

------------------------------------------------------------------------------------------------------------------------------------------

Now in Project Settings > Player > Publishing Settings for Android enable Custom Base Gradle Template
Initially, it will look like that:

 

[Before] ../Assets/Plugins/Android/baseProjectTemplate.gradle

plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    **BUILD_SCRIPT_DEPS**
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

Now create allprojects block and paste repositories copied in the settings template. As a result base template will look like that:

 

[After] ../Assets/Plugins/Android/baseProjectTemplate.gradle

plugins {
    id 'com.android.application' version '7.1.2' apply false
    id 'com.android.library' version '7.1.2' apply false
    **BUILD_SCRIPT_DEPS**
}

allprojects {
    repositories {
        **ARTIFACTORYREPOSITORY**
        google()
        mavenCentral()
        flatDir {
            dirs "${project(':unityLibrary').projectDir}/libs"
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

 

Now Gradle should build successfully.

 

-------------------------------------------------------------------------------------------------------------

 

[참조] https://github.com/googlesamples/unity-jar-resolver/issues/594

 

[Bug] Android Gradle project repositories block don't work for the latest Unity versions · Issue #594 · googlesamples/unity-ja

[REQUIRED] Please fill in the following fields: Unity editor version: 2022.2.2f1 External Dependency Manager version: 1.2.175 Source you installed EDM4U: .unitypackage Features in External Dependen...

github.com

 

 

반응형
Posted by blueasa
, |

 [링크] http://lancekun.com/blog/?p=599

 

안드로이드 Gradle / IL2CPP 환경에서 프로세스 남는 현상 – 랜스군의 게임공작소

유니티2018.3.12 에서gradle로 빌드시에 Application.Quit 으로 종료이후 다시 재실행시 UnityIAP 초기화가 실패하는 경우가 있습니다. 대략적으로 Inventory를 갱신시켜준후 Java프록시 호출이 실패하는 이슈(

lancekun.com

 

반응형
Posted by blueasa
, |

[추가]

아래 방법은 Mono 전용으로IL2CPP에서는 런타임 오류가 난다.

IL2CPP 빌드로 바껴서 현재는 사용 못할 것 같다.

-----------------------------------------------------------------

 

System.Diagnostics.ProcessThreadCollection pt = System.Diagnostics.Process.GetCurrentProcess().Threads;
foreach (System.Diagnostics.ProcessThread p in pt)
{
    p.Dispose();
}
System.Diagnostics.Process.GetCurrentProcess().Kill();

 

[링크] https://chopchops.tistory.com/17

 

[Unity] 게임 재실행시 튕기는 오류

게임을 재시작했을때 게임이 갑자기 꺼지는 기이한 현상 해결 1 ) 게임이 종료될때 모든 Thread가 종료되지 않아서 발생하는 문제라는 의견 -> 게임종료시 모든 스레드 종료 1 2 3 4 5 6 7 8 9 10 11 privat

chopchops.tistory.com

 

[참조1] https://202psj.tistory.com/1341

 

[Unity] 유니티 종료,Quit, Exit 관련

================================= ================================= ================================= 출처: https://hyunity3d.tistory.com/386 using UnityEngine; using System.Collections; public class CsGameManager : MonoBehaviour { // Use this for initia

202psj.tistory.com

[참조2] https://blog.naver.com/captainj/221103098214

 

Application.Quit으로 앱종료시 오류 메시지가 뜰때

종종 유니티에서 Application.Quit() 함수로 앱을 종료하는 경우, 앱은 정상적으로 종료는 되지만 오류 ...

blog.naver.com

 

반응형
Posted by blueasa
, |

Unity 2021.3.41f1

----

 

[추가4] 2024-08-06

Play Asset Delivery v1.9.1이 업데이트 돼있어서 적용함.

 

[추가3] 2024-03-27

Play Asset Delivery v1.9.0(2024-03-27 기준 최신)이 업데이트 됐다.

1.9.0은 최소 Unity 버전이 2017.4로 표기돼있다.(버전별 문제를 해결한건가..?)

 

[추가2]

AssetDelivery 1.7.0으로 iOS 빌드 하면서 ./GooglePlayPlugins/com.google.play.assetdelivery/Samples 폴더 관련 소스에서 에러가 나서 삭제 함.

 

[추가]

aab파일 150mb 초과해서 구글스토어 올리려고 알아보고

아래 [링크]의 내용대로 진행해서  Play Asset Delivery v1.8.2(2023-04-25 기준 최신)를 설치해서 빌드해보니,

빌드는 잘 되지만 실행하면 크래시 나면서 앱이 죽는다.

버전 정보를 보면 Play Asset Delivery v1.8.0 이상부터는 Unity 최소 버전이 2023.1.0 (베타)이다.

(1.8.0이상은 2023.1.0 이상이라고 돼있지만 2022.2.18f1에서 정상동작 하는걸 확인했다.)

 

[참조] https://github.com/google/play-unity-plugins/issues/187

 

Crash at Android 12 · Issue #187 · google/play-unity-plugins

Hello I'm now experiencing crash on android devices with Android 12 only. thread.cc:2372] Throwing new exception 'No interface method getPackStates(Ljava/util/List;)Lcom/google/android/play/core/ta...

github.com

 

크래시 내용을 찾아보니 위[참조]와 같은 내용이 있다.

Firebase와 PAD(Play Asset Delevery)와 호환성 문제가 있는 것 같다.

 

참조 링크의 내용대로면 현재 Play Asset Delivery v1.8.x 버전은 제대로 안되고, Play Asset Delivery v1.7.0을 사용해서 성공했다고 한다.

 

[Github:Play Unity Plugins v1.7.0] https://github.com/google/play-unity-plugins/releases/tag/v1.7.0

 

Release v1.7.0 · google/play-unity-plugins

com.google.play.integrity (v1.0.0) New Features Initial release Unchanged Packages com.google.android.appbundle (v1.7.0) com.google.play.appupdate (v1.7.0) com.google.play.assetdelivery (v1.7.0)...

github.com

[Google Play:Play Asset Delivery] https://developers.google.com/unity/archive?hl=ko#play_asset_delivery

 

Unity용 Google 패키지 다운로드  |  Google Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English Unity용 Google 패키지 다운로드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 보관 파

developers.google.com

 

위 Play Asset Delivery 링크에서 1.7.0버전 UnityPackage를 다운로드해서 Import하고,

정상 빌드 되는 것을 확인했다.

 

[결론]

Unity 2021 이하 Play Asset Delivery 1.7.0을 사용하고,

Unity 2022 이상은 Play Asset Delivery 1.8.2(2023-05-12 기준 최신)을 사용하자.

(Unity 2021에서도 gradle 4.2.0을 적용하면 Play Asset Delivery 1.8.2 이상을 사용할 수 있다.

  2024-03-27 기준 1.9.0이 나와있으니 1.9.0을 사용하자.)

 

 

--------------------------------------------------------------------------------------------------------------------------------------------

 

[링크] https://devgod.tistory.com/49

 

[Unity] Unity Play Asset Delivery 앱 빌드, Unity 대용량 앱 빌드

2021년 8월부터 Google Play Store에선 obb를 이용한 대용량 앱 업로드가 사라지고, 무조건 Play Asset Delivery(PAD)를 통해 앱을 업로드 해야합니다. 제발 정책좀 그만 변경했으면 좋겠습니다. 먼저 제가 궁

devgod.tistory.com

반응형
Posted by blueasa
, |

Android 13에서 Runtime에 android.permission.POST_NOTIFICATIONS Permission 요청하기.

----

 

1. Android Target API 33으로 셋팅

 

2. AndroidManifest.xml에 POST_NOTIFICATIONS Permission 추가

<manifest ...>
    <application ...>
        ...
    </application>
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
</manifest>

 

3. 권한 요청 원하는 시점에 아래 함수 호출(함수 호출하면 Android 13이상 폰에서는 알림 권한 허용 요청 팝업이 뜸)

void CheckPermission_PostNotifications_Android13()
{
    // 디바이스의 안드로이드 api level 얻기
    // ex) Prints "Android OS API-33" on Android 13.0
    // https://docs.unity3d.com/ScriptReference/SystemInfo-operatingSystem.html
    string androidInfo = SystemInfo.operatingSystem;
    Debug.Log("androidInfo: " + androidInfo);
    
    int apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 3), System.Globalization.CultureInfo.InvariantCulture);
    Debug.Log("apiLevel: " + apiLevel);

    // 디바이스의 api level이 33 이상이라면 퍼미션 요청
    if (33 <= apiLevel 
        && !UnityEngine.Android.Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
    {
        UnityEngine.Android.Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
    }
}

 

 

-----------------------------------------------------------------------------------------

[참고]

안드로이드 알림은 api level 26 과 33 에서 변경점이 있다. 내 앱이 대상으로 삼은 Sdk Version 범위에 이 버전이 포함되어 있다면 버전에 따라 분기 처리를 해주는 편이 좋다.
API level 26 (Android 8.0 Oreo) 이상 변경점
API level 33 (Android 13 Tiramisu) 이상 변경점

public void InitializeAndroidLocalPush()
{
	// 디바이스의 안드로이드 api level 얻기
	string androidInfo = SystemInfo.operatingSystem;
	Debug.Log("androidInfo: " + androidInfo);
	apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 2));
	Debug.Log("apiLevel: " + apiLevel);

	// 디바이스의 api level이 33 이상이라면 퍼미션 요청
	if (apiLevel >= 33 &&
		!Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
	{
		Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
	}

	// 디바이스의 api level이 26 이상이라면 알림 채널 설정
	if (apiLevel >= 26)
	{
		var channel = new AndroidNotificationChannel()
		{
			Id = CHANNEL_ID,
			Name = "pubSdk",
			Importance = Importance.High,
			Description = "for test",
		};
		AndroidNotificationCenter.RegisterNotificationChannel(channel);
	}
}

api level 얻기 코드 출처

 

 

[참고 내용 출처]

https://velog.io/@maratangsoft/%EC%9C%A0%EB%8B%88%ED%8B%B0-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%95%B1%EC%97%90%EC%84%9C-FCM-%EC%84%9C%EB%B2%84-%ED%91%B8%EC%8B%9C-%EB%B0%9B%EA%B8%B0

 

유니티 안드로이드 앱에서 FCM 서버 푸시 받기

유니티 모바일 앱 개발시 안드로이드 앱은 Firebase Cloud Messaging(이하 FCM) 서비스, iOS 앱은 Apple Push Notification 서비스를 이용해서 (FCM으로도 가능) 푸시를 수신할 수 있다. 그 중 FCM을 이용한 안드로

velog.io

 

[참고]

https://android-developer.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C13%EC%97%90%EC%84%9C-Notification-%ED%97%88%EA%B0%80-%EB%B0%9B%EA%B8%B0-%EB%B0%A9%EB%B2%95-%EB%B0%8F-%EB%B3%80%EA%B2%BD%EC%A0%90

 

안드로이드13에서 Notification 허가 받기 방법 및 변경점

안드로이드13에서 Notification에 대해 바뀐점 POST_NOTIFICATIONS (Notification Permission) 은 Target SDK API 33 이상부터 추가 가능 Target SDK API 32 이하의 앱이 Android 13 디바이스에 설치되면 Notification Channel을 등록

android-developer.tistory.com

반응형
Posted by blueasa
, |

어쩌다보니 유니티 어필리에이트 참여하게 돼서 가입하고 보니 레퍼럴 링크 개념인 것 같다.

아래 링크들로 구매 or 구독하면 나에게 일정의 수수료를 주는 듯..

 

손해볼 건 없으니 참여했는데.. 내가 내 레퍼럴 링크로 사도 되나..?? 라는 궁금증이 생김.

 

 

Promote Unity Subscription Products:
To promote Unity subscription products, use these links:

Unity Plus:
https://prf.hn/click/camref:1011lvKwd/destination:https://store.unity.com/products/unity-plus

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

Unity Pro:
https://prf.hn/click/camref:1011lvKwd/destination:https://store.unity.com/products/unity-pro

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

Unity Learn Premium:
https://prf.hn/click/camref:1011lvKwd/destination:https://unity.com/learn-premium

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

Unity Partner Courses:
https://prf.hn/click/camref:1011lvKwd/destination:https://unity.com/learn/partner-courses

 

Learn

Online and in-person Unity courses and training in 2D, 3D, AR, and VR development.

unity.com

 

 

반응형
Posted by blueasa
, |

[링크] https://blog.naver.com/kki7540/221538021815

 

에요 예요 이에요 이예요 완벽하게 정리해보자!!

뭐가 맞고 뭐가 틀린지 간단하게 보실 분들은 중간에 쓴 내용은 무시하시고 자, 최종적으로 다 정리를 해보...

blog.naver.com

 

반응형
Posted by blueasa
, |

오늘 저는 다음 정보와 함께 "Command CodeSign failed with a nonzero exit code" 오류를 받았습니다 .

ID 서명: "내 ID"
/usr/bin/codesign --force --sign xxxxxxxx --timestamp=none /path/to/derived/data...
xxxxxxxx: ID를 찾을 수 없음 0이 아닌
종료 코드로 인해 명령 CodeSign이 실패함

이 오류가 발생하는 데는 몇 가지 이유가 있을 수 있습니다. 방금 나에게 일어난 일을 공유하겠습니다.

#문제의 원인

키체인 액세스 앱 에서 키체인을 망칠 때 이 문제가 발생합니다 . 새 인증서를 만들고 이전 인증서를 삭제하려고 했습니다. 그리고 Xcode가 삭제된 것을 사용하려고 시도한 것 같습니다.

 

#해결책

내 솔루션은 Xcode 문제가 발생했을 때 항상 수행하는 작업인 Clean Build Folder입니다.

  1. 옵션 키 또는 ⌘ - CMD + ⇧ - SHIFT⌥ + - option + K 를 누른 상태에서 메뉴 제품 > 빌드 폴더 정리를 클릭합니다 .
  2. Xcode를 닫습니다. 이것은 저에게 매우 중요한 단계입니다. 닫아야 작동합니다.
  3. 앱을 다시 열면 키체인에 액세스하라는 대화 상자가 표시될 수 있습니다. 액세스 권한을 부여하면 문제가 해결됩니다.

 

----

Today I got the "Command CodeSign failed with a nonzero exit code" error with the following information.

Signing Identity: "My identity"
/usr/bin/codesign --force --sign xxxxxxxx --timestamp=none /path/to/derived/data...
xxxxxxxx: no identity found
Command CodeSign failed with a nonzero exit code

There might be several reasons that cause this error. I will share one that just happened to me.

#Cause of the problem

I got this problem when I mess up with keychains in the Keychain Access app. I created a new certificate and tried to delete an old one. And I think Xcode was attempting to use the deleted one.

 

#Solution

My solution is what we always do when we got an Xcode problem, Clean Build Folder.

  1. Click menu Product > Clean Build Folder while holding down option key or ⌘ - CMD + ⇧ - SHIFT + ⌥ - option + K.
  2. Close the Xcode. This is a very important step for me. I need to close it to work.
  3. Reopen the app, and you might see the dialog asking to access the keychain. Grant the access, and the problem should go away.

 

 

[출처] https://sarunw.com/posts/how-to-fix-command-codesign-failed/

 

How to fix "no identity found - Command CodeSign failed with a nonzero exit code" error in Xcode | Sarunw

There might be several reasons that cause this error. I will share one that just happened to me.

sarunw.com

[참조] https://intrepidgeeks.com/tutorial/error-handling-ios-development-error-command-codesign-failed-with-nonzero-exit

 

[오류 처리] iOS 개발 오류, command codesign failed with a nonzero exit code

문제. Xcode 실행 코드, error입니다. 아래와 같습니다.command codesign failed with a nonzero exit code 해결하다 1. 클렌징, command+shift+k 2. 컴퓨터를 재부팅하고 다시 실행

intrepidgeeks.com

 

반응형
Posted by blueasa
, |

Mac Chrome에서 다른 사이트는 정상인데,

항상 접속하던 https://appcenter.ms 에 접속하려니 아래와 같은 오류가 뜬다.

'주의 요함'을 눌러보니 아래와 같이 '인증서가 올바르지 않음' 이라고 뜨는게 보인다.

인증서 문제인 듯..

문제를 해결하기 위해  아래 에러 문구로 이리저리 뒤져보고 여러가지를 시도해 봤지만 제대로 되지 않았다.

 

[검색어]

연결이 비공개로 설정되어 있지 않습니다.

NET::ERR_CERT_AUTHORITY_INVALID

 

검색하던 중 아래 링크의 사이트를 보게 됐는데,

인증서를 받아서 Mac의 '키 체인'에 추가한다음 '항상 신뢰'를 해주라고 돼있다.

 

[링크] https://www.ibm.com/docs/ko/tncm-p/1.4.2?topic=setup-not-able-accept-certificate-chrome-browser-mac 

 

Mac의 크롬 브라우저에서 인증서를 받을 수 없음

이 문제는 Mac의 크롬 브라우저에서만 확인할 수 있다. 증상Dashboard Application Services Hub에서 Telco Network Cloud Manager - Performance 대시보드 를 보려면 Chrome 브라우저가 인증서를 승인하지 않습니다. 이

www.ibm.com

인증서를 신뢰하지 못해서 생기는 문제니 인증서를 신뢰하게 만들면 될 것 같아서 시도 해 봄.

 

1. 오류 나는 사이트 접속(내 경우는 https://appcenter.ms)

2. 크롬 주소창 - '주의 요함' - '인증서가 올바르지 않음' Click

3. '인증서 뷰어' - '세부정보' - '내보내기(X)' Click 해서 해당 사이트 인증서 저장

4. 다운 받은 인증서 Double-Click 해서 '키 체인'에 추가.

5. '키 체인'에 추가된 인증서 다시 Double-Click 해서 설정 열기

6. '이 인증서 사용 시'가 '시스템 초기 설정 사용' → '항상 신뢰'로 변경

7. '항상 신뢰'로 변경하면 아래 보듯이 '이 인증서는 이 계정에 대해 신뢰된 것으로 표시됩니다' 라고 뜬다.

8. 좌측 상단 x를 누르면 변경하려면 로그인 암호 넣으라고 나오는데 입력하고 종료.

9. Chrome을 완전 종료 후, 다시 켜서 해당 사이트를 들어가보면 아래와 같이 정상적으로 뜨고,

   주소창 자물쇠를 눌러보면 '이 연결은 안전합니다' 라고 뜬다.

 

반응형
Posted by blueasa
, |